Oracle-索引

目录

  • 我们为什么需要索引?
  • 索引的优缺点
  • 索引的分类
  • 创建索引
  • 修改索引
  • 删除索引

我们为什么需要索引?

  数据库的数据量一旦大起来,可以想象查询时如大海捞针一般,需要很长时间才能找到对应的数据。如何提高大数据量时的查询效率呢?一谈到这种话题,可以很自然联想到冒泡排序、二分法等等,如何实现、哪种更好,还是挺让人头痛的问题。

  还在Oracle已经为我们解决了这种头痛,我们只需要使用Oracle提供的“索引”就好。为字段添加了索引,在查询时则会通过特定算法来提高查询效率。

索引的优缺点

  既然加了索引,就可以提高查询效率,那是不是我们给表的每个字段都加上索引,就一劳永逸了呢?。当然不是,索引虽好,但也有弊端。

  索引的优点

  • 1.可以加快检索数据的速度
  • 2.使用唯一索引可以确保每行数据的唯一性
  • 3.今天加快表与表之前连接查询的速度
  • 4.可以明显减少分组查询和排序查询的时间

  索引的缺点

  • 1.索引需要占用额外的物理空间
  • 2.增、删、改数据时,需要动态的进行维护,降低DML操作的速度

  那么我们什么时候,在哪里建议使用索引呢

  • 1.数据量小的表不需要建索引(量数据十万内,取决于服务器配置)。
  • 2.经常查询的数据值的记录目数,少于表的总目数的15%。
  • 3.大部分列值都不重复的列可以建索引。
  • 4.基数大的列适合建B数索引,基数小的列适合建位图索引。
  • 5.列中有许多空值,但需要经常查询非空记录的列,需要建索引。
  • 6.经常进行连接查询的列应该建索引。
  • 7.主要用于读的表,可以建索引。经常执行DML修改的表,不适合建太多索引。

索引的分类

  按索引的创建方式分类

  • 自动创建:Oracle会为唯一约束及主键约束自动创建唯一索引,且不推荐人工创建唯一索引。
  • 手动创建:人工创建的非唯一索引。

  按索引的实现方式分类

  • B树索引:Oracle的默认索引方式,按B树结构组织并存放索引数据。
  • 位图索引:为索引每个取值创建一个位图,对表中的没行使用1位来表示该行是否包含该位图的索引列的取值。

创建索引

  索引的创建语法如下:

	CREATE [UNIQUE] | [BITMAP] INDEX 索引名
	ON 目标表(目标字段,目标字段...);

  例如,给学生信息表的name字段加索引:

	create index idx_student_name on t_student(name); --默认B树索引
	create bitmap index idx_student_name on t_student(name);  --位图索引

修改索引

  重命名索引:

	--只是改个名字,没有其他变化
	alter index idx_student_name rename to 新索引名;

  在日常使用中,由于会频繁的对表经常操作,导致索引的改变,并产生大量碎片,从而使索引的效率降低。可以使用如下两种方式清理碎片:

  • 合并索引:不改变索引物理结构,只是将碎片整合至一起。
	alter index idx_student_name coalesce;
  • 重建索引:删除原来的索引,重新创建一个索引。
	alter index idx_student_name rebuild [tablespace 表空间];

  二者的区别主要是:

  • 1.合并索引不能修改索引的表空间,而重建索引可以。
  • 2.合并索引代价较低,不需要额外的存储空间,而重建相反。
  • 3.合并索引是在原有的B树中进行合并,不改变树的高度。而重建索引会重建整个B数,可能会降低树的高度。

删除索引

  通过drop index 索引名;的方式,即可删除索引。

你可能感兴趣的:(数据库)