oracle 性能优化操作一:避免对列的操作
2015-03-03 11:09
441 查看
【本文转载自:http://blog.csdn.net/helloboat/article/details/42418045,对作者表示感谢!】
任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。
例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢:
由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描,因此将SQL重写如下:
任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。
例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢:
select * from record where substrb(CardNo,1,4)='5378'(13秒) select * from record where amount/30< 1000(11秒) select * from record where to_char(ActionTime,'yyyymmdd')='19991201'(10秒)
由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描,因此将SQL重写如下:
select * from record where CardNo like '5378%'(< 1秒) select * from record where amount < 1000*30(< 1秒) select * from record where ActionTime= to_date ('19991201' ,'yyyymmdd')(< 1秒)
相关文章推荐
- oracle 性能优化操作二:避免不必要的类型转换
- oracle 性能优化操作二:避免不必要的类型转换
- oracle 性能优化操作一:避免对列的操作
- oracle 性能优化操作三:增加查询的范围限制
- Oracle 性能优化—批量操作
- oracle 性能优化操作四:尽量去掉"IN"、"OR"
- oracle 性能优化操作九: 屏蔽无用索引
- oracle 性能优化操作十三: 使用nls_date_format
- oracle 性能优化操作五:尽量去掉 "<>"
- oracle 性能优化操作十: 分解复杂查询,用常量代替变量
- oracle 性能优化操作十七: 使用位图索引
- oracle 性能优化操作七:索引提高数据分布不均匀时查询效率
- oracle 性能优化操作三:增加查询的范围限制
- oracle 性能优化操作六: 去掉Where子句中的IS NULL和IS NOT NULL
- oracle 性能优化操作十五: 基于函数的索引要求等式匹配
- oracle 性能优化操作九: 屏蔽无用索引
- oracle 性能优化操作十一: like子句尽量前端匹配
- oracle 性能优化操作六: 去掉Where子句中的IS NULL和IS NOT NULL
- oracle 性能优化操作十二: 用Case语句合并多重扫描
- oracle 性能优化操作七:索引提高数据分布不均匀时查询效率