加快昂贵的SQL查询

加快昂贵的SQL查询,sql,sql-server-2008,select,where,Sql,Sql Server 2008,Select,Where,我对SQL有些陌生,我(希望)有一个简单的问题 在我们的数据库上运行此查询大约需要7分钟,即10秒的数百万行 SELECT TOP 100 collectView.tagName, collectView.time, collectView.value FROM TIMELINE.dbo.collectView collectView` WHERE (collectView.tagName='currentGS.volume' and collectView.time>getdate()

我对SQL有些陌生,我(希望)有一个简单的问题

在我们的数据库上运行此查询大约需要7分钟,即10秒的数百万行

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
我希望select中的前100名能够加快速度,因为它只需要100行,但不需要


有人有什么建议吗?

当您通过
collectView执行
ORDER
时。在SQL完成排序之前,时间限制结果不会加快。尝试在该列上添加索引:

CREATE INDEX time_index ON collectView (time);
根据我的经验,我可以说,在大多数情况下,当您有一个大表并且需要对大多数记录进行操作时,添加索引会将代码从几分钟提升到几秒钟

让我知道这是否有帮助

这是您的查询:

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(标记名、时间、值)
。但是,这假设
collectView
实际上是一个表而不是一个视图


如果它是一个视图,一个选项是创建一个索引视图,如下所述(基于表名,我假设您使用的是SQL Server)。或者,您需要加快视图本身的速度。也许解决方案很简单,只需重新编译视图来修复一个损坏的执行计划。

如果不了解更多细节,我们真的无法提供帮助。它是一个视图还是一张桌子?(这个名字指向一个视图),在这种情况下,它可能是很多东西。如果它是一个表,它上面有索引吗?使用
TOP100
并不一定会减少时间。。在执行排序时,数据库仍必须访问所有行,但在查询完成后实际显示结果所需的时间将减少。如果删除前100个部分,您将返回多少条记录?是否可以删除“collectView.time>get date()-1”并告诉我们查询是否更快?由于WHERE中没有时间,它同时返回1045280行,很抱歉造成混淆。我假设它是表-您可以向我们显示此视图定义吗?@Orin-尝试在视图中使用的表上创建索引。请参阅我在SQL管理部门工作。Studio 2008和Excel如果这有助于共享视图定义,我如何发现表上似乎已经设置了一些索引,如果我添加了一个新的索引,会弄乱任何事情这是一个视图,我相信我没有权限添加索引-除非我只是尝试做错事