为什么? 要是我不在tab1的rank上建索引, 在select时用:
select * from tab1 where rank<100 order by rank, mysql是否足够聪明把rank当索引用?

解决方案 »

  1.   

    http://www.eaoo.com/design/list.asp?classid=2&Nclassid=9
      

  2.   

    可是我用explain看, 方法1比方法2好呀. 真是郁闷
    方法1: EXPLAIN select * from tab1 where rank<100 limit 0,100
    table  type possible_keys  key  key_len  ref    rows  Extra  
    tab1  range   rank     rank    4    NULL     36  Using where 方法2: EXPLAIN select tab.* from tab1,top100 where top100.tab_id=tab1.id ORDER BY top100.rank
    table  type possible_keys  key  key_len  ref    rows  Extra  
    top100  ALL    tab_id   NULL   NULL   NULL     63  Using filesort 
    tab1  eq_ref   id      id    4  top100.tab_id  1   
      

  3.   

    方法1只有36 rows的tab1, 方法2虽然只有1 row的tab1, 却需要63 rows的top100 (因为top100里只有63条记录)
      

  4.   

    你不是说tab1有10000条记录吗?
    可是你的测试环境并不是这样啊,所以你的explain可能不大准确。不过我想问问xuzuning(唠叨),那方案二连接两个表所花的时间又怎么样计算呢?
    应该也是不小的花费吧。gz高手发言。
      

  5.   

    我的测试环境就是这样呀. 如果是row越少越好的话,我改用第一种方法了. 但是有些操作还是要很多row(比如上千)