一条查询语句:
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,可是并没有查询字段啊,不解啊?

解决方案 »

  1.   

    看一下三条语句的 explain select ... 贴出以供分析。
    估计是使用了不同的索引。而索引信息可能不准确导致的。 
      

  2.   

     
    全部条件的:是没有用索引,但是强制索引后也不正常啊,我在另一台服务器上,相同的表数据和SQL语句,执行时正常的,几十毫秒,查询的时候也没有用索引,如图(正常服务器的):
    其他单独条件的:
      

  3.   

    plat_from_id和created建个索引试试
    另外试下不用OR,用union看看效果
      

  4.   

    写个子查询就完了。告你
    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' ;
    你试一下