查看幾個SQL實現,我注意到大多數DBMS支持在一列上以desciding順序定義一個索引,例如,你什麼時候可以用降序定義一個索引?
CREATE INDEX anIndex ON aTable (aColumn DESC);
什麼時候這比ASC指數更有優勢?爲什麼ASC或DESC是索引定義的一部分?
如果索引的實現是有效的(B樹或者排序列表中的二進制搜索),我看不到ASC或DESC索引之間的任何實質性區別。
我錯過了什麼?
查看幾個SQL實現,我注意到大多數DBMS支持在一列上以desciding順序定義一個索引,例如,你什麼時候可以用降序定義一個索引?
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」。 – Quassnoi 2010-03-03 11:57:03
@Quassnoi:有趣的一點。這與回答*爲什麼有人需要逆序索引有關? – 2010-03-03 13:41:26
我的觀點是,'DESC'排序的查詢可以和'DESC'排序的索引一樣使用'ASC'排序索引。字段排序只對組合索引有意義。 – Quassnoi 2010-03-03 14:25:57