锁定老帖子 主题:低效的where 1=1
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-12
以前在哪见过,这个东西会影响oracle的执行计划。。。。
|
|
返回顶楼 | |
发表时间:2010-07-12
如果成千上万条数据就能让你的mysql性能非常低,那真的要怀疑你的mysql环境和调优了。首先,你select * 这是程序员需要规避的操作。再次,1=1 只是一个缺省的条件始终是true,对你说数据库做过滤,检索表示怀疑。
|
|
返回顶楼 | |
发表时间:2010-07-12
哪个数据库的查询优化器这么弱智?MySql?
|
|
返回顶楼 | |
发表时间:2010-07-12
看来均是质疑啊。
LZ给出证据呗 |
|
返回顶楼 | |
发表时间:2010-07-12
我刚才对MySQL5.1上的一个2百万条记录的表进行了类似查询,
的确,select count(*) from consumer where 1=1会很慢,但速度跟select count(*) from consumer一样, (为了去除mysql查询缓存的影响,我用了SQL_NO_CACHE关键字,实际执行的是类似: select SQL_NO_CACHE count(*) from consumer where 1=1 ;的SQL) 而select count(*) from consumer where 1=0 ;是很快返回0的。 所以我测试的这种数据库下,1=1本身并不慢,它只是一个占位符,是一个无意义的条件,本身对性能产生影响可以忽略。 |
|
返回顶楼 | |
发表时间:2010-07-12
最后修改:2010-07-12
如果只有一个where 1=1,和什么条件都没有一样,当然会慢了,但这也不是1=1的错啊
|
|
返回顶楼 | |
发表时间:2010-07-12
Mysql有查询优化器,像这种直接过滤了。。
|
|
返回顶楼 | |
发表时间:2010-07-12
pi1ot 写道 我怎么从来没遇到过需要这么用的时候,举个例子
我们公司在应用ibatis查询的时候,很多这么写,确实比较省事 |
|
返回顶楼 | |
发表时间:2010-07-12
1. 插入10000000条数据到mytable
2. 比较: select * from mytable select * from mytable where 1=1 3. 看看执行时间 |
|
返回顶楼 |
已被评为好帖!
|
发表时间:2010-07-12
xiaojing3517 写道 看来均是质疑啊。
LZ给出证据呗 1. 插入10000000条数据到mytable 2. 比较: select * from mytable select * from mytable where 1=1 3. 看看执行时间 |
|
返回顶楼 |
已被评为好帖!
|