您的位置:首页 > 数据库 > Oracle

转: Oracle 索引详解

2013-04-02 00:55 190 查看
一. 索引介绍
1.1 索引的创建语法

CREATE UNIUQEBITMAP INDEX <schema>.<index_name>
#使用UNIUQE就会附送1个唯一索引, BITMAP为位图索引,默认是B树索引。
ON <schema>.<table_name>(
<column1_name> | <expression> ASC | DESC,
<column2_name> | <expression> ASC | DESC,
) #可以对多列进行联合索引, 当为expression时即系"函数索引"
TABLESPACE <tablespace_name> #指定存放索引的表空间(索引和对应表不在1个表空间,效率会更高)
STORAGE <storage_setting> #可以进一步设置表空间的存储参数
LOGGING | NOLOGGING #是否对索引产生重做日志(对达标尽量使用NOLOGGING来减少占用空间并提高效率)
COMPUTE STATISTICS #创建新索引时收集系统信息.
NOCOMPRESSCOMPRESS<nn> #是否使用"键压缩"(使用键压缩可以删除1个键列中出现的重复值)
NOSORT | REVERSE #正向索引还是反向索引
PARTITION | NOPARTITION #可以在分区表和未分区表上对创建的索引进行分区


1.2 索引的特点
1.通过创建1个唯一性索引,系统会自动创建1个唯一性约束。 可以保证该列(或约干列的唯一性).
2.可以大大加快数据的检索速度,这也是创建索引的目的。
3.可以加速表与表之间的连接。
4.在使用分组和排序字句进行数据查询时,同样可以显著减少分组和排序时间。
5.通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统性能。
6.对于搜索的数据占表数据的比例越低,索引的作用越明显.

1.3 索引的不足
1. 创建和维护索引需要时间成本,而且随数据量增加而增加。
2. 索引会占大量物理空间,不过随着单位硬盘价格不断降低,忽略拉。
3. 对表中数据怎想增删改操作时,索引也要更新维护,会降低增删改的性能。

1.4 应该建索引列的特点
1. 在经常需要搜索的列上,可以加快搜索速度。
2. 在作为主键的列上, 强制该列的唯一性和组织表中数据的排列结构。
3. 在经常用在连接的列上(如外键), 加快表连接速度。
4. 在经常需要根据范围进行搜索的列上,因为索引已经排序,其指定的范围是连续的。
5. 在经常需要排序的列上。
6. 在经常处于where 条件的列上。

1.5 不应该建索引列的特点
1. 对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

2.对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

3.对于那些定义为blob数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少.

4.当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

1.6 限制索引
限制索引是一些没有经验的开发人员经常犯的错误之一。在SQL中有很多陷阱会使一些索引无法使用。
下面讨论一些常见的问题:

1. 使用不等于操作符(<>,!=)
待续哈哈

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: