浏览了几个SQL实现,我注意到大多数DBMS都支持在列上定义一个降序索引,例如:
CREATE INDEX anIndex ON aTable (aColumn DESC);
相对于ASC索引,何时使用该索引会更有优势?为什么ASC或DESC是索引定义的一部分?
如果索引的实现方式高效(B树甚至是在排序列表中进行二进制搜索),我无法看出ASC或DESC索引之间存在任何实质性的差异。
我错过了什么吗?
浏览了几个SQL实现,我注意到大多数DBMS都支持在列上定义一个降序索引,例如:
CREATE INDEX anIndex ON aTable (aColumn DESC);
相对于ASC索引,何时使用该索引会更有优势?为什么ASC或DESC是索引定义的一部分?
如果索引的实现方式高效(B树甚至是在排序列表中进行二进制搜索),我无法看出ASC或DESC索引之间存在任何实质性的差异。
我错过了什么吗?
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);
当你认为用户需要按相反顺序查看数据时。有时可以使用索引来优化ORDER BY。
当您尝试玩弄物理存储以使具有特定属性的行成团在一起时。
B-Tree
可以在比较函数的情况下双向遍历。 - QuassnoiDESC
排序的查询可以使用ASC
排序的索引来提供服务,就像使用DESC
排序的索引一样好。字段排序只对复合索引有意义。 - Quassnoi(col1 ASC, col2 DESC)
上创建索引,如果这个索引旨在支持一个关键业务查询,并希望按col1 ASC col2 DESC
对数据进行排序。 - Adam Musch