程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLServer 維護索引實現查詢優化

SQLServer 維護索引實現查詢優化

編輯:關於SqlServer

收藏
索引分為兩大類:聚集索引和非聚集索引

一、聚集索引

當數據表中的一列被確定為主鍵後,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%的填充因子.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved