EXPLAIN SELECT Id,Releasedate,title,fans,cilian FROM Contenta ORDER BY fans desc,lian desc LIMIT 1,35 (第一页)EXPLAIN SELECT Id,Releasedate,title,fans,cilian FROM Contenta ORDER BY fans desc,lian desc LIMIT 35,35(第二页)EXPLAIN SELECT Id,Releasedate,title,fans,cilian FROM Contenta ORDER BY fans desc,lian desc LIMIT 70,35(第三页)
。。总数据近30万,总页数7000多页,在低于1000页时,EXPLAIN 都显示基于这俩字段的排序索引在起作用。ALTER TABLE Contenta ADD INDEX Contenta_fans_lian_DESC (date,lian desc); (就是这个索引)但是当超过1500页后,其后的所有页的EXPLAIN都提示Using filesort,那个索引就不起作用了,这是弄那样呢?为什么呢??以下是2000页之前的一些EXPLAIN结果,后面还有50000也呢唉。。索引为什么不工作了呢?

解决方案 »

  1.   


    分页+索引,在分页越往后,就会越慢,有可能导致mysql直接选择 表扫描。
      

  2.   


    @不想长大啊         那么有没有解决办法呢?你可以先强制 sql使用 索引
      

  3.   

    ORDER BY fans desc,lian desc 
    ALTER TABLE Contenta ADD INDEX Contenta_fans_lian_DESC (date,lian desc); 索引与排序列根本不一样
      

  4.   

    ORDER BY fans desc,lian 这个对应的索引是哪个?
    以文本方式贴出 
    explain select ...
    show index from ..
    以供分析。
      

  5.   

    很简单,先取对应页的主键,再通过主键检索数据
    SELECT Id,Releasedate,title,fans,cilian FROM Contenta
    WHERE id in ( SELECT * FROM(
    SELECT Id FROM Contenta  ORDER BY fans desc,lian desc LIMIT 70,35
    )A)