例如有两个字段id datatime若为这两个字段建立联合索引则在用条件   where id > 10 order by datatime desc 查询时会用到联合索引中的id 还是 id和datatime作为索引谢谢

解决方案 »

  1.   

    可以用 explain 看看会用到哪个索引,这个最准确。
    我直观的认为只会用到 id 索引。
      

  2.   

    嗯,补充说明我也直观的认为你的联合索引顺序是 id-datatime,而不是 datatime-id。
      

  3.   


    你的直观很对,确实只用了id可是为什么不是id和datatime都用?
      

  4.   

    为什么要一起用,这句sql的意思是取出id大于10的,datatime是是排序,数据库还是没那么笨要去浪费资源的,本人是菜鸟,我猜测(没看过mysql的源码)是使用b-tree索引,所以排序不是问题,没必要使用datatime索引
      

  5.   

    你是怎样建立索引的
    SHOW INDEX FROM tbl_name 
      

  6.   


    就是id为主键datatime为单列索引再无索引
      

  7.   


    不对,说错了,就是在两个字段上建立的联合索引,explain之后显示用了此联合索引,但是只用到了id,没有用datatime会不会是id索引后查出来的数据很少,所以没有用到datatime
      

  8.   

    如果用联合索引,由于你的order by字段是datetime,而where中的id是大于,所以还是要filesort,还不如只用id索引,再filesort排序。如果where中改成id=3,就是用的联合索引,而不必再去filesort
      

  9.   

    如果你有id ,inputtime ,id_inputtime 3个索引
    就要看你的条件语句了,
    如果你的inputtime 列足够简单,ID > 条件小 ,肯定走id,如果没有id索引,走id_inputtime ,反之走inputtime
    如果你的语句是id=1 and inputtime  =2 或者 id =2 order by inputtime  这样走id_inputtime看情况,mysql优化器自己会走的 ,要分析