背景:

按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。




升序和降序索引

在升序索引中,Oracle会按照升序对数据进行存储。默认情况下,字符类型会按照值中每个字节的二进制进行排序,数值类型会按照从小到大的顺序进行排序,日期会按照从远到进的顺序进行排列。


升序索引的示例,如下所示,

《Oracle Concept》第三章 - 9_升序


Oracle按照department_id列的顺序存储hr.employees表的数据。他会读取department_id这个升序索引,相应的rowid值会从0开始递增。当使用索引的时候,Oracle会检索department_id的索引值,使用相应的rowid定位department_id的值。


通过在CREATE INDEX中指定DESC关键字,就可以创建一个降序索引。可以针对索引中的一个或多个列指定降序。如果下图示例中employees.department_id列是降序的,那么包含250值的叶子块就会在索引树的左侧,0值的叶子块会在右侧,和这张图相反,

《Oracle Concept》第三章 - 9_数据库_02


降序索引的默认扫描是从最大值到最小值。当检索条件中一些列按照升序,另一些列按照降序的时候,降序索引是很有用的。例如,假设要创建一个last_name和department_id的复合索引,

《Oracle Concept》第三章 - 9_Database_03


如果用户按照升序检索hr.employees的last_name(A到Z),并按降序检索department IDs(高到低),数据库就能用这个索引来检索数据,避免排序带来的额外消耗。


可以参考:

《Oracle Database Performance Tuning Guide》了解更多关于升序和降序索引的检索。

《Oracle Database SQL Language Reference》描述了CREATE INDEX的ASC和DESC选项。