何时应该使用降序索引?

3

浏览了几个SQL实现,我注意到大多数DBMS都支持在列上定义一个降序索引,例如:

CREATE INDEX anIndex ON aTable (aColumn DESC);

相对于ASC索引,何时使用该索引会更有优势?为什么ASC或DESC是索引定义的一部分?

如果索引的实现方式高效(B树甚至是在排序列表中进行二进制搜索),我无法看出ASC或DESC索引之间存在任何实质性的差异。

我错过了什么吗?

2个回答

3
如果表被聚集,则索引实际上变成了这样:
acolumn DESC, id ASC

并且可以用于查询,例如:

SELECT  TOP 1 *
FROM    mytable
ORDER BY
        acolumn DESC, id ASC

或者
SELECT  TOP 1 *
FROM    mytable
ORDER BY
        acolumn ASC, id DESC

,但不包括

SELECT  TOP 1 *
FROM    mytable
ORDER BY
        acolumn DESC, id DESC

对于复合索引,列也可以按相反的顺序排序:

CREATE INDEX anIndex ON aTable (aColumn DESC, bColumn ASC);

1
  1. 当你认为用户需要按相反顺序查看数据时。有时可以使用索引来优化ORDER BY。

  2. 当您尝试玩弄物理存储以使具有特定属性的行成团在一起时。


B-Tree可以在比较函数的情况下双向遍历。 - Quassnoi
@Quassnoi:有趣的观点。这与回答为什么需要反向排序索引有什么关系? - S.Lott
我的观点是,DESC排序的查询可以使用ASC排序的索引来提供服务,就像使用DESC排序的索引一样好。字段排序只对复合索引有意义。 - Quassnoi
真的。我只会考虑在(col1 ASC, col2 DESC)上创建索引,如果这个索引旨在支持一个关键业务查询,并希望按col1 ASC col2 DESC对数据进行排序。 - Adam Musch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接