2008-10-09 84 views
14

因此,對於這一項目,我們正在定期(每分鐘左右。我用了「在數據庫引擎分析查詢」,以檢查它們。SQL Server統計

執行一堆查詢他們是非常簡單的: SELECT * FROM TableX的地方加工=「0」

有一個指標上進行處理,並且每個查詢應該在表中返回< 1000行與1MM記錄

分析器建議在創建關於這個的一些統計...所以我的問題是:這些統計是什麼?他們真的有幫助嗎?性能?他們對於像上面這樣的桌子有多昂貴?

請記住,我絕不會稱自己是一名SQL Server有經驗的用戶......而且這是第一次使用此分析器。

回答

24

統計數據是SQL Server用來確定如何獲取數據的可行性。

比方說,你有一個只有主鍵上有聚集索引的表。當您執行SELECT * FROM tablename WHERE col1=value時,SQL Server只有一個選項,用於掃描表中的每一行以查找匹配的行。

現在我們在col1上添加一個索引,以便您假定SQL Server將使用索引來查找匹配的行,但事實並非如此。假設表格有200,000行,col1只有2個值:1和0.當SQL Server使用索引查找數據時,索引包含指向聚簇索引位置的指針。鑑於索引列中只有兩個值,SQL Server認爲只需掃描表是更合理的,因爲使用索引會更有效。

現在我們再向表中添加800,000行數據,但是這次col1中的值差別很大。現在這是一個有用的索引,因爲SQL Server可以可靠地使用索引來限制它需要從表中提取的內容。 SQL Server會使用索引嗎?

這取決於。統計數據依賴於什麼。在某個時間點,設置AUTO UPDATE STATISTICS,服務器將更新索引的統計信息,並知道這是一個非常好的有效索引。然而,在那之前,它會忽視索引作爲不相關的。

這是統計的一種用法。但還有另外一種用途,那與指數無關。 SQL Server保留有關表中所有列的基本統計信息。如果有足夠的不同數據使其值得,那麼SQL Server實際上會在列上創建一個臨時索引並用它來過濾。雖然這比使用現有索引需要更多的時間,但比全表掃描花費的時間更少。

有時,您會得到建議以創建對該列有用的列的特定統計信息。這些不是索引,但是會跟蹤列中數據的統計抽樣,因此SQL Server可以確定創建臨時索引以返回數據是否合理。

HTH

+0

「服務器將更新索引的統計信息,並知道這是用一個非常良好的,有效的指標」 - 依據是什麼?何時該索引被確定爲無效使用? – BornToCode 2016-06-19 10:09:18

0

在Sql Server 2005中,設置自動創建統計信息和自動更新統計信息。您不必擔心創建它們或自己維護它們,因爲數據庫本身處理得非常好。