前言
在七种介绍了explain这东西,那么具体来看下它是如何来运行的吧。
正文
id
来看一条语句:EXPLAIN select * from departments,dept_emp,employees
当id相同的时候:代表在同一队列里面加载,就是说他们加载不是并发的,而是有顺序的。
然后一个问题,就是说我们写的顺序是:departments,dept_emp,employees ,然後你看他们的加载顺序是:departments,employees ,dept_emp。
然后看另外一条语句:
explain SELECT * FROM temployees WHERE emp_no= (
SELECT dept_emp.emp_no
FROM dept_emp
WHERE dept_emp.dept_no=(
SELECT departments.dept_no
FROM departments
WHERE departments.dept_name="Finance"
)
)
在此注明,上面表的东西呢,是mysql 官方测试表。
那么看一下:
就算我们不看explain,其实我们也知道肯定是执行:departments,dept_emp,employees 。
所以是id越大越先执行。
总结一下:如果id相同,从上至下按照顺序执行,如果id不同,越大越先执行。
select_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
table 就非常简单了,就是表。
后语
后面补齐。