繁体   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