--创建使用索引
--索引是一个独立的schema对象,是单独存储的
--索引用来提高查询操作的性能
--索引可以自动或手工创建:
--自动创建只存在于:表的列设置了primary key或者unique约束
如果你定义了这两个约束,索引就自动创建出来了
--索引由oracle自动使用和维护
createtable cemp
as select* from employees;
--按f10查看执行计划,是走全表扫描
select *
from cemp
where last_name='King';
createindex cemp_last_name_idx
oncemp(last_name);
--按f10查看执行计划,是走索引扫描
select *
from cemp
where last_name='King';
--索引可以建在多个列上,这叫复合索引
createindex cemp_name_idx
oncemp(first_name,last_name);
但对于复合索引,如下查询时不走索引的
select *
from cemp
where last_name='King';
删除索引
dropindex cemp_last_name_idx;
--按f10查看执行计划,不走索引扫描cemp_name_idx
select *
from cemp
where last_name='King';
----按f10查看执行计划,走索引扫描cemp_name_idx
select *
from cemp
where first_name='King';
select *
from cemp
where first_name='King' or last_name='King';
注:or不走索引,但and走
索引创建指南
1.当一个列包含一个宽范围的值时建立索引,就是这个列的值绝大部分都是不重复的
最典型的就是主键
2.一个列包含大量的空值也应该建立索引,虽然索引加快查询速度但只有索引能得到正确的值
时才走索引,正确的值都得不到肯定不会走索引
3.一个或多个列被频繁地使用在where子句或连接的
4.表很大,但大多数查询用到的表的列为2%到4%