扫盲 2026.10.01 14:38 35 次浏览 0 条评论

MySQL limit分页性能小知识

limit 分页写起来简单,数据一多就露馅。limit 100000,10 不是直接跳到第10万行,而是先把前面10万行读出来再丢掉,页码越大越慢,越翻越卡。

常用两个解法。一是游标法,记住上一页最后一条的 id,下次直接带着它往后取,只适合连续翻页。二是延迟关联,先在索引里拿主键,再回表取整行,少做很多无用功。

-- 慢:翻到后头要先读10万行再丢掉
SELECT * FROM article ORDER BY id LIMIT 100000, 10;

-- 快:游标法,带上上一页最后一条的id
SELECT * FROM article WHERE id > 100000 ORDER BY id LIMIT 10;

-- 延迟关联:先走索引拿id,再回表取整行
SELECT a.* FROM article a
JOIN (SELECT id FROM article ORDER BY id LIMIT 100000, 10) b
USING(id);

还有一点,order by 的字段最好有索引。没索引的话 MySQL 得先全表排一遍,排序本身就够慢了,比 limit 还拖后腿。

说点什么 0

行思随记

欢迎来到:行思随记