[英]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.