Oracle中的索引讲解


本文整理自网络,侵删。

一、B-树索引

索引一般是B-Tree索引,在索引结构中存储着键值和键值的RowID,并且是一一对应的。

create [unique] index studentin student(id [desc]);

选项择索引字段的原则:

(ORACLE在UNIQUE和主键字段上自动建立索引 。)

  • 在WHERE子句中最频繁使用的字段 。
  • 联接语句中的连接字段。
  • 选择高选择性的字段(即如果很少的字段拥有相同值,即有很多独特值,可以快速查找到所需数据的字段) .
  • 在联机事务处理(OLTP)环境下,所由并发性非常高,索引经常被修改,可以建B-TREE索引,不应该建位图索引 。
  • 不要在经常被修改的字段上建索引,可建函数索引。
  • 不要在有用到函数的字段上建索引。
  • B-Tree索引不包含null的数据。 
    可以建立一个“伪”复合索引解决。eg:
    create index my_ix on my_table(my_col,0);
    也可以用函数索引将不想索引,即使不是null也可以剔除。eg:
    create index a on table(decode(status,0,0))--只关心少数status为0的行。

二、复合索引

索引可以包含一个、两个或更多个列。两个或更多个列上的索引被称作复合索引。例如,以下语句创建一个具有两列的复合索引:(复合索引列数量不超过32个)

CREATE INDEX name  ON employee (emp_lname, emp_fname)

复合索引的第一列称为前导列(leading column)。

复合索引字段排序的原则:

  • WHERE子句中使用到的字段需要是复合索引的前导字段,若仅对后面的任意列执行搜索时,则应该创建另一个仅包含第二列的索引。
  • 如果某个字段在WHERE子句中最频繁使用,则在建立复合索引时,考虑把这个字段排在第一位(在CREATE INDEX语句中)
  • 如果所有的字段在WHERE子句中使用频率相同,则将低选择性列排在最前面,将选择性较强的列排在最后面
  • 如果所有的字段在WHERE子句中使用频率相同,如果数据在物理上是按某一个字段排序的,则考虑将这个字段放在复合索引的第一位 。
  • 在主键索引(复合主键)中列的顺序被强制为与列在表定义中出现的顺序相同,这与 PRIMARY KEY 约束中指定的列顺序无关.
  • 索引列的排序方式必须与 ORDER BY 子句完全相同或完全相反。否则不能得到性能优化。
CREATE INDEX idx_example ON table1 (col1 ASC, col2 DESC, col3 ASC)

在这种情况下,以下查询可以得到优化:

SELECT col1, col2, col3 from table1 ORDER BY col1 ASC, col2 DESC, col3 ASC

SELECT col1, col2, col3 from example ORDER BY col1 DESC, col2 ASC, col3 DESC
  • 复合索引的前导字段is (not) null 可以使用索引。

三、位图索引

创建语法是在普通索引创建的语法中index前加关键字bitmap即可,例如:

create bitmap index t_ix_执行人 on t(执行人);

位图索引主要针对大量相同值的列而创建(例如:类别,操作员,部门ID,库房ID等)。

阅读剩余部分

相关阅读 >>

oracle中nextval案例详解

oracle数据库中的控制文件管理以及常用参数设置

oracle中plsql复合数据类型

sqlserver、mysql、oracle三种数据库的优缺点总结

oracle 11g 新特性 flashback data archive 使用实例

oracle 区块链表创建过程详解

oracle 数据库自动存储管理-安装配置

centos 6.4下安装oracle 11gr2详细步骤(多图)

冷备份是什么意思?

oracle 数据库数据迁移解决方案

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...