关于是否添加索引就可以提高性能?能否举例说明
2010-02-23 11:18
274 查看
因为使用索引有索引的限制条件 所以如果不当使用索引返回会造成性能方面的降低,由于9i以后就使用了基于CBO的执行计划所以有时候即使添加索引也不会走索引,可能还是会走全表扫描
1 当使用 <> != 这类的比较运算符的时候 即使在列dept_id 上添加索引,查询语句有可能仍然走全表扫描
select * from dept where staff_num <> 1999;
select * from dept where staff_num != 1999;
改进方法就是通过加or来修改语句
select * from dept where staff_num < 1999 or staff_num > 1999
2 当使用 is null 也会限制索引使用,当索引列有很多null的时候 oracle就不会使用索引(位图索引除外),sql 语句中使用null会有很多麻烦
建议:把索引列建立在not null的列上
3 当在没有建立基于函数的索引的时候 如果sql语句中如果把索引列上添加了函数 那么oracle也不会走索引
建议:把建立基于函数的索引列 或者 把条件值上添加函数
select * from staff where upper(staff_zip_id) = 'CH01';
select * from staff where birthdate = lower('CH01');
4 当比较不匹配数据类型的时候也会出现不走索引 走全表扫描的问题 ,如果索引列是varchar2 类型 dept_id这个 而比较的值是number类型 那么oracle会把索引列进行隐式转化为number类型
select * from dept where dept_id = 9876;
转化为 select * from where to_number(dept_id) = 9876;
建议:
select * from dept where dept_id = '9876';
1 当使用 <> != 这类的比较运算符的时候 即使在列dept_id 上添加索引,查询语句有可能仍然走全表扫描
select * from dept where staff_num <> 1999;
select * from dept where staff_num != 1999;
改进方法就是通过加or来修改语句
select * from dept where staff_num < 1999 or staff_num > 1999
2 当使用 is null 也会限制索引使用,当索引列有很多null的时候 oracle就不会使用索引(位图索引除外),sql 语句中使用null会有很多麻烦
建议:把索引列建立在not null的列上
3 当在没有建立基于函数的索引的时候 如果sql语句中如果把索引列上添加了函数 那么oracle也不会走索引
建议:把建立基于函数的索引列 或者 把条件值上添加函数
select * from staff where upper(staff_zip_id) = 'CH01';
select * from staff where birthdate = lower('CH01');
4 当比较不匹配数据类型的时候也会出现不走索引 走全表扫描的问题 ,如果索引列是varchar2 类型 dept_id这个 而比较的值是number类型 那么oracle会把索引列进行隐式转化为number类型
select * from dept where dept_id = 9876;
转化为 select * from where to_number(dept_id) = 9876;
建议:
select * from dept where dept_id = '9876';
相关文章推荐
- 解析一个通过添加本地分区索引提高SQL性能的案例
- 关于SQL中索引提高查找性能实验
- [Oracle] 一个通过添加本地分区索引提高SQL性能的案例
- 索引视图可以提高性能
- 使用索引查询是否能提高查询的性能以及索引的优缺点
- 解析一个通过添加本地分区索引提高SQL性能的案例
- 通过 SQL Server 2005 索引视图提高性能
- 用示例说明B-Tree索引性能优于BitMap索引
- DBCC DBREINDEX重建索引提高SQL Server性能
- 举例详细说明javascript作用域、闭包原理以及性能问题(转)
- MySQL存储过程----创建索引前,先判断索引是否已经存在,如果存在,则不添加,如果不存在,添加
- 動態SQL可以用綁定變量提高性能
- zhb-cms关于外键索引是否有必要?
- 概述 RequireJS是一个工具库,主要用于客户端的模块管理。它可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性。它的模块管理遵守AMD规范(Asynchronou
- 举例详细说明javascript作用域、闭包原理以及性能问题
- 建立合理的索引提高SQL Server的性能
- 举例说明----索引的创建,删除,查看,分类
- 关于nginx性能优化CPU参数worker_cpu_affinity使用说明
- Nginx 反向代理为什么可以提高网站性能?