索引是Oracle为提高查询效率而制定的机制,对于大数量数据的查询,索引能够成倍提高查询效率,缩短查询时间。
索引的作用
- 通过创建唯一索引可以保证数据记录的唯一性
- 索引可以强制表中的行具有唯一性,从而确保表数据的数据完整性。在创建主键约束时会自动创建主键索引
- 可以大大提高数据检索速度
- 可以加速表与表之间的连接
- 在使用order by和group by子句检索数据时,可以显著减少查询中分组和排序的时间
- 使用索引可以检索数据的过程中使用优化隐藏器,提高系统性能
索引的创建
在Oracle中,创建索引的方法有三种,第一种为使用SQL Developer工具来创建,第二种是使用语句来创建,第三种是在OEM中使用页面方法来创建。最主要的是知道何时创建索引
何时创建索引
索引一般在那些可能在where子句中使用的列或者连接时以两边相等的形式的某个列上
索引分为唯一索引,不唯一索引,视图索引
- 唯一索引:不允许具有与索引值相同的行,系统在创建索引时检查是否有重复的键值
- 不唯一索引:允许有与索引值相同的行
- 位图索引;该索引比较适合数据差异较小的列,是针对那些数据步经常改动的列
使用语句创建索引
使用create index语句创建索引的语法结构
create [unique|bitmap] index index_name
on table_name
(col [asc|desc])
unique表示唯一索引,bitmap表示位图索引,col表示列名,可以是一列,也可以是多列的组合;asc表示升序,desc表示降序;默认是升序
在单列上创建索引
create unique index in_customer_id
on customersnew(customer_id)
**在多列上创建索引
create unique index in_customer_id
on customersnew(customer_id,cust_first_name)
创建索引的主要事项
在一个表中,创建索引需要一定的条件,并不是为某个创建了索引就可以提高整个工作效率,以下归纳了使用索引的注意事项:
- 建议索引建立在查询较多而DML操作少的表上。最好在创建索引之前,将初始数据装入数据表,否则建表之后直接创建索引,在输入初始数据时,每插入一个记录,都要维护一次索引
- 在定义唯一索引的列上定义索引,其效果更好;
- 索引要占用数据库空间,在设计数据库时,需要把索引空间考虑在内
- 尽量把表和它的索引存放在不同的磁盘上,这样会提高查询速度。
索引的管理
修改索引
修改索引涉及查看索引,重命名,重建索引。修改索引可以使用OEM,SQL Developer工具及命令方式
总结
合理使用索引可以减少磁盘访问的次数,从而大大提高数据库的性能。重点需要知道何时创建索引,以及如何合理的创建索引