对比创建索引前后,查询耗费基数
1、在oracle数据库中,执行下面的操作新建一个大的数据表
create table test_objects as select * from dba_objects
2、select * from test_objects where object_name ='COMBSTKBAL'
在PL/SQL Developer中运行执行计划(选中查询语句,按F5执行)结果如图:可见test_objects作为普通表处理时,将执行全表搜索,其花费基数为326
3、现在为该表的object_name列上创建索引
create index idx_test_object on test_objects(object_name)
之后,再次对同一条SQL语句,查看执行计划,结果如图,此时花费基数已由原来的326降为7了
4、另外,查询条件中,主键列放在前面也会快与非主键列在前面
SQL什么条件下不会使用索引
查询条件 | 不能使用索引原因 |
---|---|
index_column<>? index_column not in (?) | 不等于操作不能使用索引 |
function(index_column)=? index_column+1 =? | 经过普通运算或函数运算后的索引字段不能使用索引 |
index_column like’%?‘ | 含前导模糊查询的like语法不能使用索引 |
index_column is null | 为空值的不能使用索引 |
number_index_column=’12345‘ | oracle在做数值比较时需要将两边的数据转换成同一种数据类型,如果两边数据类型不同,会对字段值隐式转换,相当于加了一层函数处理,所以不能使用索引 |
index_column = column1 | 给索引查询的额值应该是已知数据,不能是未知字段值 |
建立的是组合索引,但是查询的时候只将一个列作为查询条件 |
一般在什么字段上建立索引
主键以及外检通常都要索引,其他需要建立索引的字段应该满足以下条件:
- 字段出现在查询条件中,并且查询条件可以使用索引
- 语句执行频率高,一天会有几千次以上
- 通过字段条件可筛选的记录集很小