一、问题场景

-- 数据量1000万,翻到第100万条
SELECT * FROM `order` LIMIT 1000000, 20;
-- 会扫描前100万条再丢弃,非常慢

二、优化方案

方案一:子查询定位

SELECT * FROM `order`
WHERE id > (SELECT id FROM `order` ORDER BY id LIMIT 1000000, 1)
ORDER BY id LIMIT 20;

方案二:记录上次位置(推荐)

-- 第一次请求
SELECT * FROM `order` ORDER BY id LIMIT 20;

-- 后续请求带上上次的最大 id
SELECT * FROM `order` WHERE id > #{lastId} ORDER BY id LIMIT 20;

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!

更多推荐