设为首页 加入收藏

TOP

oracle性能优化操作一:避免对列的操作
2015-07-24 12:07:49 来源: 作者: 【 】 浏览:26
Tags:oracle 性能 优化 操作 避免

任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,
甚至去掉函数。

例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快速建立DBLink的sql语句 下一篇Oracle学习(十三):闪回

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: