Sql-Server

分區表性能驗證

  • May 12, 2016

我們正在對包含日期時間列 (DateColumn) 的表進行分區測試。

我正在使用的分區功能是:

-- 138623  +  16774 records
CREATE PARTITION FUNCTION pf_TableName_DateColumn (datetime)
AS RANGE LEFT 
FOR VALUES ('20160101', '99991231');
  1. 如何驗證對錶進行分區是否可以提高查詢性能?
  2. 上有一個聚集索引PARTITION SCHEME,剩餘的非聚集索引是否獲得分區的統計資訊?

我通過在兩個數據庫(真實和副本)上執行具有日期參數的相同儲存過程來測試它。一個包含一個分區表(兩個分區),而另一個很簡單。Profiler 在 CPU、持續時間、行或讀取方面沒有顯示任何差異。

為什麼您希望分區的性能有所不同?分區提高了可管理性,但性能在很大程度上取決於工作負載和查詢。例如,如果您在 上具有有用的索引,則無論有DateColumn沒有分區,您都可能獲得相同的性能。在列上沒有索引的情況下,分區的性能可能會更好,只要由於消除而只掃描所需的分區。但是,如果索引可以防止掃描,那將提供最大的性能優勢。

因此,要測試 SELECT 語句的查詢性能,您需要利用統計資訊並查看查詢計劃。您的統計資訊(使用 SET STATISTICS IO ON 和 SET STATISTICS TIME ON)將顯示邏輯、物理、lob 讀取的數量以及查詢的 CPU 和執行時間。

當您比較分區和非分區結果時,請在統計資訊中查找更少的讀取,並在查詢計劃中查找分區消除。您可以通過查看(大概)您的聚集索引查找來驗證分區消除,並查看優化器已將分區搜尋範圍縮小到包含日期(或您的分區列)的分區。有關此資訊,請參閱“實際分區計數”和“訪問的實際分區”。

但是,當您比較 CPU 和執行時間時,請確保通過查看物理和邏輯讀取是否(因為目前沒有更好的詞)對稱來進行公平比較。消除對兩個查詢的物理讀取就是一個例子。

引用自:https://dba.stackexchange.com/questions/135633