加速昂贵的SQL查询

时间:2015-04-06 17:57:09

标签: sql sql-server-2008 select where

我对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行但没有。

有人有任何建议吗?

2 个答案:

答案 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);

根据我的经验,我可以说在大多数情况下你有大表并且你需要操作大多数记录,添加索引会将你的代码从几分钟增加到几秒

如果有帮助,请告诉我