2010-03-03 68 views
3

查看幾個SQL實現,我注意到大多數DBMS支持在一列上以desciding順序定義一個索引,例如,你什麼時候可以用降序定義一個索引?

CREATE INDEX anIndex ON aTable (aColumn DESC); 

什麼時候這比ASC指數更有優勢?爲什麼ASC或DESC是索引定義的一部分?

如果索引的實現是有效的(B樹或者排序列表中的二進制搜索),我看不到ASC或DESC索引之間的任何實質性區別。

我錯過了什麼?

回答

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. 當您嘗試玩具有物理存儲的棘手遊戲以獲得具有某些屬性的行時,它們會聚集在一起。

+0

無論比較函數如何,都可以在兩個方向上遍歷一個「B-Tree」。 – Quassnoi 2010-03-03 11:57:03

+0

@Quassnoi:有趣的一點。這與回答*爲什麼有人需要逆序索引有關? – 2010-03-03 13:41:26

+0

我的觀點是,'DESC'排序的查詢可以和'DESC'排序的索引一樣使用'ASC'排序索引。字段排序只對組合索引有意義。 – Quassnoi 2010-03-03 14:25:57

相關問題