MySQL使用 limit 分页:
limit m,n
其中,m是偏移量,n是要查询的数量。
当偏移量m过大的时候,查询效率会很低。因为MySQL是先查出m+n个数据,然后抛弃掉前m个数据。
优化方法:可以通过子查询查出查出目标数据集合的第一个数据所在的行,然后用 >= 操作。
如下:
SELECT * FROM articles WHERE id >= (SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
子查询在主键id上先查到第一个目标数据的id,然后外层查询根据这个id,使用 >= 方式获取10条数据。
因为主键id有索引,所以子查询速度很快。
对于有大数据量的mysql表来说,使用LIMIT分页存在很严重的性能问题。
优化思想:避免数据量大时扫描过多的记录
为了保证index索引列连续,可以为每个表加一个自增字段,并且加上索引。