Mysql性能分析
GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "123456" WITH GRANT OPTION;
flush privileges
一:Mysql中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,
为客户端请求的Query提供他认为最优的执行计划(他认为最优的数据检索方式,但不见得是DBA认为最优的,这部分最耗费时间)
二:当客户端向Mysql请求一条Query,命令解析器模块完成请求分类,区别出是SELECT并转发给Mysql Query Optimize时,
并对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件,结构调整等,然后分析Query中的Hint信息(如果
有)看显示Hint信息是否可以完全确定该Query的执行计划,如果没有Hint或Hint信息还不足以完全确定执行计划,则会读取所
涉及对象的统计信息,根据Query进行写相应的计算分析,然后再得出最后的执行计划,
Mysql常见的瓶颈
一:CPU,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候
二:IO,磁盘IO瓶颈发生在装入数据远大于内存容量的时候
三:服务器硬件的性能瓶颈,top,free,iostat和vmstat来查看系统的性能状态。
Explain关键模拟优化器
怎么玩:Explain +SQL语句
执行计划包含的信息
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/702e22e8297f9ec5769ff105e14940a8.png#pic_center)
字段解释:
一:id 属性
id:select查询的序列号,包含一组数字,标识查询中执行select子句或操作表的顺序。
**三种情况:**
表的读取情况
**1.1:id相同:执行的顺序由上到下**
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/710cffca84f7685b765ed2f8c1bf6dab.png#pic_center)
**1.2:id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行**
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eab9a1209f314768b5955362422ed47c.png#pic_center)
**1.3:id相同于不同,同时存在**
id如果相同,可以认为是一组,从上往下顺序执行;
在所有组中,id值越大,优先级越高,越先被执行;
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d8aa9f44353aa7ec9ca0ea764cda97bd.png#pic_center)
二:数据读取操作的操作类型 select_type 属性
**select_type有哪些类型**
一:SIMPLE: 简单的select查询,查询中不包含子查询或者UNION;
二:PRIMARY: 查询中若包含任何复杂的子部分,最外层查询则被标记为
三: SUBQUERY:在SELECT或WHERE列表中包含子查询
四:DERIVED: 在FROM列表中包含的子查询被标记为DERIVED(衍生),mysql会递归这姓这些子查询,把结果放在临时表里。
五:UNION: 若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,
外层SELECT将被标记为:DERIVED
六:UNION RESULT: 从UNION表获取结果的SELECT
查询的类型,主要是用于区别,普通查询,联合查询,子查询等的复杂查询
三:table属性
显示这一行的数据是关于哪张表的。
四:type 属性 访问类型排序