标签:style os io 数据 line 数据库 on rom
name like ‘abc%‘
重写为
name >= ‘abc‘ and name <‘abd‘
可以避免全表扫描,走索引
sno between 10 and 20
重写为
sno >= 10 and sno <=20
如果数据库对between-and走索引,改为这种可以从全表扫描转为索引扫描
age in (8,12,21)
重写为
age =8 or age=12 or age=21
如果数据库对in只支持全表扫描的话,这种转换可以走索引
age in(8,12,21)
转
age any(8,12,21)
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)
sno > any(10,2*5+3,sqrt(9))
转换为
sno > sqrt(9)
not (col1 != 2)
转换为
col1 = 2
正面的重写速度更快
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上的索引
总结:
上面都不是绝对的,要看数据库是否支持,如果数据库支持了,自己也就不用这样去等价谓词重写了。
标签:style os io 数据 line 数据库 on rom
原文地址:http://my.oschina.net/scipio/blog/299677