mysql 对于大家来说都是不陌生的,也和我们的工作息息相关,一个好的程序员,mysql 优化也是其必备的知识之一。

首先,我们先来学习一下查看mysql 命令的执行的频率。show status 命令是我们必须了解的命令。这个命令·用来查看各种sql 执行的频率。
show [session|global] status
session : 表示当前连接会话的执行各种命令的频率
global:自数据库上次启动至今的统计结果。

左边就是执行的语句类型,value 表示执行的次数
常见的几种类型解析:
Com_xxx表示每一个xxx 语句执行的次数
Com_select :表示操作select 语句查询的次数
Com_insert:表示操作insert 语句的次数

Com_commit:表示事务提交情况
Com_rollback:表示事务回滚的情况
connections:表示试图连接Mysql 服务器的次数
Update:服务器工作的时间
Show_queries:慢查询的次数

一下存在几个只针对InnoDB 存储引擎的:
Innodb_rows_read : select 查询返回的行数
Innodn_rows_insert: 执行插入操作插入的行数
Innodb_rows_update :执行更新操作更新的行数
Innodb_rows_deleted:执行deleted 操作删除的行数

1、explain 命令可以查看执行的sql 语句使用的类型
使用explain 命令结果的参数:

mysql> explain select * from servers;
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | servers | ALL  | NULL          | NULL | NULL    | NULL |    1 | NULL  |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
1 row in set (0.03 sec)

type:表示的该查询的连接类型,他的类型有:
最为常见的扫描方式有:
system:系统表,少量数据,往往不需要进行磁盘IO;
const:常量连接;
eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描;
ref:非主键非唯一索引等值扫描;
range:范围扫描;
index:索引树扫描;
ALL:全表扫描(full table scan);

性能从上到下变一次变差;
system > const>er_ref > ref > range>index > all
2、当时用explain 还没分析出问题,需要使用show profiles 命令继续分许
(1)查看数据库是否支持show profile,mysql 5.0 版本之后就已经支 持了:

mysql> select @@have_profiling;+------------------+| @@have_profiling |+------------------+| YES              |+------------------+1 row in set

(2)查看是否开启了profile ,默认是关闭的

mysql> select @@profiling;+-------------+| @@profiling |+-------------+|           0 |+-------------+1 row in set

(3)开启profile

mysql> set profiling=1;
Query OK, 0 rows affected

(4)使用show profiles 命令查看执行的sql 命令的情况,和查看sql 执行的时间

mysql> show profiles;
+----------+----------+------------------------+
| Query_ID | Duration | Query                  |
+----------+----------+------------------------+
|        1 | 0.000294 | select @@profiling     |
|        2 | 0.000697 | select * from products |
+----------+----------+------------------------+

(5)如果需要分析query_id=2 的sql 语句:

mysql> show profile for query 2-> ;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000106 |
| checking permissions | 1.3E-5   |
| Opening tables       | 8.3E-5   |
| init                 | 1.2E-5   |
| System lock          | 1.7E-5   |
| optimizing           | 7E-6     |
| statistics           | 3.3E-5   |
| preparing            | 1.7E-5   |
| executing            | 5E-6     |
| Sending data         | 0.000208 |
| end                  | 9E-6     |
| query end            | 1.6E-5   |
| closing tables       | 1.3E-5   |
| freeing items        | 0.000134 |
| cleaning up          | 2.7E-5   |
+----------------------+----------+

15 rows in set

重点查看Sending data ,因为这个状态表示的是线程访问数据到将数据返回到客户端,
然后可以继续分许all、cpu 、block io、context switch 、page fault;

比如查看cpu:

mysql> show profile cpu for query 2
;
+----------------------+----------+----------+------------+
| Status               | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| starting             | 0.000106 | 0        | 0          |
| checking permissions | 1.3E-5   | 0        | 0          |
| Opening tables       | 8.3E-5   | 0        | 0          |
| init                 | 1.2E-5   | 0        | 0          |
| System lock          | 1.7E-5   | 0        | 0          |
| optimizing           | 7E-6     | 0        | 0          |
| statistics           | 3.3E-5   | 0        | 0          |
| preparing            | 1.7E-5   | 0        | 0          |
| executing            | 5E-6     | 0        | 0          |
| Sending data         | 0.000208 | 0        | 0          |
| end                  | 9E-6     | 0        | 0          |
| query end            | 1.6E-5   | 0        | 0          |
| closing tables       | 1.3E-5   | 0        | 0          |
| freeing items        | 0.000134 | 0        | 0          |
| cleaning up          | 2.7E-5   | 0        | 0          |
+----------------------+----------+----------+------------+
15 rows in set

有关es 对象池的
https://dandelioncloud.cn/article/details/1527180781894254593

mysql优化分析expalian和show profiles相关推荐

  1. Mysql:优化分析(值得深思)

    Mysql优化分析 Mysql作为现在的主流关系型数据库,在优化上值得深思啊! 不能只停留在如何使用Mysql,而不去思考如何优化的问题啊. 在谈到Mysql优化方面,Mysql在这方面有专门的文档说 ...

  2. MySQL性能分析工具的使用:慢查询日志、EXPLAN的使用、分析优化器执行计划:trace、MySQL监控分析视图-sys schema

    文章目录 1.数据库服务器的优化步骤 2.查看系统性能参数 2.1 语法 2.2 常用参数 3.统计SQL的查询成本:last_query_cost 4.定位执行慢的SQL:慢查询日志 4.1 慢查询 ...

  3. MySQL第12天:MySQL索引优化分析之性能优化案例实践

    MySQL索引优化分析之性能优化案例实践 执行计划中各select_type含义可以看:MySQL第11天:MySQL索引优化分析之性能分析 https://weibo01.blog.csdn.net ...

  4. MySQL第11天:MySQL索引优化分析之性能分析

    MySQL索引优化分析之性能分析 一.MySQL Query Optimizer 二.MySQL常见瓶颈 三.Explain(执行计划) 1.什么是执行计划?          2.执行计划能干什么? ...

  5. MySQL第10天:MySQL索引优化分析之索引介绍

    MySQL索引优化分析之索引简介 1.索引是什么? 2.索引优势.劣势 3.索引分类.基本语法 4.索引结构 5.哪些情况需要创建索引? 6.哪些情况不需要创建索引? ---------------- ...

  6. MySQL第9天:MySQL索引优化分析之join查询

    MySQL索引优化分析之join查询 #编写时间:2017.3.12 #编写地点:广州 常见join查询: 1.SQL执行顺序:手写.机读.总结 (1)手写 (2)机读 (3)总结 2.join图 3 ...

  7. MySQL第8天:MySQL索引优化分析之SQL慢

    MySQL索引优化分析之SQL慢 #编写时间:2017.3.11 #编写地点:广州 性能下降SQL慢,执行时间长,等待时间长的原因有: (1)查询语句写的不合理 (2)索引失效:单值索引.符合索引 ( ...

  8. mysql如何建立索引workbench_如何对MySQL索引进行优化分析

    为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引, ...

  9. MySQL索引分析和优化(转)

    MySQL索引分析和优化(转) 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记 录,直至找到符 ...

最新文章

  1. strstr函数头文件_C语言(函数)学习之strstr strcasestr
  2. [学习笔记]最小圆覆盖
  3. python 远程控制win10界面切换_Python3如何实现Win10桌面自动切换
  4. 域名抢注之乱象:投资的暴利,管理的漏洞
  5. IIS报错,App_global.asax.×××.dll拒绝访问
  6. 【bzoj5064】B-number 数位dp
  7. jwt令牌_JWT令牌的秘密轮换
  8. local variable 'xxx' referenced before assignment
  9. 诗与远方:无题(二十五)
  10. Go 的新关键字 any 是个啥
  11. python函数多次调用内存溢出_关于循环多次(具体160次左右)获取同一个句柄对象,不同实例,内存溢出的问题。...
  12. SqlServer中 SET DATEFIRST
  13. 使用cmd命令进行运行java(cmd命令输出Hello word)
  14. Facebook采取赤裸裸抄袭的战略 争夺用户
  15. 金融计算机求log,cfa计算器怎么算对数
  16. win10系统启动wifi服务器,windows10系统下开启wifi共享的两种方法
  17. 关于Java的二十篇技术热文
  18. learn-motrix and 百度网盘
  19. “熊孩子”乱敲键盘就攻破了Linux桌面,大神:17年前我就警告过你们
  20. 腾讯云HTTPDNS 将上线微信服务平台!

热门文章

  1. word 通过宏选中所有表格
  2. hoRTC网络视频加密电话原理测试版使用说明
  3. 【人工智能】新工匠精神:人工智能挑战下如何成为稀缺人才
  4. 字典树查询时间复杂度
  5. 大唐无双关闭服务器是内部消息吗,谈谈《大唐无双》这款曾经月搬5000的老游戏...
  6. 三网大数据 运营商大数据——精准客源
  7. 【Arduino】一个按键开关控制RGB音乐彩灯(蜂鸣器播放音乐+按键控制播放暂停+RGB彩灯随音乐节奏跳动)
  8. tornado中的协程是如何工作的
  9. Java阻塞队列的简单实现
  10. Admin5论坛营销插件