【MySQL】 性能优化之 延迟关联
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,【背景】某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下。使用工具查看数据库正在执行的sql ,排在前面的大部分是:SELECT id, cu_id, name, info,
千家信息网最后更新 2025年02月01日【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安全错误
数据库的锁怎样保障安全
idea数据库生成对象
数据库无法删除或保存
视频播放服务器下载
cs服务器管理软件
浙江省互联网新科技
嵌入式软件开发信标题
南山区质量网络技术开发服务标准
邢台职业学院软件开发
网络安全的电子手抄报素材
数据库级别16状态5第一行
ie证书服务器安全例外
无法下载服务器问题是什么意思
长沙软件开发语言
服务器系统集成方案报价
答题软件开发实例
软件开发找哪个公司好
新手数据库
网络技术怎么开公司
百度在线网络技术和百度网讯
mirande数据库
知网上海互联网科技有限公司
广州天拓网络技术有限公司资料
0代码桌面软件开发
中职数据库应用学期教学总结
优化服务器是非法的吗
钉钉第三方软件开发教程
软件开发安全技巧
金融网络安全双循环
加快网络安全标准建设
长垣市有软件开发的吗