前言
在mysql的编程世界里,有时候我们往往需要对自己编写的sql语句进行分析,来去查看sql的执行计划,这个还是很有必要的。因为我们在开发中,往往需要从数据库中查询数据,当数据量一旦大的时候,这个时候就会出现查询瓶颈,我们首先呢可能就会去查看我们的sql语句的执行过程,判断是否可进行优化,那如何去定位分析呢?这个就是本文讲到的使用explain工具来去定位分析。
说明
由于explain这个分析工具查询出来的字段过多,本文主要讲第一部分,id的讲解。
explain作用
查看sql的执行计划,帮助我们分析mysql是如何解析sql语句的。
查看表的加载顺序。查看sql的查询类型。哪些索引可能被使用,哪些索引又被实际使用了。表之间的引用关系。一个表中有多少行被优化器查询。其他额外的辅助信息。
id详解
含义:select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。
id的情况有三种,分别是:
id相同表示加载表的顺序是从上到下。id不同id值越大,优先级越高,越先被执行。id有相同,也有不同,同时存在。id相同的可以认为是一组,从上往下顺序执行;在所有的组中,id的值越大,优先级越高,越先执行。
实战
第一步、预备工作(创建部门表、员工表)
第二步:分别分析一下id的不同情况。
1、id相同的情况
小总结:id相同,表示加载表的顺序是从往下,从上图看出,首先加载dept表,再加载emp表。
2、id不相同的情况
小总结:id不相同,id的值越大,优先级越高越先被执行。从上图可以看出,首先是执行的是id=2的这一行,也就子查询,执行的是表dept,然后再执行emp表。
3、id存在相同,也存在不同,同时存在。
小总结:这个就是id存在相同,也存在不同,是同时存在的。首先可以把它们分为两组,id相同的为一组,id不同的为一组,这两组中,id的值越大的越先执行,首先执行的id=2的这一行,去加载emp表,然后,再去执行id=1的组,id相同,从上往下执行,那么执行的应该是“derived2”,这个“derived”表示的是衍生的意思,而其中的“2”表示的是id=2的这一行。
总结
到目前为止呢,我们对explain中的id列就算全部讲清楚了,是不是还是比较简单呢?我们应该深耕下去,慢慢琢磨,其实不难的吧。