數(shù)據(jù)庫中identity字段不必是系統(tǒng)產(chǎn)生的唯一值 性能優(yōu)化方法(新招)
更新時間:2011年09月05日 20:14:21 作者:
具有identity特性的字段,其值是系統(tǒng)產(chǎn)生的,自動增加的,所以,一般把這個用在一個表的主鍵上。
但是,具有identity特性的字段,不需要具有唯一性,更不必須是主鍵。
可以通過,set identity_insert tablename (on|off),在運行時控制,是否可以在identity字段中指定值,而不是由系統(tǒng)自動的插入值。
那么,這有什么用處呢。舉個例子來說,兩個用戶之間的聊天,可以有多次,這個用一個chatsession來表示。在數(shù)據(jù)庫中,我們需要三個表: user, chatsession(sessionid identity,...), user_chatsession (userid, sessionid, ...), 來表示這個關(guān)系。這里面,多出了一個表chatsession, 其主鍵sessionid具有identity特性,并且在user_chatsession中被引用。
但是,我們知道,數(shù)據(jù)庫寫操作比讀操作的開銷要大很多,如果我想做優(yōu)化,把chatsession整個的去掉,那應該怎么做呢.
這時,就會用到我說的這一點。首先把 user_chatsession 中的sesssionid變成identity 字段,在插入一個session中的第一個 user-session (for user a)記錄時,讓系統(tǒng)產(chǎn)生sessionid, 然后記錄下這個sessionid, 在插入一個session中后續(xù)的 user-session (for user b, user c...), 執(zhí)行set identity_insert tablename on,就可以把先前記錄的sessionid值插入。
還有另外一個方法,比較笨一點,就是用 select max(sessionid) + 1 from table where userid = @useridA,來獲得要新插入的sessionid, 這種方法性能上顯然差了許多。
可以通過,set identity_insert tablename (on|off),在運行時控制,是否可以在identity字段中指定值,而不是由系統(tǒng)自動的插入值。
那么,這有什么用處呢。舉個例子來說,兩個用戶之間的聊天,可以有多次,這個用一個chatsession來表示。在數(shù)據(jù)庫中,我們需要三個表: user, chatsession(sessionid identity,...), user_chatsession (userid, sessionid, ...), 來表示這個關(guān)系。這里面,多出了一個表chatsession, 其主鍵sessionid具有identity特性,并且在user_chatsession中被引用。
但是,我們知道,數(shù)據(jù)庫寫操作比讀操作的開銷要大很多,如果我想做優(yōu)化,把chatsession整個的去掉,那應該怎么做呢.
這時,就會用到我說的這一點。首先把 user_chatsession 中的sesssionid變成identity 字段,在插入一個session中的第一個 user-session (for user a)記錄時,讓系統(tǒng)產(chǎn)生sessionid, 然后記錄下這個sessionid, 在插入一個session中后續(xù)的 user-session (for user b, user c...), 執(zhí)行set identity_insert tablename on,就可以把先前記錄的sessionid值插入。
還有另外一個方法,比較笨一點,就是用 select max(sessionid) + 1 from table where userid = @useridA,來獲得要新插入的sessionid, 這種方法性能上顯然差了許多。
您可能感興趣的文章:
- Oracle數(shù)據(jù)庫性能優(yōu)化技術(shù)開發(fā)者網(wǎng)絡(luò)Oracle
- SQL Server數(shù)據(jù)庫性能優(yōu)化技術(shù)
- SQL Server數(shù)據(jù)庫的高性能優(yōu)化經(jīng)驗總結(jié)
- 數(shù)據(jù)庫性能優(yōu)化三:程序操作優(yōu)化提升性能
- 數(shù)據(jù)庫性能優(yōu)化二:數(shù)據(jù)庫表優(yōu)化提升性能
- 數(shù)據(jù)庫性能優(yōu)化一:數(shù)據(jù)庫自身優(yōu)化提升性能
- MySQL性能優(yōu)化的一些技巧幫助你的數(shù)據(jù)庫
- 解析MySQL數(shù)據(jù)庫性能優(yōu)化的六大技巧
- 數(shù)據(jù)庫訪問性能優(yōu)化
相關(guān)文章
sqlserver 多表關(guān)聯(lián)時在where語句中慎用trim()方法
最近做的一個項目由于前期數(shù)據(jù)庫設(shè)計不合理,導致多表關(guān)聯(lián)的主外鍵長度設(shè)計不一致,以致過長主外鍵中過長的字段在填入相同字段時,多余部分被填入空字符。迫于無奈,就在多表關(guān)聯(lián)的where語句中使用了trim()方法。2009-09-09
如何強制刪除或恢復SQLServer正在使用的數(shù)據(jù)庫
如何強制刪除或恢復SQLServer正在使用的數(shù)據(jù)庫...2007-01-01
將Excel數(shù)據(jù)導入到SQL?Server數(shù)據(jù)庫的操作指南
這篇文章主要介紹了將Excel數(shù)據(jù)導入到SQL?Server數(shù)據(jù)庫的操作指南,文中通過圖文結(jié)合的方式給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-08-08
SQL Server兩表數(shù)據(jù)同步的多種方法詳解
這篇文章主要介紹了SQL Server兩表數(shù)據(jù)同步的多種方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06

