EXPLAIN 干了点什么
第一列id, 代表序号, id越大 越先执行 id如果相等 则从上往下执行
第二列select_type, 代表 查询的类型
第三列table 查的哪张表
第四列type: 关联类型/表示类型 system>const>eq_ref>ref>range>index>ALL 一般来说 得保证查询达到range,最好ref
system->查的那个表 就只有一行
const-> 查出来的记录只有一行
eq_ref->唯一/主键索引 被关联使用的时候 最多只返回一条符合的记录
ref->唯一索引的部分/普通索引 索引要和某个值比较 可能找到多行数据
range->范围扫描 使用一个索引来检索行
index->查询全表索引
ALL->全表扫描
第五列possible key 可能用到的索引
第六列key 用到的索引列
第七列key_length mysql在索引中使用的字节数,通过这个值可以具体算出其使用了哪个索引
第八列ref 在key列记录的索引中 表查找值使用的列名或者常量
第九列rows mysql估计要读取的行数
第十列Extra
Using Index:查询的列被索引覆盖(即覆盖索引),且where筛选列是索引的前导列
Using Where Using Index: 查询的列 被索引覆盖,但where筛选条件是索引列之一 但不是前导列 => 无法直接通过索引找到想要的数据
Using Where: 查询的列未被索引覆盖,where筛选的列非索引前导列
NULL: 用到了索引 但是 查询的部分字段没有被索引覆盖 需要 "回表"实现
Using temporary: MySQL需要创建一张临时表来处理查询
Using filesort:Mysql会对结果 使用一个外部索引排序
ps~~~小甜点----一个特殊玩法:
explain extended SELECT fraction FROM risk_test_question WHERE uid = 1;
show WARNINGS;
explain extended会提供一些扩展的玩法, show warnings会写出来MySQL优化引擎优化后的语句(虽然大多数情况没什么用)

浙公网安备 33010602011771号