explain输出内容解析--type

2021-02-02  本文已影响0人  资深菜鸡程序员

1.依次从好到坏

system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL

除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引

2.type

(1).system

   表中只有一行数据或者是空表。
无法复现

(2).const(重要)

   使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库

也叫做唯一索引扫描

(3).eq_ref(重要)

关键字:连接字段主键或者唯一性索引。

此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果. 并且查询的比较操作通常是 '=', 查询效率较高

(4).ref(重要)

针对非唯一性索引,使用等值(=)查询非主键。或者是使用了最左前缀规则索引的查询。

不管两张表abc是什么类型的索引只要是非主键连接 打印出的索引类型都是ref

最左前缀原则 

(5)ref_or_null

与ref方法类似,只是增加了null值的比较。实际用的不多。

(6)unique_subquery

用于where中的in形式子查询,子查询返回不重复值唯一值

(7)index_subquery

用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。

(8)range(重要)

索引范围扫描,常见于使用>,<,is null,between ,in ,like等运算符的查询中。

name使用索引

abc不使用索引

(9)index_merge

表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方

排序这个在ref_or_null之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range。

(10)index(重要)

关键字:条件是出现在索引树中的节点的。可能没有完全匹配索引。

索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询。
单索引:

组合索引:

(11)all(重要)

这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。

主键不要uuid

why? 无序、辅助索引要存 太长

主键: 自增

分布式主键: 雪花算法(sharding jdbc)、 redis生成

上一篇下一篇

猜你喜欢

热点阅读