EXPLAIN SELECT * from test2 WHERE   customer_id=1 and content>'a'  ORDER BY customer_id ,content
customer_id和content都是索引列,分开的为什么这种情况下还会出现using filesort呢? where里面的字段不是已经包含了orderby字段吗?谢谢

解决方案 »

  1.   

    mysql 一个查询只会使用一个索引。你的这个查询,且不说sql语句文本比较大小意义的问题,光说语句本身,查询使用了 customer_id 这个的索引,因为只会使用一个索引,所以,针对另一个字段content 排序,用索引就无法完成了,就会用filesort排序。如果想用索引排序,那就 建个索引 , 比如执行 CREATE  index tt ON test2 (customer_id, content); 这样,就会用索引排序了。
      

  2.   

    将content后面改成等于号就不会出现filesort了,msyql5之后内部是会有个索引合并的算法,不会只使用一个索引,所以我还是不明白
      

  3.   

    创建联合索引试试。
    customer_id和content
      

  4.   

    ORDER BY customer_id ,content
    用联合索引改用=后,因为是customer_id 和 content =配对,实际上都是使用了两个索引。