解决方案 »

  1.   

    第一 查询的时候 可以 在 select后面加上 sql_no_cache 这样就可以保证不使用缓存第二 请问你的表是否做过分区?第三 贴出1月份和2月份的explain对比
      

  2.   


    1、试过加 sql_no_cache 不过好像没有作用 查过一次以后还是会快,所以只好每次执行,都重启一下mysql。
    2、没有做过表分区
    3、1月份
    2月份
    这样看来好像1月的查询没有使用到索引呢
      

  3.   

    注意一下where sdate>='2014-02-01' and sdate<='2014-02-28'; 的范围,当这个范围过大时,MYSQL认为大部分记录是符合条件的,则不会再走索引。
      

  4.   

    因为全表扫描的时候是顺序读取,是很好的IO读取方式而索引扫描在不是主键索引的时候,会先定位索引位置,根据索引定位到主键位置,最后得到具体的数据,这些IO都属于随机读取所以在扫描的数据很大的时候,有的时候全表扫描的效率比索引要好
      

  5.   

    1、mysql重启后,5.5版本及以下版本的innodb buffer是不缓存数据的,需要读一次数据,除非使用5.6版本
    2、可以试下ANALYZE TABLE
    3、如果不行,加上FORCE index试试