MySQL query optimizer
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语句。
执行计划包含的信息:
各个字段的解释:
id
select查询的序列号,表示查询中执行select的子句或操作表的顺序。
三种情况:
1.id相同,执行顺序由上至下。
2.id不同,如果是子查询id的序号会递增,id值越大优先级越高,越先先被执行。
3.id相同不同,同时存在。
select_type
有哪些type:
是什么:用来分别查询的类型,主要用于区别普通查询、联合查询、子查询等
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
possible_keys
显示可能应用在这张表中的索引。查询涉及到字段上若存在的索引,则该索引将被列出,但不一定被查询实际使用
key
实际使用的索引,如果为null则没有使用索引。
key_len
ref
rows
Extra