數(shù)據(jù)庫調(diào)優(yōu)積累系列(2):查詢
導(dǎo)讀:數(shù)據(jù)庫查詢是數(shù)據(jù)庫操作的重要應(yīng)用之一,下文中將給大家?guī)碓敿毜闹v解,希望大家能夠從中有所收獲。
SQL Server 查詢
1、查詢的時候應(yīng)該盡量按照復(fù)合索引中的順序來做條件查詢;(比如IXC中spInterActiveInstance_GetByIDToStat條件and ProcessState<>99的位置);
2、如果在程序中有For或者是Foreach,在存儲過程中又有IF Exists,那就要看是否可以在表中加入復(fù)合索引了,IF Not Exists可以轉(zhuǎn)換為IF Exists來使用索引;
3、在查詢中盡量少使用*或者全表字段來查詢數(shù)據(jù)。第一,返回的數(shù)據(jù)集比較大;第二,產(chǎn)生更多的IO操作;第三,會使用到Bookmark lookup的查詢計劃,性能有所下降;如果能使用到覆蓋索引來查詢是最理想的;
4、下面關(guān)于查詢的性能比較
a、返回行數(shù)較多:索引覆蓋>聚集索引>表掃描>堆集的非聚集索引>聚集的非聚集索引
b、返回行數(shù)較少:索引覆蓋=聚集索引>堆集的非聚集索引>聚集的非聚集索引>表掃描
c、比較難理解的可能是:堆集的非聚集索引>聚集的非聚集索引。下面是個人見解,堆表就是沒有聚集索引的表,實質(zhì)上就是在一個沒有聚集索引的表中加入非聚集索引和一個在聚集表中加入同一字段的非聚集索引;(聚集)非聚集索引-定位器-聚集索引-Bookmark lookup-返回指定字段值;(堆集)非聚集索引-定位器-對應(yīng)的數(shù)據(jù)行的指針-返回指定字段值;
5、不要在Where字句中的列名加函數(shù);如果有對列值進行判斷的,盡量把操作符(比如+、-、*等)放到=號的右邊;
【編輯推薦】