首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 查詢優化器統計資訊管理(二):建立、自動更新、抽樣與索引檢視統計

     編輯:關於SqlServer

統計資訊結構觀察

DBCC SHOW_STATISTICS 輸出包含:欄位密度、直方圖步驟、抽樣列數。叢集索引鍵會自動包含在非叢集索引統計中,優化器可利用此特性避免書簽查找。

建立統計的兩大核心指令

  • CREATE INDEX:建立索引同時產生統計(完整掃描)。
  • CREATE STATISTICS:僅建立統計,不建索引。支援 WITH SAMPLE n PERCENT 或 FULLSCAN。

其他途徑(sp_createstats、DBCC DBREINDEX、查詢分析器「管理索引/建立統計」、建立索引精靈)最終皆呼叫上述兩指令。

自動建立統計

  • 查詢編譯時,優化器需估算密度/分布,自動建立單欄統計。
  • 例外:表太小(成本低於建立統計成本)、伺服器極度忙碌時不建立。
  • 未使用的自動統計經過幾次自動更新後會被捨棄,未來需要時重建。
  • 資料庫級關閉:SP_DBOPTION dbname, 'AUTO CREATE STATISTICS', 'OFF'。

抽樣機制

  • 預設抽樣:對數函數增長,大表抽樣比例極低。
  • CREATE/UPDATE STATISTICS ... WITH SAMPLE n PERCENT 指定比例;FULLSCAN 全掃描。
  • UPDATE STATISTICS ... WITH RESAMPLE 繼承上次抽樣比例,適用混合索引(全掃描)與欄位統計(抽樣)共存場景。

自動更新統計與 rowmodctr 追蹤

  • SYSINDEXES.rowmodctr 記錄自上次統計更新以來的資料變更列數。
  • 僅為 IndID 0 或 1(堆或叢集索引)遞增 rowmodctr;其他索引/統計存相對值,實際變更量 = 自身值 + IndID 0/1 值。
  • 查詢優化觸發自動更新,僅更新該查詢引用的欄位/索引統計。

三層級控制自動更新

資料庫資料表/索引結果
ONON啟用
ONOFF停用
OFFON停用
OFFOFF停用
  • 資料庫級:SP_DBOPTION 'AUTO UPDATE STATISTICS', 'OFF'
  • 資料表/索引級:UPDATE STATISTICS ... WITH NORECOMPUTE、CREATE STATISTICS ... WITH NORECOMPUTE、SP_AUTOSTATS。

索引檢視統計特殊規則

  • 一般查詢優化先考慮基表統計,符合條件才考慮索引檢視替換,故索引檢視統計較少被用到。
  • 例外:FROM ViewName WITH (NOEXPAND) 直接引用時會使用統計。
  • SP_CREATESTATS/SP_UPDATESTATS 不處理索引檢視;自動建立/更新可作用於索引檢視(需 NOEXPAND 觸發)。
  • 可手動對索引檢視欄位執行 CREATE STATISTICS 或 UPDATE STATISTICS。

總結

預設自動建立/更新統計已滿足多數場景。特殊環境(資料分布極度不均、超大表、索引檢視直查)才需手動干預抽樣比例或更新頻率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved