一条查询语句:
SELECT COUNT(1) FROM kd_z_all_trade t WHERE (t.plat_from_id=1 OR t.plat_from_id=16)
AND t.created>='2014-12-01 00:00:00' AND t.created<'2014-12-12 23:59:59'
执行结果:
表数据有6万多条,主键、索引都有,应该很快查询出结果啊,一开始需要14秒左右,一直优化到现在4秒,但是还是不对劲啊。如果把后面的时间条件去掉,即SQL语句为:SELECT COUNT(1) FROM kd_z_all_trade t WHERE (t.plat_from_id=1 OR t.plat_from_id=16) ,执行正常,速度很快,几十毫秒;
如果只用时间做条件,即SELECT COUNT(1) FROM kd_z_all_trade t WHERE t.created>='2014-12-01 00:00:00' AND t.created<'2014-12-12 23:59:59' ,也很正常,几十毫秒;为什么全条件就会变慢,差这么多?SQL执行的各阶段耗时如下图:
时间主要消耗在Sending Data,可是并没有查询字段啊,不解啊?
SELECT COUNT(1) FROM kd_z_all_trade t WHERE (t.plat_from_id=1 OR t.plat_from_id=16)
AND t.created>='2014-12-01 00:00:00' AND t.created<'2014-12-12 23:59:59'
执行结果:
表数据有6万多条,主键、索引都有,应该很快查询出结果啊,一开始需要14秒左右,一直优化到现在4秒,但是还是不对劲啊。如果把后面的时间条件去掉,即SQL语句为:SELECT COUNT(1) FROM kd_z_all_trade t WHERE (t.plat_from_id=1 OR t.plat_from_id=16) ,执行正常,速度很快,几十毫秒;
如果只用时间做条件,即SELECT COUNT(1) FROM kd_z_all_trade t WHERE t.created>='2014-12-01 00:00:00' AND t.created<'2014-12-12 23:59:59' ,也很正常,几十毫秒;为什么全条件就会变慢,差这么多?SQL执行的各阶段耗时如下图:
时间主要消耗在Sending Data,可是并没有查询字段啊,不解啊?
解决方案 »
- win7 64位操作使用default-character-set=utf8设置mysql-5.5.20-winx64的字符编码后,启动出错
- mysql中的空字符串会给java返回什么
- 如何取出这种特殊需求的数据表中的值?
- 如何得到不在group by里也不用聚合函数的字段信息?应该不难
- 如何删除这些完整性约束条件
- postgres字符转数字
- 请问一个c++builder与mysql++的问题
- 我的apache2+php+mysql出现的问题
- 如何创建一个外汇数据库?
- mysql表含有Blob类型字段,如何转为csv文件导入
- MYSQL 冻结解冻查询语句
- mysql 有http 协议,什么情况?
估计是使用了不同的索引。而索引信息可能不准确导致的。
全部条件的:是没有用索引,但是强制索引后也不正常啊,我在另一台服务器上,相同的表数据和SQL语句,执行时正常的,几十毫秒,查询的时候也没有用索引,如图(正常服务器的):
其他单独条件的:
另外试下不用OR,用union看看效果
selectcount(*) from(SELECT COUNT(1) FROM kd_z_all_trade WHERE (plat_from_id=1 OR plat_from_id=16)) a
WHERE a.created>='2014-12-01 00:00:00' AND a.created<'2014-12-12 23:59:59' ;
你试一下