Partitioning
對分區表的慢查詢
我有一個包含 3B 行的巨大表,其中包含在 Microsoft SQL Server 2017 (RTM) 上執行的大約 6 個月的數據,該表在日期列上逐日分區(每天在一個單獨的文件組中,每個文件組都有 1 個數據文件) .
該表有一個身份欄位,即 bigint。
我有兩個索引:日期的聚集索引和 id 日期的非聚集索引
我正在嘗試執行以下查詢:
select top 500000 * from table with(nolock) where id>@certain_id order by id
但查詢需要很多時間。我試圖在 id 欄位上創建一個非聚集索引,但沒有任何變化!
奇怪的是,我過去能夠毫無問題地執行相同的查詢並且響應速度很快。但是由於某些情況,我不得不格式化伺服器並重新附加包含分區表的數據庫,我現在遇到了這個問題。
任何提示都非常感謝。
讓我們試試這個查詢:
SELECT TOP 1000 A.id FROM sys.partitions AS P CROSS APPLY ( SELECT TOP 1000 T1.id FROM dbo.table AS T1 WHERE $PARTITION.PF1(T1.date) = P.partition_number AND T1.id > @certain_id ORDER BY T1.id ) AS A WHERE P.object_id = OBJECT_ID('dbo.table') AND P.index_id = INDEXPROPERTY( OBJECTID('dbo.table'), 'idx_c1', 'INDEXID') ORDER BY A.id;