數(shù)據(jù)庫中identity字段不必是系統(tǒng)產(chǎn)生的唯一值 性能優(yōu)化方法(新招)
可以通過,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, 這種方法性能上顯然差了許多。
- 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)驗(yàn)總結(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)文章
SQL Server 遠(yuǎn)程連接服務(wù)器詳細(xì)配置(sp_addlinkedserver)
這篇文章主要介紹了SQL Server 遠(yuǎn)程連接服務(wù)器詳細(xì)配置(sp_addlinkedserver),需要的朋友可以參考下2017-01-01MSSQL漢字轉(zhuǎn)拼音函數(shù)實(shí)現(xiàn)語句
漢字轉(zhuǎn)拼音(無數(shù)據(jù)表版) 從獲到拼音函數(shù)得到的一點(diǎn)心得體會(huì)2009-09-09REPLICATE 以指定的次數(shù)重復(fù)字符表達(dá)式
sql server以指定的次數(shù)重復(fù)字符表達(dá)式REPLICATE函數(shù):REPLICATE函數(shù)用于以指定的次數(shù)重復(fù)字符表達(dá)式。2010-06-06sql查詢一個(gè)數(shù)組中是否包含某個(gè)內(nèi)容find_in_set問題
這篇文章主要介紹了sql查詢一個(gè)數(shù)組中是否包含某個(gè)內(nèi)容find_in_set問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01SQL SERVER2012中新增函數(shù)之字符串函數(shù)CONCAT詳解
SQL Server 2012有一個(gè)新函數(shù),就是CONCAT函數(shù),連接字符串非它莫屬。比如在它出現(xiàn)之前,連接字符串是使用"+"來連接,如遇上NULL,還得設(shè)置參數(shù)與配置,不然連接出來的結(jié)果將會(huì)是一個(gè)NULL。本文就介紹了關(guān)于SQL SERVER 2012中CONCAT函數(shù)的相關(guān)資料,需要的朋友可以參考。2017-03-03DATASET 與 DATAREADER對象有什么區(qū)別
DataReader和DataSet最大的區(qū)別在于,DataReader使用時(shí)始終占用SqlConnection(俗稱:非斷開式連接),在線操作數(shù)據(jù)庫時(shí),任何對SqlConnection的操作都會(huì)引發(fā)DataReader的異常。下面同本文對dataset與datareader的區(qū)別詳細(xì)學(xué)習(xí)吧2016-11-11sql ntext數(shù)據(jù)類型字符替換實(shí)現(xiàn)代碼
sql ntext數(shù)據(jù)類型字符替換實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-09-09淺析SQL Server中的執(zhí)行計(jì)劃緩存(上)
這篇文章主要介紹了淺析SQL Server中的執(zhí)行計(jì)劃緩存(上)的相關(guān)資料,需要的朋友可以參考下2015-12-12