Oracle 数据库中的索引

来源:互联网 发布:python中split函数 编辑:程序博客网 时间:2024/05/21 17:46

   在oracle数据库中的数据, 每一行都是用RowID来标识的,RowID能够标识数据库中的某一行的具体位置,在数据库中存有大量数据时, 要能找找到具体的某一个数据(RowID),这个时候就需要索引对象。

  

   1)索引的工作原理:  在一个拥有大量数据的表中进行查询时, 如果没有创建索引,肯定会全表查询, 然后再将查询出的每一行数据和查询条件进行比对,最后返回满足条件的记录

    创建索引之后:只需要在索引中找到符合查询条件字段的值, 然后再通过保存在索引中的RowID快速找到数据库对应的记录。

    比喻:

    如果将索引比作一本书的话, 那么索引就是这本书的目录。在没有目录的情况下,要查找到指定的类容,必须要阅读全文,有了目录之后, 可以通过目录很快地找到指定类容。


2)创建索引的原则:

 索引应该建立在where字句经常用的列上,并且这些列作为查询条件查询的数据,占整个表数据低于15%,那么这些列可以建立索引。

经常使用某些列作为查询条件

对于多表查询,应该把索引建立在连接的列上


3)常用到的创建索引的方式:

单列索引:在一个列上建立的索引,比如:

-- Oracle默认建立B-tree索引  create index 索引名 on 表名(列名) 
复合索引:在两列或多列上建立的索引。在同一张表上可以有多个索引,但是这些索引所包含的列的组合必须不完全相同

create index emp_idx1 on emp(ename, job);  create index emp_idx2 on emp(job, ename);  
不恰当的索引反而会降低系统性能,比如:很少或从不引用的字段;逻辑型字段,如男或女(是或否)等,因为:建立索引提高查询效率是以消耗一定的系统资源(额外的存储和增删改操作额外的索引更新时间)为代价的


4)索引的分类:分为B-树索引、反向索引、位图索引,B-树索引建立在重复值很少的列上,位图索引建立在重复值很多、不同值相对固定的列上。

按照索引列的个数,分为单列索引、复合索引;

按照索引列值的唯一性,分为唯一索引、非唯一索引。

此外还有函数索引、全局索引、分区索引等。

0 0