锁定老帖子 主题:低效的where 1=1
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-12
chenlixun 写道 哪个数据库的查询优化器这么弱智?MySql?
1. 插入10000000条数据到mytable 2. 比较: select * from mytable select * from mytable where 1=1 3. 看看执行时间 |
|
返回顶楼 |
已被评为好帖!
|
发表时间:2010-07-12
seanzeng 写道 我刚试了 postgresql 和 oracle。
这个1=1根本不会处理,直接过滤了,该用索引的还是用索引。 不知道你测试的时候用的是什么样的环境和SQL语句? 1. 插入10000000条数据到mytable 2. 比较: select * from mytable select * from mytable where 1=1 3. 看看执行时间 |
|
返回顶楼 |
已被评为好帖!
|
发表时间:2010-07-12
即便用到索引 也不会用到其优化性
|
|
返回顶楼 |
已被评为好帖!
|
发表时间:2010-07-12
Mysql有查询优化器可以直接过滤where 1=1
那优化过程再短不也是消耗时间么 求教 |
|
返回顶楼 | |
发表时间:2010-07-12
willko 写道 Mysql有查询优化器,像这种直接过滤了。。
我印象中也是这样的。哪个数据库这么弱智,1=1、2=2这种明显的占位条件都不知道去掉吗? |
|
返回顶楼 | |
发表时间:2010-07-12
maozj 写道 seanzeng 写道 我刚试了 postgresql 和 oracle。
这个1=1根本不会处理,直接过滤了,该用索引的还是用索引。 不知道你测试的时候用的是什么样的环境和SQL语句? 1. 插入10000000条数据到mytable 2. 比较: select * from mytable select * from mytable where 1=1 3. 看看执行时间 把查询计划帖出来吧 |
|
返回顶楼 | |
发表时间:2010-07-12
看成本...这是SqlServer中的测试 如果去掉where 1=1 成本为0% |
|
返回顶楼 | |
发表时间:2010-07-12
最后修改:2010-07-12
好像是很低效,一个邮件收集系统才10万多条数据就已经变得很慢了,也查不出是什原因..(mysql5.0)
以前是这样的hql: select e.id,e.name,date_format(e.addtime,'%Y-%m-%d'),e.admin.name,date_format(e.sendtime,'%Y-%m-%d') from email e where 1=1; 现在改为这样native-sql: select e.id,e.name,date_format(e.addtime,'%Y-%m-%d'),a.name,date_format(e.sendtime,'%Y-%m-%d') from email e,admin a where e.add_admin_id=a.id 也是很慢. --- select count(e.id) from email e where 1=1 查询到数据量为5万多,点分页就快一点. 查询全部数据量,点分页就相当慢. 请问一下:哪里出问题了?? |
|
返回顶楼 | |
发表时间:2010-07-12
superyang 写道 好像是很低效,一个邮件收集系统才10万多条数据就已经变得很慢了,也查不出是什原因..(mysql5.0)
以前是这样的hql: select e.id,e.name,date_format(e.addtime,'%Y-%m-%d'),e.admin.name,date_format(e.sendtime,'%Y-%m-%d') from email e where 1=1; 现在改为这样native-sql: select e.id,e.name,date_format(e.addtime,'%Y-%m-%d'),a.name,date_format(e.sendtime,'%Y-%m-%d') from email e,admin a where e.add_admin_id=a.id 也是很慢. --- select count(e.id) from email e where 1=1 查询到数据量为5万多,点分页就快一点. 查询全部数据量,点分页就相当慢. 很欣慰你的细腻 |
|
返回顶楼 | |
发表时间:2010-07-12
maozj 写道 看成本...这是SqlServer中的测试 如果去掉where 1=1 成本为0% 这就不用全表扫描了?除非有在所有列上有covering index。 |
|
返回顶楼 | |