分页SQL语句优化
原SQL语句:
SELECT * FROM test FORCE INDEX(idx_m_n) WHERE m=1 ORDER BY n LIMIT 1000,10;条件:
Test表为InnoDB存储引擎,主键为BIGINT类型的ID字段,二级索引:idx_m_n(m,n)优化后为:请简述优化的理由:
sql优化分页

解决方案 »

  1.   

    我的想法是 先做limit 再排序,但是这样做会不会和原始的结果有所出入。
    因为原始的是先以n排序 再limit 
    如果这种思路不对,那么还有哪里需要做出优化??
      

  2.   

    把force去掉吧 这么简单的语句 要相信MySQL能够做出正确的判断,只要把选择权交还给MySQL,这个语句基本上就不用进一步优化了 因为MySQL会自动根据数据量和索引分布情况来做出较优的选择
    如果去掉force之后的速度不满足要求,那可能是数据量过大或者架构设计有问题~~~
      

  3.   

    二级索引已经能完全覆盖查询条件了  可以了已经如果非要在优化 可以
    select T1.* from test T1,(
    SELECT id FROM test FORCE INDEX(idx_m_n) WHERE m=1 ORDER BY n LIMIT 1000,10
    )T2
    where T1.id=T2.id
      

  4.   

    explain + profiling
    自己动手,丰衣足食
      

  5.   

    explain  SELECT * FROM test FORCE INDEX(idx_m_n) WHERE m=1 ORDER BY n LIMIT 1000,10;
    分析一下