簡體   English   中英

如何改善SQL時間戳范圍查詢?

[英]How to improve a SQL timestamp range query?

我有一個包含三個字段的表records

id - the row id
value - the row value
source - the source of the value
timestamp - the time when the row was inserted (should this be a unix timestamp or a datetime?)

我想執行這樣的查詢:

SELECT timestamp, value FROM records WHERE timestamp >= a AND timestamp <= b

但是,在具有數百萬條記錄的表中,此查詢效率極低!

我正在使用Azure SQL Server作為DBMS。 可以優化嗎?

如果可以,您是否可以提供逐步指南(請不要跳過“小”步驟)? 是創建索引,重新設計查詢語句,重新設計表(分區?)...

謝謝!

在要搜索的字段上創建索引后,可以使用between運算符,因此它是單個操作,對於sql最有效。

從'1/1/2015'和'12 / 31/2015'之間的ABC WHERE DateField中選擇XXX

此外,在SQL Server 2016中,您可以使用內存優化表創建范圍索引,以用於諸如時間戳記之類的事情。 確實是這樣做的方法。

我建議使用datetime或更好的datetime2數據類型來存儲日期數據(datetime2更好,因為它具有較高的精度級別,而精度較低的級別將使用較少的存儲空間)。

對於您的查詢,根據您發布的語句,您希望時間戳記為鍵列,然后包含該值。 這是因為您將時間戳記用作謂詞,並隨其返回值。

CREATE NONCLUSTERED INDEX IX_Records_Timestamp on Records (Timestamp) INCLUDE (Value)

話雖如此,請注意您的列名。 我極力建議您不要對列名使用保留關鍵字,因為使用它們可能會更加困難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM