Mysql 解释计划字段说明

送分小仙女□ 提交于 2020-04-05 15:50:50
Mysql 解释计划
输出字段分为 id select_type table partitions type possible_keys key key_len ref rows filtered extra
 
1. select_type
INSERT DELETE UPDATE 增删改
查有多个
查询的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询
1、SIMPLE:简单的select查询,查询中不包含子查询或者union 
(select * from atest1 t1 )
2、PRIMARY:查询中包含任何复杂的子部分,最外层查询则被标记为primary 
(select * from atest1 where id = (select id from atest2 ) )
3、SUBQUERY:在select 或 where列表中包含了子查询 
(同上)
4、DERIVED:在from列表中包含的子查询被标记为derived(衍生),mysql或递归执行这些子查询,把结果放在零时表里
 
2. table 表名
如果有别名,显示别名
3 partitions
查询使用到表分区的分区名。
4.type 核心属性
分为
system > const > eq_ref > ref > range > index > ALL
 
4.1 system:
无法重现
 
4.2 const 
where 条件是主键
select * from atest1 where id =1 ;
select * from atest1 where index1 = "11";
4.2 eq_ref 
无法重现
 
4.3 ref 
查询普通索引
(select * from atest1 where index2 = "2";)
 
4.4 range 
有范围的索引扫描
(select * from atest1 where index2 > 1 ;)
 
4.5 index 
Full Index Scan,index与ALL区别为index类型只遍历索引树
(select id from atest1;)
4.6 ALL
全表扫描
(select * from atest1)
 
5 possible_keys
可能用到的索引名称,我测试下来,和 6 key都是一样的
(select * from atest1 where index2 > 1 ; 情况下 pk_index2 )
 
6 key
实际的索引名称
(select * from atest1 where index2 > 1 ; 情况下 pk_index2)
 
7 key_len
表示索引中使用的字节数,通过该列计算查询中使用的索引的长度。在不损失精确性的情况下,长度越短越好显示的是索引字段的最大长度,并非实际使用长度;
(select * from atest1 where index2 > 1 ; 情况下 5 )
(select * from atest1 where index2 > 1 and id=1; 情况下 4)
 
8 ref
哪些列或常量被用于查找索引列上的值, 有可能为null
select * from atest1 where index2 > 1 and id=1; 情况下 const
9 rows
过滤后的行数
 
10 filtered
返回结果的行数占读取行数的百分比,值越大越好;
11 extra
包含不适合在其他列中显示但十分重要的额外信息。
 
 
根据表统计信息及选用情况,大致估算出找到所需的记录或所需读取的行数,数值越小越好;
 
----------------
附sql:
 
CREATE TABLE `jpress`.`atest1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`normal1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`normal2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`index1` int(255) NULL DEFAULT NULL,
`index2` int(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `index1`(`index1`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
CREATE TABLE `jpress`.`atest2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`normal3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`normal4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`index3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`index4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `index3`(`index3`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
 
 
 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!