如下2个SQL语句 执行时间对比:
SELECT a.* from usertb a INNER JOIN (SELECT id from usertb ORDER BY uname limit 1000000,10) b WHERE a.id = b.id;
用时 77秒;
SELECT usertb.id,usertb.uname from usertb ORDER BY uname limit 1000000,10;
用时 109秒;
差距蛮大的,主要用到了 "延时关联" 技术 ;
针对limit 优化有很多种方式,
1 前端加缓存,减少落到库的查询操作
2 优化SQL
3 使用书签方式 ,记录上次查询最新/大的id值,向后追溯 M行记录。
4 使用Sphinx 搜索优化。
对于第二种方式 我们推荐使用"延迟关联"的方法来优化排序操作,何谓"延迟关联" :通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。