论坛首页 综合技术论坛

低效的where 1=1

浏览 41495 次
该帖已经被评为隐藏帖
作者 正文
   发表时间: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
那优化过程再短不也是消耗时间么
求教
0 请登录后投票
   发表时间:2010-07-12  
willko 写道
Mysql有查询优化器,像这种直接过滤了。。


我印象中也是这样的。哪个数据库这么弱智,1=1、2=2这种明显的占位条件都不知道去掉吗?
0 请登录后投票
   发表时间:2010-07-12  
maozj 写道
seanzeng 写道
我刚试了 postgresql 和 oracle。

这个1=1根本不会处理,直接过滤了,该用索引的还是用索引。

不知道你测试的时候用的是什么样的环境和SQL语句?



1. 插入10000000条数据到mytable
2. 比较: select * from mytable
          select * from mytable where 1=1
3. 看看执行时间

把查询计划帖出来吧
0 请登录后投票
   发表时间:2010-07-12  



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

如果去掉where 1=1
成本为0%
  • 大小: 31.6 KB
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万多,点分页就快一点.
查询全部数据量,点分页就相当慢.


请问一下:哪里出问题了??
0 请登录后投票
   发表时间: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万多,点分页就快一点.
查询全部数据量,点分页就相当慢.

很欣慰你的细腻
0 请登录后投票
   发表时间:2010-07-12  
maozj 写道



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

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


这就不用全表扫描了?除非有在所有列上有covering index。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics