数据库中identity字段不必是系统产生的唯一值--性能优化方法添新招

本文探讨了在SQL数据库中利用IDENTITY特性优化多用户会话表的方法,通过调整sessionid字段为自动增长特性,减少不必要的表冗余,提升数据库性能。同时介绍了设置IDENTITY_INSERT来灵活控制自动增长行为,以及如何实现优化后的表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具有identity特性的字段,其值是系统产生的,自动增加的,所以,一般把这个用在一个表的主键上。

但是,具有identity特性的字段,不需要具有唯一性,更不必须是主键。

可以通过,set identity_insert  tablename (on|off),在运行时控制,是否可以在identity字段中指定值,而不是由系统自动的插入值。

那么,这有什么用处呢。举个例子来说,两个用户之间的聊天,可以有多次,这个用一个chatsession来表示。在数据库中,我们需要三个表: user, chatsession(sessionid identity,...), user_chatsession (userid, sessionid, ...), 来表示这个关系。这里面,多出了一个表chatsession, 其主键sessionid具有identity特性,并且在user_chatsession中被引用。

但是,我们知道,数据库写操作比读操作的开销要大很多,如果我想做优化,把chatsession整个的去掉,那应该怎么做呢.

这时,就会用到我说的这一点。首先把 user_chatsession 中的sesssionid变成identity 字段,在插入一个chat session中的第一个 user-session (for user a)记录时,让系统自动产生sessionid, 然后记录下这个sessionid, 在插入一个session中后续的 user-session (for user b, user c...), 执行set identity_insert  tablename on,就可以把先前记录的sessionid值插入。

还有另外一个方法,比较笨一点,就是用 select max(sessionid) + 1 from table where userid = @useridA,来获得要新插入的sessionid, 这种方法性能上显然差了许多。 

转载于:https://www.cnblogs.com/kakrat/archive/2011/09/05/2167771.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值