SQL Server最后25条记录查询优化

时间:2012-01-27 12:56:54

标签: sql-server

我的一张桌子上有400万条记录。我需要获取过去1周内添加的最后25条记录。

这是我当前查询的外观

SELECT TOP(25) [t].[EId],
               [t].[DateCreated],
               [t].[Message]
FROM   [dbo].[tblEvent] AS [t]
WHERE  ( [t].[DateCreated] >= Dateadd(DAY, Datediff(DAY, 0, Getdate()) - 7, 0)
         AND [t].[EId] = 1 )
ORDER  BY [t].[DateCreated] DESC  

现在我没有为此表运行任何索引,也不打算有一个。这个查询运行大约需要10-15秒,我的应用程序超时,现在有办法更好吗?

4 个答案:

答案 0 :(得分:4)

您应该在EId, DateCreated或至少DateCreated

上创建索引

如果没有这种优化方法,我可以想到的是通过insert触发器(可能还有updatedelete触发器将最后25个保存在单独的表中孔)。

答案 1 :(得分:3)

如果您在表中有自动增量的ID(不是Eid而是单独的PK),您可以通过ID desc而不是DateCreated进行订购,这可能会使您的订单更快。

否则你确实需要一个索引(但你的问题是你不想要那个)。

答案 2 :(得分:2)

如果表没有支持查询的索引,那么您将被迫执行表扫描。

你将很难绕过表的扫描方面 - 随着表的增长,响应时间会变慢。

您将不得不努力教育您的客户他们面临的问题,并且他们应该考虑索引。他们可能会说不,你需要出示支持推理的证据,有/无时间显示它们,并确保对记录插入的影响也显示出来,这对于添加来说是一个相对简单的成本/收益/损害索引/不添加它。如果他们坚持没有索引,那么你别无选择,只能延长你的超时时间。

答案 3 :(得分:0)

您还应该尝试查询提示: http://msdn.microsoft.com/en-us/library/ms181714.aspx

使用选项FAST n - 行数。