msg表有以下列
id  自增长 key
timing int型unixtimestamp
uid  用户id索引建了2个
Alter table msg ADD INDEX idx1(uid,timing);
Alter table msg ADD INDEX idx2(timing);当我执行
explain  select * from msg where uid =111 order by timing desc 的时候,
期望使用到idx1中的uid,timing 但是结果是只用到了uid 难道order by 不用索引吗?(为了测试 表中插入了10万行 timing的值也尽量随机分布了)

解决方案 »

  1.   

    explain的结果肯定是使用了索引,而且是idx1,而不是idx2。
    结果确实只用到了uid,然后根据timing来进行排序,这个是没问题的。
    LZ可以把explain的结果贴出来。
      

  2.   

    为什么会没有用到timing呢 explain的结果就是用idx1 但只有uid的四个字节
      

  3.   

    楼主贴出你的explain结果出来看看呀。
      

  4.   

    恩 explain如下
    explain select * from msg where uid =111 order by timing descid 1
    select_type SIMPLE
    table  msg
    type  ref
    possible_keys         idx1
    key  idx1
    key_len  4
    ref  const
    rows  202350
    Extra Using where
      

  5.   

    你EXPLAIN的结果不是显然,用的是索引idx1吗? 这不是很正确吗?
      

  6.   

    只用到了idx1的4个字节 也就是uid   
    timing没用到
      

  7.   

    key_len         4使用索引前4个字节就可以定位所有得结果集了order by后面得结果集又不需要过滤 ,所有只用前四个字段就够了