改进使用日期查询表



我有一个包含大量数据的表,我想使用日期范围查询它。

这是查询

SELECT TOP (10000) 
    [PositionId] AS [PositionId], 
    [DeviceId] AS [DeviceId],     
    [Course] AS [Course], 
    [Latitude] AS [Latitude], 
    [Longitude] AS [Longitude], 
    [Speed] AS [Speed], 
    [MomentTiming] AS [MomentTiming],                             
    [Fuel] AS [Fuel], 
    [Ignition] AS [Ignition]        
 FROM
    [PositionInsights]
 WHERE
    deviceId = 352 
    AND [MomentTiming] >= '8/12/2015 7:38:00 AM' 
    AND [MomentTiming] <= '8/12/2015 3:38:00 PM'

问题是这个简单的查询花费了太多时间,大约35秒

作为一般规则,where子句中的任何字段都应该被索引。如果在表上执行大量CRUD,则应该确保索引不会随着时间的推移而碎片化。所以我会创建两个独立的索引,一个在deviceid字段上,另一个在MomentTiming字段上。如果您的表有数百万或数十亿行,您可能希望在其中一个字段上设置表分区。如果deviceid字段是一个自动编号字段,那么这可能是一个足够好的范围分区值,否则根据您的MomentTiming日期字段进行分区。如果您进行分区,请保持索引与我描述的相同。

UPDATE:因为你只有数百万行,而不是数十亿行,所以从索引开始,看看会发生什么。但是,如果您的数据增长很快,那么无论如何都可能需要考虑分区。此外,如果您选择分区路线,您应该尝试将不同的文件放在不同的挂载点上,以获得最佳性能。

HTH

最新更新