【翻译】查找和调优MySQL慢查询_MySQL

php中文网
发布: 2016-06-01 13:37:25
原创
1084人浏览过

bitsCN.com

翻译自:http://parand.com/say/index.php/2009/09/01/finding-and-fixing-slow-mysql-queries/bar.html

<font size="4" face="新宋体"></font>

火山翻译
火山翻译

火山翻译,字节跳动旗下的机器翻译品牌,支持超过100种语种的免费在线翻译,并支持多种领域翻译

火山翻译 193
查看详情 火山翻译

<font size="4" face="新宋体"></font>

编辑 my.cnf或者my.ini文件,去除下面这几行代码的注释:

log_slow_queries        = /var/log/mysql/mysql-slow.loglong_query_time = 2log-queries-not-using-indexes
登录后复制

这将使得慢查询和没有使用索引的查询被记录下来。

这样做之后,对mysql-slow.log文件执行tail -f命令,将能看到其中记录的慢查询和未使用索引的查询。

<font size="4" face="新宋体"></font>

<font size="4" face="新宋体"></font>

<font size="4" face="新宋体"></font>

<font size="4" face="新宋体"></font>

随便提取一个慢查询,执行explain:

explain low_query
登录后复制

<font size="4" face="新宋体">你将看到下面的结果:</font>

+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+ <br>| id | select_type | table               | type | possible_keys | key  | key_len | ref  | rows | Extra       | <br>+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+ <br>|  1 | SIMPLE      | some_table          | ALL  | NULL          | NULL | NULL    | NULL |  166 | Using where | <br>+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+

注意上面的rows和key列。rows显示该查询影响了多少行记录,我们不想让这个值太大。key显示用了哪个索引,为NULL时表示查询未用任何索引。

如果想让查询更快,你或许需要为某些列增加索引:

CREATE INDEX myapp_mytable_myfield_idx on myapp_mytable(myfield);
登录后复制
<font size="4" face="新宋体"></font>
登录后复制
<font size="4" face="新宋体"></font>
登录后复制
<font size="4" face="新宋体"></font>
登录后复制
<font size="4" face="新宋体">除了配置mysql配置文件来实现记录慢查询外,还有下面的方法可以记录慢查询:</font>
登录后复制
SELECT t.TABLE_SCHEMA AS `db`,t.TABLE_NAME AS `table`,s.INDEX_NAME AS `index name`,s.COLUMN_NAME AS `FIELD name`,s.SEQ_IN_INDEX `seq IN index`,s2.max_columns AS `# cols`,s.CARDINALITY AS `card`,t.TABLE_ROWS AS `est rows`,ROUND(((s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) * 100), 2) AS `sel %`FROM INFORMATION_SCHEMA.STATISTICS sINNER JOIN INFORMATION_SCHEMA.TABLES t ON s.TABLE_SCHEMA = t.TABLE_SCHEMA AND s.TABLE_NAME = t.TABLE_NAMEINNER JOIN (SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, MAX(SEQ_IN_INDEX) AS max_columnsFROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_SCHEMA != 'mysql' GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME ) AS s2 ON s.TABLE_SCHEMA = s2.TABLE_SCHEMA AND s.TABLE_NAME = s2.TABLE_NAME AND s.INDEX_NAME = s2.INDEX_NAMEWHERE t.TABLE_SCHEMA != 'mysql' /* Filter out the mysql system DB */AND t.TABLE_ROWS > 10 /* Only tables with some rows */AND s.CARDINALITY IS NOT NULL /* Need at least one non-NULL value in the field */AND (s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) < 1.00 /* unique indexes are perfect anyway */ORDER BY `sel %`, s.TABLE_SCHEMA, s.TABLE_NAME /* DESC for best non-unique indexes */LIMIT 10;
登录后复制
bitsCN.com
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号