欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

數(shù)據(jù)庫中identity字段不必是系統(tǒng)產(chǎn)生的唯一值 性能優(yōu)化方法(新招)

 更新時(shí)間:2011年09月05日 20:14:21   作者:  
具有identity特性的字段,其值是系統(tǒng)產(chǎn)生的,自動(dòng)增加的,所以,一般把這個(gè)用在一個(gè)表的主鍵上。
但是,具有identity特性的字段,不需要具有唯一性,更不必須是主鍵。

可以通過,set identity_insert tablename (on|off),在運(yùn)行時(shí)控制,是否可以在identity字段中指定值,而不是由系統(tǒng)自動(dòng)的插入值。

那么,這有什么用處呢。舉個(gè)例子來說,兩個(gè)用戶之間的聊天,可以有多次,這個(gè)用一個(gè)chatsession來表示。在數(shù)據(jù)庫中,我們需要三個(gè)表: user, chatsession(sessionid identity,...), user_chatsession (userid, sessionid, ...), 來表示這個(gè)關(guān)系。這里面,多出了一個(gè)表chatsession, 其主鍵sessionid具有identity特性,并且在user_chatsession中被引用。

但是,我們知道,數(shù)據(jù)庫寫操作比讀操作的開銷要大很多,如果我想做優(yōu)化,把chatsession整個(gè)的去掉,那應(yīng)該怎么做呢.

這時(shí),就會(huì)用到我說的這一點(diǎn)。首先把 user_chatsession 中的sesssionid變成identity 字段,在插入一個(gè)session中的第一個(gè) user-session (for user a)記錄時(shí),讓系統(tǒng)產(chǎn)生sessionid, 然后記錄下這個(gè)sessionid, 在插入一個(gè)session中后續(xù)的 user-session (for user b, user c...), 執(zhí)行set identity_insert tablename on,就可以把先前記錄的sessionid值插入。

還有另外一個(gè)方法,比較笨一點(diǎn),就是用 select max(sessionid) + 1 from table where userid = @useridA,來獲得要新插入的sessionid, 這種方法性能上顯然差了許多。

相關(guān)文章

最新評論