SQL Server 數(shù)據(jù)庫(kù)作為目前在社會(huì)上受到廣泛應(yīng)用的一款數(shù)據(jù)庫(kù),其設(shè)計(jì)優(yōu)化是該領(lǐng)域的重大技術(shù)課題。中培偉業(yè)《SQL Server 2014數(shù)據(jù)庫(kù)管理與性能調(diào)優(yōu)》培訓(xùn)專家臧老師在這里就SQL Server 數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化應(yīng)注意的相關(guān)問題進(jìn)行了詳細(xì)介紹。
1、不要使用游標(biāo)。
使用游標(biāo)不僅占用內(nèi)存,而且還用不可思議的方式鎖定表,它們可以使DBA所能做的一切性能優(yōu)化等于沒做。游標(biāo)里每執(zhí)行一次fetch就等于執(zhí)行一次select。
2、創(chuàng)建適當(dāng)?shù)乃饕?/p>
每當(dāng)為一個(gè)表添加一個(gè)索引,select會(huì)更快,可insert和delete卻大大變慢,因?yàn)閯?chuàng)建了維護(hù)索引需要許多額外的工作。
1)采用函數(shù)處理的字段不能利用索引
2)條件內(nèi)包括了多個(gè)本表的字段運(yùn)算時(shí)不能進(jìn)行索引
3、使用事務(wù)
對(duì)于一些耗時(shí)的操作,使用事務(wù)可以達(dá)到很好的優(yōu)化效果。
4、小心死鎖
按照一定的次序來訪問你的表。如果你先鎖住表A,再鎖住表B,那么在所有的存儲(chǔ)過程中都要按照這個(gè)順序來鎖定它們。 如果某個(gè)存儲(chǔ)過程先鎖定表B,再鎖定表A,這可能會(huì)導(dǎo)致一個(gè)死鎖。
5、不要打開大的數(shù)據(jù)集
6、不要使用服務(wù)器端游標(biāo)
與服務(wù)器端游標(biāo)比起來,客戶端游標(biāo)可以減少服務(wù)器和網(wǎng)絡(luò)的系統(tǒng)開銷,并且還減少鎖定時(shí)間。
7、不要忽略同時(shí)修改同一記錄的問題
有時(shí)候,兩個(gè)用戶會(huì)同時(shí)修改同一記錄,這樣,后一個(gè)修改者修改了前一個(gè)修改者的操作,某些更新就會(huì)丟失。處理這種情況,創(chuàng)建一個(gè)timestamp字段,在寫入前檢查它,如果允許,就合并修改,如果存在沖突,提示用戶。
8、盡量不要使用text數(shù)據(jù)類型
除非使用text處理一個(gè)很大的數(shù)據(jù),否則不要使用它。因?yàn)樗灰子诓樵儯俣嚷玫牟缓眠€會(huì)浪費(fèi)大量的空間。一般varchar可以更好的處理數(shù)據(jù)。
9、避免在索引列上使用計(jì)算
where子句中,如果索引列是函數(shù)的一部分,優(yōu)化器將不使用索引而使用全表掃描。
10、不同類型的索引效能是不一樣的
應(yīng)盡可能先使用效能高的數(shù)字類型的索引查找效率高于字符串類型,定長(zhǎng)字符串char、nchar的索引效率高于變長(zhǎng)字符串varchar、nvarchar的索引。