前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试549】在Oracle中,单列索引和复合索引分别是什么?

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

作者头像
AiDBA宝典
发布2019-09-29 15:22:45
1.6K0
发布2019-09-29 15:22:45
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

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

答案部分

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

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

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

代码语言:javascript
复制
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程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档