Partitioning

對分區表的慢查詢

  • July 25, 2020

我有一個包含 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;

從這裡: https: //support.microsoft.com/en-in/help/2965553/decreased-performance-for-sql-server-when-you-run-a-top-max-or-min-agg

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