11.10.03 学习笔记:索引的基本概念



索引的基本概念

※索引的分类:
  1.   非唯一索引(最常用)
  2.   唯一索引
  3.   位图索引(取值范围小时使用)
  4.   局部有前缀分区索引
  5.   局部无前缀分区索引
  6.   全局有前缀分区索引
  7.   散列分区索引
  8.   基于函数的索引(适用于date类型列)

※索引的作用:
  1.     加快查询速度
  2.   减少I/O操作
  3.   消除磁盘排序

※索引的缺点:
  1. 基础表维护时,系统要同时维护索引,不合理的索引将严重影响系统资源,主要表现在CPU和I/O上;
  2. 插入、更新、删除数据产生大量db file sequential read锁等待。

※索引的组成:索引包含 索引数据确定行实际位置的rowid。
△Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引。



ROWID

※rowid的概念:rowid作为标识了行记录在数据文件中的具体位置。
※伪列:rowid作为伪列,即可以在表中直接查询

※ROWID的格式:ROWID是64进制数组成的一串数字。

例如: OOOOOOFFFBBBBBBRRR

rowid被分别四段,分别对应:
  1. 数据对象编号,具体对应为dba_objects.data_object_id
  2. 文件号,对应v$datafile.file#
  3. 数据块号,对应v$datafile.block#
  4. 数据行号,对应v$datafile.row#


唯一索引
※当某列的任意两行值都不相同时使用唯一索引。
△当建立primary key与unique constraint时,自动建立唯一索引。

※语法:
CREATE UNIQUE INDEX index_name ON table_name(column_name1 [,column_name2...]);



组合索引

※当两个或多个列经常一起出现在where条件中时,则在这些列上同时创建组合索引。

※组合中的列顺序是任意的,但建议把最常用的列放在最前面。
△例如dx_groupid_serv_id(groupid,serv_id),在where条件中使用groupid或groupid,serv_id,查询将使用索引,若仅用到serv_id字段,则索引无效。



位图索引

※当列值重复度比较高且列取值范围较少时使用位图索引,例如“性别”信息。
※结构:位图索引使用位图作为键值,对表中的每一数据行位图包含了TRUE,FALSE或NULL值。

※语法
CREATE BITMAP INDEX index_name ON  table_name(column_name1 [,column_name2...]);

※优点:位图以一种压缩的格式存放,所以占用的磁盘空间比标准索引要小的多。
※缺点:不适用于更新比较频繁的表,因为要相应的更新所有的bitmap

基于函数的索引

※当where查询语句中包含函数或者表达式时,使用函数索引。
△函数包括:
  1. 算数表达式
  2. PL/SQL函数
  3. 程序包函数
  4. SQL函数
  5. 用户自定义函数

※语法:
CREATE INDEX index_name ON table_name (FUNCTION(column_name));


删除索引
※原因:
  1. 不再需要的索引
  2. 索引不能提供期望的性能改善
  3. 应用没有使用该索引来查询数据
  4. 索引无效,需要在重建前删除
  5. 索引碎片化,需要在重建前删除

※语法
DROP INDEX index_name;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26121819/viewspace-708600/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26121819/viewspace-708600/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值