【MySQL】 性能优化之 延迟关联
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,【背景】某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下。使用工具查看数据库正在执行的sql ,排在前面的大部分是:SELECT id, cu_id, name, info,
千家信息网最后更新 2026年10月31日【MySQL】 性能优化之 延迟关联【背景】
某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下。使用工具查看数据库正在执行的sql ,排在前面的大部分是:
【分析】
针对limit 优化有很多种方式,
1 前端加缓存,减少落到库的查询操作
2 优化SQL
3 使用书签方式 ,记录上次查询最新/大的id值,向后追溯 M行记录。
4 使用Sphinx 搜索优化。
对于第二种方式 我们推荐使用"延迟关联"的方法来优化排序操作,何谓"延迟关联" :通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。
【解决】
根据延迟关联的思路,修改SQL 如下:
优化前

优化后:

优化后 执行时间 为原来的1/3 。
如果您觉得从这篇文章受益,可以赞助 北在南方 一瓶饮料 ^_^
某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下。使用工具查看数据库正在执行的sql ,排在前面的大部分是:
- SELECT id, cu_id, name, info, biz_type, gmt_create, gmt_modified,start_time, end_time, market_type, back_leaf_category,item_status,picuture_url FROM relation where biz_type ='0' AND end_time >='2014-05-29' ORDER BY id asc LIMIT 149420 ,20;
【分析】
针对limit 优化有很多种方式,
1 前端加缓存,减少落到库的查询操作
2 优化SQL
3 使用书签方式 ,记录上次查询最新/大的id值,向后追溯 M行记录。
4 使用Sphinx 搜索优化。
对于第二种方式 我们推荐使用"延迟关联"的方法来优化排序操作,何谓"延迟关联" :通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。
【解决】
根据延迟关联的思路,修改SQL 如下:
优化前
点击(此处)折叠或打开
- root@xxx 12:33:48>explain SELECT id, cu_id, name, info, biz_type, gmt_create, gmt_modified,start_time, end_time, market_type, back_leaf_category,item_status,picuture_url FROM relation where biz_type =\'0\' AND end_time >=\'2014-05-29\' ORDER BY id asc LIMIT 149420 ,20;
- +----+-------------+-------------+-------+---------------+-------------+---------+------+--------+-----------------------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-------------+-------+---------------+-------------+---------+------+--------+-----------------------------+
- | 1 | SIMPLE | relation | range | ind_endtime | ind_endtime | 9 | NULL | 349622 | Using where; Using filesort |
- +----+-------------+-------------+-------+---------------+-------------+---------+------+--------+-----------------------------+
- 1 row in set (0.00 sec)

优化后:
点击(此处)折叠或打开
- SELECT a.* FROM relation a, (select id from relation where biz_type ='0' AND end_time >='2014-05-29' ORDER BY id asc LIMIT 149420 ,20 ) b where a.id=b.id
- root@xxx 12:33:43>explain SELECT a.* FROM relation a, (select id from relation where biz_type ='0' AND end_time >='2014-05-29' ORDER BY id asc LIMIT 149420 ,20 ) b where a.id=b.id;
- +----+-------------+-------------+--------+---------------+---------+---------+------+--------+-------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-------------+--------+---------------+---------+---------+------+--------+-------+
- | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 20 | |
- | 1 | PRIMARY | a | eq_ref | PRIMARY | PRIMARY | 8 | b.id | 1 | |
- | 2 | DERIVED | relation | index | ind_endtime | PRIMARY | 8 | NULL | 733552 | |
- +----+-------------+-------------+--------+---------------+---------+---------+------+--------+-------+
- 3 rows in set (0.36 sec)

优化后 执行时间 为原来的1/3 。
如果您觉得从这篇文章受益,可以赞助 北在南方 一瓶饮料 ^_^
数据
关联
时间
查询
延迟
方式
排序
数据库
性能
居高不下
业务
书签
典型
前端
大部分
工具
很快
思路
方法
正在
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网加科技
百单网互联网科技有限公司
互联网科技名片
互联网新科技
天津市摩尔互联网科技
科技服务与互联网
互联网科技小贷
互联网高科技企业
互联网 科技服务平台
居家互联网科技有限公司
云创客互联网科技公司
彤创互联网科技有限公司
厦门千工互联网科技有限公司
互联网科技商业
华夏恒生互联网科技013171
合肥互联网科技公司公章图片
怎样加入科技互联网
上海互联网科技公司ppt
广西科技产业互联网是什么
银川新华互联网科技学校招聘
广州大一互联网络科技有限公司
互联网科技资迅
互联网科技视频
互联网金融监管科技
互联网系的金融科技公司
互联网为啥属于高科技
搜狐科技互联网
福州德业互联网科技
广东猫王互联网科技有限公司电话
武汉亿视互联网科技有限公司