基于索引的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秒)

差别是很明显的!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值