码迷,mamicode.com
首页 > 其他好文 > 详细

等价谓词重写

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

标签:style   os   io   数据   line   数据库   on   rom   

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

等价谓词重写

标签:style   os   io   数据   line   数据库   on   rom   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!