索引
(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 合并和重建索引