性能低下:索引为ASC时选择顺序DESC

时间:2015-12-08 18:02:18

标签: sql sql-server indexing database-performance

当ORDER BY是ASC而不是DESC时,我正在努力解决一个快速运行的查询。

伪代码:

TABLE Logs (
   Id UNIQUEIDENTIFIER,
   Time DateTime,
   AccountId UNIQUEIDENTIFIER,
   Deleted BIT,
   /* Other columns */
)

因为这是一个多租户系统,所以插入的日志大部分时间都是时间上升,而大多数时候查询时间都在下降,我也有:

CLUSTER INDEX 
FOR TABLE Logs
(Deleted ASC, AccountId ASC, Time ASC)

问题现在出现以下问题:

SELECT TOP 100 *
FROM Logs
WHERE Deleted = 0
AND   AccountId = 'id-of-an-account'
ORDER BY Time DESC

该查询很慢(17秒),但如果我更改为ORDER BY Time ASC,则会以< 1seg运行。

我一直在阅读我想我可以在CLUSTER INDEX上将DESC更改为Time。但是,based on this answer,可能会造成很多碎片。我还可以创建另一个非聚集索引,但这会影响插入性能。

运行SQL Server 2008 R2。任何的想法?感谢。

更新

由于我提到的内容与INNER JOIN的组合,查询实际上很慢,实际查询是这样的:

SELECT TOP 100 *
FROM Logs l
INNER JOIN Other o
    ON o.Id = l.Id
WHERE Deleted = 0
AND   AccountId = 'id-of-an-account'
ORDER BY Time DESC

我认为INNER JOIN不允许查询使用索引。

0 个答案:

没有答案