CREATE STATISTICS (Transact-SQL)

透過提供的資料表之資料行或一組資料表資料行或索引檢視來建立一份長條圖和相關聯的密度群組 (集合)。字串摘要統計資料也是以 charvarcharvarchar(max)ncharnvarcharnvarchar(max)textntext 等資料行所建立之統計資料為基礎而建立的。查詢最佳化工具會使用這些統計資訊來選擇最有效的資料擷取或更新計劃。藉由最新的統計資料,最佳化工具將可正確評估不同查詢計劃的成本並選擇高品質的計劃。如需有關 SQL Server 2005 統計資料的詳細資訊,請參閱 Microsoft TechNet 上的<Microsoft SQL Server 2005 查詢最佳化工具使用的統計資料>(英文)。

主題連結圖示Transact-SQL 語法慣例

語法

CREATE STATISTICS statistics_name 
ON { table | view } ( column [ ,...n ] ) 
    [ WITH 
        [ [ FULLSCAN 
          | SAMPLE number { PERCENT | ROWS } 
          | STATS_STREAM = stats_stream ] [ , ] ] 
        [ NORECOMPUTE ] 
    ] ;

引數

  • statistics_name
    這是要建立之統計資料群組的名稱。統計資料名稱必須符合識別碼的規則,且在建立它們的資料表或檢視內必須是唯一的。
  • table
    這是要建立具名統計資料的資料表名稱。資料表名稱必須符合識別碼的規則。tablecolumn 的相關聯資料表。資料表擁有者名稱的指定是選擇性的。指定限定的資料表名稱,就可以建立另一個資料庫的資料表統計資料。
  • view
    這是要建立具名統計資料的檢視名稱。檢視必須有叢集索引,才能建立統計資料。檢視名稱必須符合識別碼的規則。viewcolumn 的相關聯檢視。檢視擁有者名稱的指定是選擇性的。指定限定的檢視名稱,就可以建立另一個資料庫的檢視統計資料。
  • column
    這是要建立統計資料的資料行或一組資料行。除了下列例外狀況,任何可以指定為索引鍵的資料行,也都可以指定給統計資料:

    • 無法指定 xml 資料行。
    • 結合資料行值的允許大小上限,可以超出索引鍵值 900 位元組的限制。

    只有在 ARITHABORT 和 QUOTED_IDENTIFIER 資料庫選項設為 ON 時,才能指定計算資料行。如果 CLR 使用者自訂類型支援二進位排序,您可以指定這個類型的資料行。如果方法標示為具決定性,就能指定從使用者自訂類型資料行中定義為方法引動過程的計算資料行。如需有關建立 CLR 使用者自訂類型資料行的詳細資訊,請參閱<使用 CLR 使用者自訂類型>。

  • FULLSCAN
    指定應該讀取 tableview 中的所有資料列來收集統計資料。指定 FULLSCAN 會提供 SAMPLE 100 PERCENT 的相同行為。這個選項不能和 SAMPLE 選項一起使用。
  • SAMPLE number { PERCENT | ROWS }
    指定利用隨機取樣來收集統計資料時,應該讀取的資料百分比或指定資料列數。number 必須是一個整數。如果指定 PERCENT,number 應該是從 0 到 100;如果指定 ROWS,number 可以是從 0 到 n 列的總資料列數。

    SQL Server 2005 Database Engine 確定所取樣之值的數量會達到下限,以確保統計資料有效。如果使用 PERCENT、ROWS 或 number 選項造成取樣資料列數太少,Database Engine 會根據資料表或檢視中現有的資料列數來自動更正取樣。取樣至少會有大約 1,000 個資料頁。如果使用 PERCENT、ROWS 或 number 選項所建立的值,數量超出有用取樣所需要的數目,Database Engine 會試圖符合所要求的取樣數量。不過,由於取樣的方式是掃描完整的資料頁,因此,實際樣本大小可能不完全符合指定的數量。當指定 0 PERCENT 或 ROWS 時,結果是空的統計資料集合。

    SAMPLE 不能和 FULLSCAN 選項一起使用。如果未指定 SAMPLE 或 FULLSCAN,Database Engine 會計算一個自動範例。

  • NORECOMPUTE
    指定 Database Engine 不應自動重新計算統計資料。如果指定這個選項,Database Engine 會繼續使用先前所建立的 (舊) 統計資料,即使資料有了改變,也是如此。Database Engine 不會自動更新和維護統計資料。這可能會產生並非最理想的計劃。

    ms188038.Caution(zh-tw,SQL.90).gif注意:
    我們建議只有合格的系統管理員,才能有限地使用這個選項。
  • STATS_STREAM **=**stats_stream
    這個語法僅供內部使用,且不受支援。Microsoft 保留隨時變更這個語法的權利。

備註

只有資料表擁有者可以建立這份資料表的統計資料。資料表的擁有者隨時可以建立統計資料群組 (集合),不論資料表中是否有資料,都是如此。

如果 AUTO_UPDATE_STATISTICS 資料庫選項設為 ON (這是預設值),且未指定 NORECOMPUTE 子句,Database Engine 會自動更新任何手動建立的統計資料。

您可以在索引檢視上執行 CREATE STATISTICS。只有在查詢直接參考檢視,且檢視指定了的 NOEXPAND 提示時,最佳化工具才會使用索引檢視的統計資料。否則,在索引檢視之前,從基礎資料表衍生的統計資料會替換到查詢計劃中。只有 Microsoft SQL Server 2005 Enterprise 和 Developer 版本支援這項替換。

權限

需要資料表或檢視的 ALTER 權限。

範例

A. 搭配 SAMPLE 數目 PERCENT 使用 CREATE STATISTICS

下列範例會建立 ContactMail1 統計資料群組 (集合)。這會以 AdventureWorks 資料庫中 Contact 資料表之 ContactIDEmailAddress 資料行的 5% 為基礎,來計算隨機取樣統計資料。

USE AdventureWorks;
GO
CREATE STATISTICS ContactMail1
    ON Person.Contact (ContactID, EmailAddress)
    WITH SAMPLE 5 PERCENT;

B. 搭配 FULLSCAN 和 NORECOMPUTE 使用 CREATE STATISTICS

下列範例會建立 ContactMail2 統計資料群組 (集合)。這會計算 Contact 資料表 ContactIDEmailAddress 資料行之所有資料列的統計資料,且會停用統計資料的自動重新計算。

CREATE STATISTICS NamePurchase
    ON AdventureWorks.Person.Contact (ContactID, EmailAddress)
    WITH FULLSCAN, NORECOMPUTE;

請參閱

參考

ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
EVENTDATA (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助