【DB笔试面试549】在Oracle中,单列索引和复合索引分别是什么?

  • 2019 年 10 月 10 日
  • 笔记

题目部分

在Oracle中,单列索引和复合索引分别是什么?

答案部分

按照索引列的个数,索引可以分为单列索引和复合索引。单列索引是基于单个列所建立的索引。复合索引(Composite Indexes),也称为连接索引、组合索引或多列索引,是在某个表中的多个列上建立的索引。复合索引中的列应该以在检索数据的查询中最有意义的顺序出现,但在表中不必是相邻的。若WHERE子句引用了复合索引中的所有列或前导列,则复合索引可以加快SELECT语句的数据检索速度。所以,在复合索引的定义中所使用的列顺序很重要。一般情况下,把最常被访问和选择性较高的列放在前面。复合索引适合于单列条件查询返回多、组合条件查询返回少的场景。需要注意的是,创建复合索引可以消除索引回表读的操作,所以,在很多情况下,DBA通过创建复合索引来提高查询SQL的性能。

在同一个表的相同列上可以创建多个复合索引,只要其索引列具有不同的排列顺序即可。在某些情况下,例如,若前导列的基数很低,则数据库可能使用索引跳跃扫描。

在Oracle中,可以使用视图DBA_IND_COLUMNS来查询复合索引的索引列。下面给出复合索引的一个示例:

CREATE TABLE T_CI_20170628_LHR AS SELECT * FROM DBA_OBJECTS D;  CREATE INDEX IDX_CI_20170628_LHR ON T_CI_20170628_LHR(OBJECT_ID,OBJECT_TYPE);  SELECT * FROM DBA_INDEXES D WHERE D.INDEX_NAME='IDX_CI_20170628_LHR';  SYS@orclasm > col COLUMN_NAME format a15  SYS@orclasm > SELECT D.INDEX_NAME,D.TABLE_NAME,D.COLUMN_NAME FROM DBA_IND_COLUMNS D WHERE D.INDEX_NAME='IDX_CI_20170628_LHR';  INDEX_NAME                     TABLE_NAME                     COLUMN_NAME  ------------------------------ ------------------------------ ---------------  IDX_CI_20170628_LHR            T_CI_20170628_LHR              OBJECT_ID  IDX_CI_20170628_LHR            T_CI_20170628_LHR              OBJECT_TYPE  

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。