当ORDER BY子句被正确编入索引时,ASC和DESC之间是否存在任何性能差异?

时间:2016-07-24 14:45:49

标签: sql-server tsql

让我们说tableA在Column1上有一个聚簇索引

以下陈述之间是否存在性能影响差异:

SELECT TOP 5 Column1 FROM tableA  ORDER BY Column1 ASC

SELECT TOP 5 Column1 FROM tableA  ORDER BY Column1 DESC

更新,以及捕捉

@TheGameiswar的回答是正确的。但是,在order by子句中有多个列有一个很大的问题:

SELECT TOP 5 Column1 FROM tableA  ORDER BY Column1 , Column2 DESC

实际上意味着

SELECT TOP 5 Column1 FROM tableA  ORDER BY Column1 ASC, Column2 DESC

上述语句对计划强制执行排序查询处理器运算符,并使查询效率非常低。

因此,请确保降序排序顺序包括" DESC"两列

SELECT TOP 5 Column1 FROM tableA  ORDER BY Column1 DESC , Column2 DESC

1 个答案:

答案 0 :(得分:4)

没有差异或性能损失..

SQL服务器将使用索引(如果可用)(对于您使用的查询)根据排序进行向后或向前扫描..

我有一个数字表,其数字列的索引如下所示。下面是索引的定义..

CREATE UNIQUE CLUSTERED INDEX [n] ON [dbo].[Numbers]
(
    [Number] ASC
)

正如您所看到的,索引是使用ASC选项创建的(默认情况下)..现在让我们看看数据库引擎如何处理以下查询

select top 10* from numbers
order by number desc

enter image description here

你可以看到SQL决定向后扫描索引..