- 执行计划是什么?
执行计划是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化。在MySQL中使用explain关键字查看。查询 SELECT * FROM A WHERE NAME = "TOM"; 查看上述语句的执行计划 explain select * from A where name = "TOM";
执行结果.jpg
-
select_type
该表示选择的类型,常见可选值有: SIMPLE(简单的),PRIMARY(最外层) ,SUBQUERY(子查询中的第一个select查询) -
table
表示输出行数据所在表。 -
type
该属性表示访问类型,有很多种访问类型。
最常见的其中包括以下几种:- ALL(全表扫描)
- index(索引扫描)
这种类型表示是MySQL会对整个索引进行扫描。要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个复合索引的一部分,MySQL都可能会采用index类型的方式扫描。缺点是效率不高,MySQL会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引。 - range(范围扫描)
- ref (非唯一索引扫描)
- eq_ref(唯一索引扫描,)
- (const)常数引用, 访问速度依次由慢到快。
访问速度依次由慢到快。
-
possible_keys
顾名思义,该属性给出了该查询语句可能走的索引,(如某些字段上索引的名字)这里提供的只是参考,而不是实际走的索引。 -
key
显示MySQL实际使用的索引,其中就包括主键索引(PRIMARY),或者自建索引的名字。 -
key_len
表示索引所使用的字节数。 -
ref
连接匹配条件,如果走主键索引的话,该值为: const,全表扫描的话为null值 -
rows
扫描行数,也就是说,需要扫描多少行,采能获取目标行数,一般情况下会大于返回行数。通常情况下:rows越小,效率越高,大部分SQL优化,都是在减少这个值的大小。注意: 理想情况下扫描的行数与实际返回行数理论上是一致的,但这种情况及其少,如关联查询,扫描的行数就会比返回行数大大增加。
-
Extra
这个属性非常重要,该属性中包括执行SQL时的真实情况信息,如上面所属,使用到的是"using where",表示使用where筛选得到的值。常用的有: "Using temporary" 使用临时表; "using filesort" 使用文件排序









网友评论