借鉴网上的内容结合自己的实践与理解,整理如下:
- explain关键字可以模拟MySQL优化器执行SQL语句,可以很好的分析SQL语句或表结构的性能瓶颈。
- 例子: explain select * from student_course as sc left join student as stu on sc.student_id = stu.id where stu.id = ‘10001’
- id:选择标识符:
3.1 id如果相同,可认为是同一组,执行顺序从上到下
3,2 id值不同,如果是子查询,id的序号会递增,id的值越大优先级越高,越先被执行 - select_type:表示查询的类型
4.1 SIMPLE 简单的select查询,查询中不包含子查询或union查询。
4.2 PRIMARY 查询中若包含任何复杂的子部分,最外层查询为PRIMARY,也就是最后加载的就是PRIMARY。
4.3 SUBQUERY 在select或where列表中包含了子查询,就为被标记为SUBQUERY。
4.4 DERIVED 在from列表中包含的子查询会被标记为DERIVED(衍生),MySQL会递归执行这些子查询,将结果放在临时表中。
4.5 UNION 若第二个select出现在union后,则被标记为UNION,若union包含在from子句的子查询中,外层select将被标记为DERIVED。
4.6 UNION RESULT 从union表获取结果的select - table:输出结果集的表(如果有别名则显示别名)
- partitions:匹配的分区
- type:表示表的连接类型(查询所使用的访问类型),从最好到最差依次为:system>const>eq_ref>ref>range>index>ALL
- possible_keys:表示查询时,可能使用的索引,显示可能应用在表中的索引,可能一个或多个。查询涉及到的字段若存在索引,则该索引将被列出,但不一定被查询实际使用。
- key:表示实际使用的索引
- key_len:索引字段的长度 key_len显示的值为索引字段的最大可能长度,并非实际使用长度
- ref:列与索引的比较: 显示关联的字段,如果使用常数等值查询,则显示const,如果是连接查询,则会显示关联的字段。
- rows:扫描出的行数(估算的行数)
- filtered:按表条件过滤的行百分比
- Extra:执行情况的描述和说明
14.1 Using where:使用了where条件