我对SQL有点新,我(希望)有一个简单的问题。
此查询需要 7分钟才能在我们的数据库上运行,数百万行。
SELECT TOP 100 collectView.tagName, collectView.time, collectView.value
FROM TIMELINE.dbo.collectView collectView`
WHERE
(collectView.tagName='currentGS.volume' and
collectView.time>getdate()-1)
ORDER BY collectView.time DESC
我希望选择中的TOP 100会加速它,因为它只需要100行但没有。
有人有任何建议吗?
答案 0 :(得分:1)
这是您的查询:
SELECT TOP 100 collectView.tagName, collectView.time, collectView.value
FROM TIMELINE.dbo.collectView collectView
WHERE collectView.tagName = 'currentGS.volume' and
collectView.time > getdate() - 1
ORDER BY collectView.time DESC;
此查询的最佳索引是覆盖索引collectView(tagName, time, value)
。但是,这假定collectView
实际上是表而不是视图。
如果是视图,一个选项是创建索引视图,描述为here(基于表名,我假设您使用的是SQL Server)。或者,您需要加快视图本身的速度。也许解决方案就像重新编译视图以修复损坏的执行计划一样简单。
答案 1 :(得分:0)
正如您ORDER
collectView.time
所做的那样,限制结果在SQL未完成排序之前不会加速。尝试在该列上添加索引:
CREATE INDEX time_index ON collectView (time);
根据我的经验,我可以说在大多数情况下你有大表并且你需要操作大多数记录,添加索引会将你的代码从几分钟增加到几秒。
如果有帮助,请告诉我