如果对一列创建索引时不指定 ASC 或 DESC 关键字,则缺省情况下值以升序顺序存储;但是数据库服务器的双向遍历能力让您对一列仅创建一个索引并将该索引用于查询;这些查询指定结果以排序列的升序还是降序来排序。
由于此能力,是否将单列索引创建为升序或者降序索引无关紧要。不管您为索引选择哪种存储顺序,数据库服务器在处理查询时可按照升序或降序顺序来遍历该索引。
SELECT stock_num, manu_code, description, unit_price FROM stock ORDER BY manu_code ASC, unit_price DESC;
CREATE INDEX stock_idx1 ON stock (manu_code ASC, unit_price DESC); CREATE INDEX stock_idx2 ON stock (manu_code DESC, unit_price ASC);
SELECT stock_num, manu_code, description, unit_price FROM stock ORDER BY manu_code ASC, unit_price ASC; SELECT stock_num, manu_code, description, unit_price FROM stock ORDER BY manu_code DESC, unit_price DESC;
CREATE INDEX stock_idx3 ON stock (manu_code ASC, unit_price ASC); CREATE INDEX stock_idx4 ON stock (manu_code DESC, unit_price DESC);
可在一列上创建不超过一个的升序索引和不超过一个的降序索引。由于数据库服务器的双向遍历能力,您仅需创建这些索引之一。同时创建与在 stock_num 列上的升序或者降序排序完全达到相同的结果。
在索引的表上执行 INSERT 或 DELETE 操作之后,索引项的数量在页里变化,表需要的索引页的数量可以取决于该索引是否指定升序或降序顺序。对于一些加载和 DML 操作,按降序排序的单个列或多列索引可能导致数据库服务器分配的索引页多于按升序排序的索引。