索引
创建索引:
create index索引名on表名(列名1,,列名2)
删除索引:
drop index索引名;
查看该表的所有索引:
select * from ALL_INDEXES where table_name = '表名'
查看该表的所有索引列:
select * from ALL_IND_COLUMNS where table_name = '表名';
索引的作用:
1、提高SQL语句执行的性能,快速定位我们需要查找的表的内容,提高sql语句的执行能力。
2、Oracle自动维护索引,当进行增删改操作时,oracle自动维护索引,使其能够更好的工作。
索引分为B树索引和位图索引。
B树索引又可分为:
唯一索引:
索引相关列上的值唯一
组合索引:
(列1,,列n),多个列确定一行
执行计划:
通过执行计划查看语句是否使用索引
生成执行计划:
explain plan for
select * from USER;
查看执行计划结果:
select * from table(dbms_xplan.display)
几种常见的索引扫描:
1、index unique scan
索引唯一扫描,当优化器发现某个查询条件可以利用到主键、唯一键、具有外键约束的列、或者只访问某行索引所在的数据,优化器会选择这种扫描方式。
2、index range scan
索引范围扫描,当优化器上出现大于、小于、between等,就会使用范围扫描,在组合列上只使用部分进行查询,导致查询出多行数据。对非唯一的索引列上进行的任何活动都会使用index range scan
3、index full scan
全索引扫描,所有的数据全部从索引中获取。
4、index fast full scan
索引快速扫描,扫描索引中的全部数据块,且数据不排序。
order by、group by使用索引的前提条件:
1.order by、group by中所有的列必须包含在相同的索引中并保持在索引中的排列顺序;
2.order by、group by中所有的列必须定义为非空
不走索引的几种情况:
1.where子句中使用is null和is not null
2.where子句中使用函数
3.使用like ‘%T’进行模糊查询
4.where子句中使用不等于操作(包括:<>, !=, not colum >= ?, not colum <= ? ,可以使用or代替)
5.比较不匹配数据类型,例如:select * from table where jlbh = 1;jlbh为varchar2类型字段