explain执行计划分析_explain

告诉我们mysql优化器是怎样处理我们的sql请求的

并不是说在相关查询列上有索引,mysql在查询时就能使用到,虽然我们认为适合,但mysql优化器不一定这样认为

mysql并不一定根据我们sql语句中的顺序进行表的关联,而是根据据索引的统计信息,自动调整关联顺序



explain执行计划分析_执行计划分析_02




id:

explain执行计划分析_执行计划分析_03

(id只能是两种值:数字,null。数字表示sql对数据库的select操作顺序/数量,id越大优先级越高;如果是null则表示几个语句union产生的结果集)

explain执行计划分析_explain_04

(上图,总共一个select语句,所以id显示1。第一个对应表b,第二个表a,第三个表c,可见sql并不一定是按照我们的关联顺序来操作的)(id值相同,则由上而下的顺序


explain执行计划分析_执行计划分析_05

id值不同,则先大的后小的


explain执行计划分析_执行计划分析_06

id有相同有不同的情况下,先大的,相同的则由上往下




select_type:

explain执行计划分析_explain_07

explain执行计划分析_explain_08





table:显示表名,如果有别名则显示别名

explain执行计划分析_执行计划分析_09




partitions:

explain执行计划分析_执行计划分析_10

explain执行计划分析_执行计划分析_11

分区键尽量选择查询少跨分区的





type:

性能从高到低排列:

explain执行计划分析_执行计划分析_12




extra列:

explain执行计划分析_执行计划分析_13

文件排序using filesort可能在磁盘中,也可能在内存中

explain执行计划分析_执行计划分析_14

using temporary和using filesort差不多,要使用临时表查询




possible_keys:

explain执行计划分析_执行计划分析_15




key:

explain执行计划分析_explain_16




key_len:

explain执行计划分析_explain_17





ref:

explain执行计划分析_执行计划分析_18




rows:

explain执行计划分析_explain_19





filtered:

explain执行计划分析_explain_20







explain执行计划分析_explain_21