分析sql的执行计划 使用explain关键字 进行分析
我认为主要需要查看一下字段
type:索引类型
key:用到的索引
extra:额外信息
现在我创建了一张表 其中 abc 为联合索引 d为 唯一索引 e 普通字段无索引 建表语句如下:
CREATE TABLE `test` (
`id` int NOT NULL AUTO_INCREMENT,
`a` varchar(255) DEFAULT NULL,
`b` varchar(255) DEFAULT NULL,
`c` varchar(255) DEFAULT NULL,
`d` varchar(255) DEFAULT NULL,
`e` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uni` (`d`) USING BTREE,
KEY `lianhe` (`a`,`b`,`c`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3;
插入了一行数据
首先说明 type :索引的类型 索引类型有system 系统表。
const 使用唯一索引加常数时
eq_ref :使用唯一索引 只会扫描索引树中的一个匹配行时
ref:使用二级索引时
range:使用范围查找时
index:扫描整个索引树 效率不高
all:全表扫描
现在来看extra 这个额外信息 他有很多 比如 using where , using index , using index condition,
usign index;using where ,using filesort 等等 下面依次仔细进行说明每一个的具体意思
using where: 当使用where 进行条件过滤时 where 后面的字段是非索引字段或者 字段没有使用非最左前缀 条件过滤
using index: 使用到了覆盖索引 无需再进行回表操作
using index condition: 在使用联合索引且符合最左前缀 但是未使用到覆盖索引 需要回表操作 出现此信息 mysql 会使用索引下推 让他先在索引树中进行过滤 减少回表的次数
using where;using index: 查询的列是被索引覆盖 但是条件不符合最左前缀
using filesort :在使用order by 语句时使用的是文件排序没有使用到索引排序