使用DateTime上的聚合来加速SQL查询并分组依据

托马斯W.

我的MS SQL数据库中有一个很大的表(> 1亿行),其中包含以下各列:

Id int not null,
ObjectId int not null,
Timestamp datetime not null
State int not null

Id它是表的主键(并具有聚簇索引)。我在Timestamp和ObjectId上添加了非聚集索引(按此顺序)。中大约有2000个不同的值ObjectId我现在要执行以下查询:

SELECT ObjectId, MAX(Timestamp) FROM Table GROUP BY ObjectId

它大约需要四秒钟,这对于我的应用程序来说太慢了。执行计划表明,97%的运行时用于非聚集索引的索引扫描。

在表的副本上,我在ObjectId和Timestamp上创建了聚集索引。结果运行时是相同的,执行计划说它现在正在对聚集索引进行索引扫描。

在不将表的数据拆分成多个表的情况下,还有其他改进运行时间的可能性吗?

索林克先生

我可以为您提供另一个答案,添加一个布尔列LAST并将ObjectID的last true更新为false,然后为此对象ID的LAST now插入now行。在ObjectID和LAST上创建索引。查询非常简单:

SELECT ObjectId, Timestamp FROM Table where LAST = true

没有更多的分组依据和全扫描,但每个插入又更新了一个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章