使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
通过Explain,我们可以获取以下信息:
表的读取顺序
哪些索引可以使用
数据读取操作的操作类型
哪些索引被实际使用
表之间的引用
每张表有多少行被物理查询
2. 怎样获取SQL语句的执行计划? Explain + SQL语句 举例 EXPLAIN SELECT * FROM USER; 执行计划所包含的信息 3. 执行计划各个名词字段的解释 3.1 Idselect查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。
三种情况 (1) ID相同id相同,执行顺序由上至下。
如果是子查询,id的序号会递增。id越大优先级越高,越先被执行。
id如果相同,可以认为是一组,从上往下顺序执行。在所有组中,id值越大,优先级越高,越先执行。
id号每个号码,表示一趟独立的查询。一个sql的查询趟数越少越好。
3.2 Select_type查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。
Simple:简单的 select 查询,查询中不包含子查询或者UNION。
Primary:查询中若包含任何复杂的子部分,最外层查询则被标记为Primary。
Derived:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询, 把结果放在临时表里。
SubQuery:在SELECT或WHERE列表中包含了子查询。
Dependent SubQuery:在SELECT或WHERE列表中包含了子查询,用到了IN关键字的。
Uncacheable SubQuery:不可以使用到缓存的子查询,用到了变量作为筛选条件。
Union:若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED。