Mysql实例MySQL延迟关联性能优化方法
《Mysql实例MySQL延迟关联性能优化方法》要点: 【背景】MYSQL教程 ? 某业务数据库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; 表的数据量大致有36w左右,该sql是一个非常典型的排序+分页查询:order by col limit N,OFFSET M,MySQL 执行此类sql时需要先扫描到N行,然后再去取 M行.对于此类大数据量的排序操作,取前面少数几行数据会很快,但是越靠后,sql的性能就会越差,因为N越大,MySQL 需要扫描不需要的数据然后在丢掉,这样耗费大量的时间. 【分析】MYSQL教程 针对limit 优化有很多种方式, 【解决】MYSQL教程 根据延迟关联的思路,修改SQL 如下:MYSQL教程 优化前 root@xxx 12:33:48>explain SELECT id,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) 其执行时间:MYSQL教程 优化后: 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,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) 执行时间:MYSQL教程 优化后 执行时间 为原来的1/3 .MYSQL教程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- MYSQL教程sysbench对mysql压力测试的详细教程
- Mysql学习mysql中索引使用不当速度比没加索引还慢的测试
- MYSQL数据库MySQL5.6.31 winx64.zip 安装配置教程详解
- Mysql应用MySql delimiter的作用是什么
- Mysql应用mysql 常用命令集锦(Linux/Windows)
- 在MySQL表中查找“异国情调”值
- 查询最近10天开户的银行卡的信息,利用datediff()函数,计
- Mysql应用linux下mysql5.7.19(tar.gz)安装图文教程
- Mysql应用windows2008 64位系统下MySQL 5.7绿色版的安装教程
- Mysql必读Suse Linux 10中MySql安装与配置步骤