利用子查询优化
说明:
MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,此时使用limit m,n效率就非常的低下。想要提升性能要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写。
正例:
先快速定位需要获取的 id 段,然后再关联:
SELECT a.* FROM 表_1 a, (select id from 表_1 where 条件 LIMIT 100000,20 ) b where a.id=b.id
select id from 表_1 where 条件 LIMIT 100000,20可以利用覆盖索引快速查询出id,然后在根据id回表查询20个数据的具体值,这样就能大量的减少数据库的IO,从而大幅提升性能。