当前位置:  数据库>mysql

MySQL慢查询查找和调优测试

    来源: 互联网  发布时间:2014-10-07

    本文导语:  编辑 my.cnf或者my.ini文件,去除下面这几行代码的注释: 代码如下: log_slow_queries = /var/log/mysql/mysql-slow.log long_query_time = 2 log-queries-not-using-indexes 这将使得慢查询和没有使用索引的查询被记录下来。 这样做之后,对mysql-slow.log文...

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

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

这将使得慢查询和没有使用索引的查询被记录下来。
这样做之后,对mysql-slow.log文件执行tail -f命令,将能看到其中记录的慢查询和未使用索引的查询。
随便提取一个慢查询,执行explain:
代码如下:

explain low_query
 
你将看到下面的结果:
+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | some_table | ALL | NULL | NULL | NULL | NULL | 166 | Using where |
+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+
注意上面的rows和key列。rows显示该查询影响了多少行记录,我们不想让这个值太大。key显示用了哪个索引,为NULL时表示查询未用任何索引。
如果想让查询更快,你或许需要为某些列增加索引:
CREATE INDEX myapp_mytable_myfield_idx on myapp_mytable(myfield);
除了配置mysql配置文件来实现记录慢查询外,还有下面的方法可以记录慢查询:
代码如下:

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 s
INNER JOIN INFORMATION_SCHEMA.TABLES t ON s.TABLE_SCHEMA = t.TABLE_SCHEMA AND s.TABLE_NAME = t.TABLE_NAME
INNER JOIN (
SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, MAX(SEQ_IN_INDEX) AS max_columns
FROM INFORMATION_SCHEMA.STATISTICS
WHERE 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_NAME
WHERE 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;

    
 
 

您可能感兴趣的文章:

  • mysql data文件夹位置查找
  • mysql 数据表中查找重复记录
  • mysql实现根据多个字段查找和置顶功能
  • mysql unix准换时间格式查找指定日期数据代码
  • 一台网络服务器,做web服务,有tomcat5.0, proftpd.mysql.经常down机,从哪些地方入手查找原因?
  • MySQL 查找价格最高的图书经销商的几种SQL语句
  • MySQL优化之如何查找SQL效率低的原因
  • 测试php连接mysql是否成功的代码分享
  • James+JavaMail+MySQL WebMail测试
  • 请各位帮忙测试一个MySQL管理软件
  • 经测试最好用的mysql密码忘记的解决方法
  • MySQL与MSSQl使用While语句循环生成测试数据的代码
  • mysql中索引使用不当速度比没加索引还慢的测试
  • php中mysql连接和基本操作代码(快速测试使用,简单方便)
  • MySQL实现差集(Minus)和交集(Intersect)测试报告
  • 用VirtualBox构建MySQL测试环境的笔记
  • mysql5.0入侵测试以及防范方法分享
  • mysql 动态生成测试数据
  • MySQL压力测试工具 mysqlslap
  • MySQL随机查询记录的效率测试分析
  • MySQL循环语句之while循环测试
  • MySQL一个索引最多有多少个列?真实的测试例子
  • 如何测试mysql触发器和存储过程
  • mysql中迅速插入百万条测试数据的方法
  • Mysqlslap MySQL压力测试工具 简单教程
  • MySQL基准测试套件Benchmark安装DBI组件过程分享
  • MySQL两种表存储结构MyISAM和InnoDB的性能比较测试
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Mysql查询错误:ERROR:no query specified原因
  • mysql查询语句通过limit来限制查询的行数
  • 操作系统 iis7站长之家
  • mysql 开启慢查询 如何打开mysql的慢查询日志记录
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • mysql 设置查询缓存
  • Mysql Select查询执行流程介绍及实例
  • MySQL 慢查询监控器 Anemometer
  • mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
  • MySQL并行查询引擎 Shard-Query
  • Mysql大表查询优化技巧总结及案例分析
  • 清空mysql 查询缓存的可行方法
  • 在C中如何判断从mysql中查询到的NULL值?
  • php mysql查询指定范围内日期
  • mysql取当前时间与当前日期查询代码
  • MySQL运行状况查询方式介绍
  • 把mysql查询结果保存到文件的shell脚本
  • mysql 查询表中平均分最低的班级
  • mysql 跨表查询、更新、删除示例
  • mysql仿oracle的decode效果查询
  • php查询时间段 mysql时间查询
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • php安装完成后如何添加mysql扩展
  • MySQL 重装MySQL后, mysql服务无法启动
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • MySQL Workbench的下载安装与使用教程
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3