sql where 1=1 慎用

 也许很多人在开发多条件查询或模糊查询的时候,为保证不管选择哪种过滤条件总保证查询条件为true,于是在where子句后选择1=1或者0=0技巧来满足模糊查询。当然这的确对开发人员来说是一个不错的技巧。于是我在Mysql中通过上千万条的数据测试发现很耗性能。即便是建了常用字段的索引(排序)也没有作用,足以确定1=1很低效,大数据量很耗性能。 

  select * from t_user where 1=1 

   因为添加了"1=1"的过滤条件以后数据库系统无法使用索引等优化查询策略,数据库系统将会被迫对每行数据进行扫描(也就是全表扫描)来比较此行是否满足顾虑条件,当表中数据量比较大的时候查询速度会非常慢。 


-------------------- 
maoone2003的回答甚是不错(红色部分) 作为开题人 我采纳... 

select * from table where 1=1因为table中根本就没有名称为1的字段,所以该SQL等效于select * from table,这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢,建议查询时增加必输项,即where 1=1后面追加一些常用的必选条件,并且将这些必选条件建立适当的索引,效率会大大提高 
PS:这不是SQL写法的问题,也不是数据库的问题,是自己程序逻辑的问题
 

http://maozj.iteye.com/blog/710338



看成本...这是SqlServer中的测试 

如果去掉where 1=1 
成本为0%


那你为什么不顺手把去掉1=1的execution plan截图贴出来。测试没有发现你说的问题。

------------------------------ 

 

 

猜你喜欢

转载自mj914.iteye.com/blog/1765547
今日推荐