收藏
索引分為兩大類:聚集索引和非聚集索引
一、聚集索引
當數據表中的一列被確定為主鍵後,SQLServer會自動為它建立聚集索引,因為聚集索引是標識每個記錄行的鍵,所以它將被應用到每個查詢中.
二、非聚集索引
非聚集索引的情況就比較復雜了,因為它是相對於表獨立組織的,在SQLServer中有單獨的結構來存儲非聚集索引.
有一點是要注意的,不要代替查詢優化器去指定某個索引,DBA應該想辦法避免優化器不使用索引進行查詢:
1、高碎片率
當索引碎片率超過40%的時候,優化器會放棄使用索引,因為在碎片率如此高的索引中掃描數據還不如直接到表中去掃描.
DBA應該常常監視索引碎片率,當達到30%的時候就要考慮重新組織索引
2、唯一性
如果一個索引不是唯一索引,那麼優化器會認為直接到數據表中掃描比使用這個索引的效率要高
3、查詢中使用了函數
當查詢中使用了函數時,在該列上建立的索引是不會被使用的.
例如:col建立了索引,但是在查詢中使用了 convert(nvarchar,col)=’test’,這時查詢優化器不會使用該索引
4、查詢錯誤的字段
如果建立組合字段的索引,那麼只有當第一個列被查詢使用時,該索引才會被使用
例如:建立一個索引(col1,col2,col3),當查詢中使用col2=’test’時索引不會被使用.只有col1=’test’這樣的查詢,這個索引才會被使用
如果你想對col3查詢時使用索引,那麼只能建立兩個索引,一個建立在col1上,另一個建立在col3上
另外一個要注意的是,非聚集索引與聚集索引不同,聚集索引填充因子為100%並且沒有碎片,因為數據時順序追加的.非聚集索引要考慮到數據填充時,索引頁填充因子.
在重建索引時還要根據前一階段的監視重新設定填充因子.一般的情況是70%-80%,我最低使用過65%的填充因子.