索引

(1)主键与唯一性约束的区别:主键 = 唯一性约束 + 非空约束。

  当定义主键或者唯一性约束时,oracle 会自动在相应的字段上创建唯一性索引。

(2)索引原理:

   create index   idx_emp_ename on emp_index(ename);

  当为ename这个列建立了一个索引后,oracle会对 表 emp_index 进行一次全表扫描, 获取每条记录 ename 列的数据, 并进行升序排列。

  同时会获取每条记录的 ROWID值,连同排序后的 ename列一起存储到 索引段中, 格式是 (索引列值, ROWID),这种组合也称为索引条目。

  当检索数据是,oracle首先对索引中的列进行快速搜索,由于索引列已经排序过,因此可以使用各种快速的搜索算法,避免全表扫描。在找到所要检索的数据后,通过ROWID在 emp_index表中读取具体的记录值。

(3)创建索引:

语法: create index index_name on table_name([column1, column2...]);

  默认创建的是B树索引。当创建复合索引时,索引列的顺序决定了索引的性能,通常将最常查询的列放在前面,不常查询的列放在后面。

(4) 创建索引的10条原则:

1 小表不需要创建索引

2 对于大表而言,如果经常查询的记录数目小于表中总记录数的15%,可以创建索引。

3 对于大部分列值不重复的列可以建立索引

4对于基数大的列,适合建立B树索引,对于基数小的列适合建立位图索引。

5对于列中有许多空值,但经常查询所有的非空值记录的列,应该建立索引。

6 LONG 和 LONG RAW 列不能建立索引。

7 经常进行连接查询的列上应该创建索引。

8 在 使用 create index 创建索引时,将最常查询的列放在其他列前面。

9维护索引需要开销,特别是对表进行插入和删除操作时,因此要限制表中索引的数量

10 在表中插入数据后建立索引。

(5)修改索引

1 重命名索引

alter index  idx_old_name RENAME TO idx_new_name

2 合并和重建索引

原文地址:https://www.cnblogs.com/ly01/p/8510971.html