大家好,我是BiggerBoy。在之前的文章《MySQL 深分页性能优化终极指南:告别慢查询的 5 大方案》中,我们总结了MySQL深分页的五大解决方案(延迟关联、游标分页、预计算、索引覆盖索引、业务妥协)。今天,我们聚焦其中最经典的延迟关联(Deferred Join),深入剖析它的原理、适用场景和性能极限,让你彻底掌握这个“低调的优化杀手”! 假设有一个订单表 MySQL的真实操作: 性能瓶颈: 优化后的SQL: 分两步走: 本质:将 “先拿数据再筛选” 变为 “先筛选再拿数据”,避免无效数据搬运! 性能差距:130倍! 执行 关键点: 索引设计:联合索引 下期预告: 本文重点: 互动问题: 如果对你有用,请点赞、转发支持一下吧!谢谢啦! 关注【BiggerBoy】公众号获取更多技术干货!
引言:从“知其然”到“知其所以然”
一、延迟关联的本质:少干活,多偷懒
1.1 传统分页的“苦力模式”
orders
(500万数据),执行以下深分页查询:SELECT * FROM orders ORDER BY create_time DESC LIMIT 100000, 10;
create_time
有索引,先扫描索引树,找到前 100010 行的create_time
值。SELECT *
)。
1.2 延迟关联的“聪明模式”
SELECT * FROM orders
INNER JOIN (
SELECT id FROM orders
ORDER BY create_time DESC
LIMIT 100000, 10
) AS tmp USING(id);
id
,利用覆盖索引(create_time + id
)直接完成排序和筛选,无需回表。id
。id
回表查询,直接走主键索引,10次快速磁盘I/O。
二、性能提升的关键:四个核心优化点
2.1 覆盖索引:拒绝回表
id
、create_time
)全部在某个二级索引中,MySQL可直接通过索引完成查询,无需访问主键索引。idx_create_time_id(create_time, id)
。EXPLAIN
结果中会出现 Using index
(索引覆盖)。2.2 主键索引:精准定位
id
(主键)访问数据,主键索引的B+树高度最低,查询速度最快。2.3 减少排序:索引的有序性
ORDER BY
字段有索引,MySQL直接按索引顺序读取数据,无需内存排序(Filesort)。2.4 数据传输:化繁为简
id
到外层查询,而非100010行完整数据,减少临时表和网络传输开销。
三、延迟关联的“性能天花板”
3.1 极限测试:100万Offset的对比
-- 传统分页(自杀式)
SELECT * FROM orders ORDERBY create_time LIMIT 1000000, 10;
-- 平均耗时:15.8秒
-- 延迟关联(优雅版)
SELECT * FROM orders
INNERJOIN (
SELECT id FROM orders
ORDERBY create_time LIMIT 1000000, 10
) AS tmp USING(id);
-- 平均耗时:0.12秒 3.2 性能公式
耗时 ≈ (Offset + Limit) * 单次回表时间
耗时 ≈ Limit * 单次回表时间
四、延迟关联的“使用禁区”
4.1 不适用场景
ORDER BY
字段无索引,子查询需全表扫描 + 内存排序,性能可能更差。4.2 如何判断是否生效?
EXPLAIN
:
Extra
列应有 Using index
;type
应为 eq_ref
(主键查询)。
五、实战进阶:复杂查询如何用延迟关联?
5.1 带WHERE条件的分页
SELECT *FROM orders
INNERJOIN (
SELECT id FROM orders
WHERE user_id =123 -- 过滤条件
ORDERBY create_time DESC
LIMIT 100000, 10
) AS tmp USING(id);
user_id
和create_time
建立联合索引 idx_user_create_time(user_id, create_time, id)
。user_id
)和排序字段(create_time
)都在索引中。5.2 多字段排序
SELECT * FROM orders
INNER JOIN (
SELECT id FROM orders
ORDER BY create_time DESC, id DESC -- 多字段排序
LIMIT 100000, 10
) AS tmp USING(id); idx_create_time_id(create_time, id)
。
六、总结:延迟关联的哲学
id
实现覆盖;
《延迟关联也救不了的深分页?试试这三大“杀手锏”!》
(游标分页 vs 预计算 vs 业务降级,谁才是终极方案?)
✅ 延迟关联的底层原理拆解
✅ 性能优化的四大核心逻辑
✅ 复杂查询的实战用法
✅ 使用禁区与效果验证
你在使用延迟关联时踩过哪些坑?欢迎留言分享!

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、DIY体验、720全景展厅及3D虚拟仿真)、移动端应用(手机站、APP开发)、微信定制开发(微信官网、微信商城、企业微信)、微信小程序定制开发等一系列互联网应用服务。