在上一篇內(nèi)容中,北大青鳥北京學(xué)校老師介紹了索引的兩種類型:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。這篇文章,我們將介紹一下在使用中需要注意的問題。
我們在選擇創(chuàng)建聚集索引的時候要注意以下幾個方面:
1) 對表建立主鍵時,就會為主鍵自動添加了聚集索引,如自動編號字段,而我們沒有必要把聚集索引浪費(fèi)在主鍵上,除非你只按主鍵查詢,所以會把聚集索引設(shè)置在按條件查詢頻率最高的那個字段或者組合的字段。
2) 索引的建立要根據(jù)實(shí)際應(yīng)用的需求來進(jìn)行,并非是在任何字段上建立索引就能提高查詢速度。聚集索引建立遵循下面幾個原則:
包含大量非重復(fù)值的列。
使用下列運(yùn)算符返回一個范圍值的查詢:BETWEEN、>、>=、< 和 <=。
被連續(xù)訪問的列。
返回大型結(jié)果集的查詢。 (北大青鳥北京學(xué)校)
經(jīng)常被使用聯(lián)接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外鍵列。對ORDER BY 或 GROUP BY 子句中指定的列進(jìn)行索引,可以使 SQL Server 不必對數(shù)據(jù)進(jìn)行排序,因?yàn)檫@些行已經(jīng)排序。這樣可以提高查詢性能。
OLTP 類型的應(yīng)用程序,這些程序要求進(jìn)行非常快速的單行查找(一般通過主鍵)。應(yīng)在主鍵上創(chuàng)建聚集索引。
3) 在聚集索引中按常用的組合字段建立索引,形成復(fù)合索引,一般在為表建立多個主鍵的時候就會產(chǎn)生,如果一個表中的數(shù)據(jù)在查詢時有多個字段總是同時出現(xiàn)則這些字段就可以作為復(fù)合索引,這樣能形成索引覆蓋,提高where語句的查詢效率。 (北大青鳥北京學(xué)校)