代码之家  ›  专栏  ›  技术社区  ›  Thorsten

什么时候用降序定义索引?

  •  3
  • Thorsten  · 技术社区  · 15 年前

    通过查看一些SQL实现,我注意到大多数DBMS都支持对具有描述顺序的列定义索引,例如。

    CREATE INDEX anIndex ON aTable (aColumn DESC);
    

    什么时候这会比ASC指数更有利?为什么asc或desc是索引定义的一部分?

    如果索引的实现是有效的(B树,甚至是排序列表中的二进制搜索),我看不到asc或desc索引之间的任何实质性差异。

    我错过了什么?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Quassnoi    15 年前

    如果表是聚集的,则索引实际上会变成:

    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);
    
        2
  •  1
  •   S.Lott    15 年前
    1. 当您认为用户需要以相反的顺序查看数据时。有时可以使用索引优化订单。

    2. 当你试图用物理存储来玩复杂的游戏时,你需要将具有特定属性的行聚集在一起。