首页 > 其他 > 详细

等价谓词重写

时间:2014-08-10 13:12:42      阅读:253      评论:0      收藏:0      [点我收藏+]

1、like规则

name like ‘abc%‘

重写为

name >= ‘abc‘ and name <‘abd‘

可以避免全表扫描,走索引


2、between-and规则

sno between 10 and 20

重写为

sno >= 10 and sno <=20

如果数据库对between-and走索引,改为这种可以从全表扫描转为索引扫描


3、in转or规则

age in (8,12,21)

重写为

age =8 or age=12 or age=21

如果数据库对in只支持全表扫描的话,这种转换可以走索引


4、in转any规则

age in(8,12,21)

age any(8,12,21)


5、or转any规则

sal > 1000 or dno =3 and(sal>1100 or sal>base_sal+100) or sal>base_sal+200 or sal>base_sal*2

重写为

dno = 3 and (sal>1100 or sal>base_sal+100) or sal>any(1000,base_sal+200,sal>base_sal*2)


6、all/any转集函数规则

sno > any(10,2*5+3,sqrt(9))

转换为

sno > sqrt(9)


7、not规则

not (col1 != 2)

转换为

col1 = 2

正面的重写速度更快


8、or重写并集规则

select * from student

where (sex=‘f‘ and age>15)  or age>18

重写为

select * from student

where sex=‘f‘ and age>15

union

select * from student

where age>18

可以分别利用sex和age上的索引


总结:

上面都不是绝对的,要看数据库是否支持,如果数据库支持了,自己也就不用这样去等价谓词重写了。


等价谓词重写,布布扣,bubuko.com

等价谓词重写

原文:http://my.oschina.net/scipio/blog/299677

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!