MySQL query optimizer

mysql 的性能瓶颈 mysql性能瓶颈是什么_mysql


MySQL 常见的瓶颈

1.CPU:CPU在饱和的时候一般发生在,数据装入内存或者从磁盘上读取数据的时候。
2.IO:磁盘I/O瓶颈发生在装入的数据远大于内存容量的时候。
3.服务器硬件的性能瓶颈:top,free,iostat和vmstat来检查系统性能

Explain

是什么?
使用explain关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理你的SQL语句的。可以分析你的查询语句的结构以及性能的瓶颈。

能干嘛?
1.表的读取顺序。
2.数据读取的操作类型。
3.那些索引可以使用。
4.那些索引实际被使用。
5.表之前的引用。
6.每张表有多少行被优化器查询。

怎么玩?
Explain + SQL语句。

执行计划包含的信息:

mysql 的性能瓶颈 mysql性能瓶颈是什么_子查询_02

各个字段的解释:

id

select查询的序列号,表示查询中执行select的子句或操作表的顺序。

三种情况:

1.id相同,执行顺序由上至下。

mysql 的性能瓶颈 mysql性能瓶颈是什么_sql_03


2.id不同,如果是子查询id的序号会递增,id值越大优先级越高,越先先被执行。

mysql 的性能瓶颈 mysql性能瓶颈是什么_mysql_04


3.id相同不同,同时存在。

mysql 的性能瓶颈 mysql性能瓶颈是什么_mysql 的性能瓶颈_05

select_type

有哪些type:

mysql 的性能瓶颈 mysql性能瓶颈是什么_sql_06


是什么:用来分别查询的类型,主要用于区别普通查询、联合查询、子查询等

1.simple:简单的select查询,查询中不包含子查询或者union。
2.primary:查询中包含任何复杂的子部分,最外层查询的标记。
3.subquery:在select或者where中包含子查询。
4.derived:在from列表中包含子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放在临时表里。
5.union:若第二个select出现在union之后,则标记为union;若union包含在from子句的子查询中,外层select将标记为derived
6.union result:从union表获取结果的select。

table

显示这一行的数据是关于那张表。

type

mysql 的性能瓶颈 mysql性能瓶颈是什么_sql_07


mysql 的性能瓶颈 mysql性能瓶颈是什么_子查询_08

possible_keys

显示可能应用在这张表中的索引。查询涉及到字段上若存在的索引,则该索引将被列出,但不一定被查询实际使用

key

实际使用的索引,如果为null则没有使用索引。

key_len

mysql 的性能瓶颈 mysql性能瓶颈是什么_子查询_09

ref

mysql 的性能瓶颈 mysql性能瓶颈是什么_mysql_10

rows

mysql 的性能瓶颈 mysql性能瓶颈是什么_子查询_11

Extra

mysql 的性能瓶颈 mysql性能瓶颈是什么_数据库_12