Sql-Server

在 SQL Server Azure 中優化 BETWEEN 查詢

  • April 12, 2021

我有一個儲存時間序列(5 分鐘)數據的表,並且正在嘗試執行一個包含 BETWEEN 子句的查詢。下面是表結構:-

時間戳 | 組件ID | 參數1 | 參數2 | 參數3

該表在 ComponentId 上有一個索引,還有一個聚集列儲存索引(Azure S3 及更高版本獲得此功能)。

我正在嘗試執行的查詢:-

SELECT * FROM table 
WHERE Timestamp BETWEEN '2020-01-01' 
AND '2020-01-02' 

我正在遍歷多個類似的表來獲取數據,有時需要大約 30 秒才能獲得一天的數據。我能做些什麼來減少這個時間嗎?

要使此查詢快速執行,您將需要按時間戳排序的數據。

你有幾個選擇

如果使用聚集列儲存索引,則需要首先通過在 Timestamp 上添加聚集索引來對錶中的數據進行排序,然後使用 maxdop = 1 和 drop_existing 創建列儲存索引。

完整語法https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/performance-tuning-ordered-cci

您可以擺脫列儲存索引,只在時間戳上使用聚集索引。

您可以在 Timestamp 上使用非聚集索引,並在表中包含所有其他索引(如果根據數據類型只有 5 列,則可能沒問題)。

您可以按時間戳對錶進行分區 - 這是另一個更長的對話

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