explain
可以用来分析 SQL 语句,具体用法如下:
只需在要执行的 SQL 语句前面添加 explain
即可。
各个字段的含义如下:
- id :选择标识符,id 越大优先级越高,越先被执行;
- select_type : 表示查询的类型;
- table :输出结果集的表;
- partitions : 匹配的分区;
- type :表示表的连接类型;
- possible_keys : 表示查询时,可能使用的索引;
- key : 表示实际使用的索引;
- key_len: 索引字段的长度;
- ref:列与索引的比较;
- rows : 大概估算的行数;
- filtered :按表条件过滤的行百分比;
- Extra :执行情况的描述和说明。
其中最重要的就是 type 字段,type 值类型如下:
-
all : 扫描全表数据;
-
index : 遍历索引;
-
range: 索引范围查找;
-
index_subquery : 在子查询中使用 ref;
-
unique_subquery : 在子查询中使用 eq_ref;
-
ref_or_null : 对 null 进行索引的优化的 ref;
-
fulltext :使用全文索引;
-
ref :使用非唯一索引查找数据;
-
eq_ref : 在 join 查询中使用主键或唯一索引关联;
-
const :将一个主键放置到 where 后面作为条件查询, MySQL 优化器就能把这次查询优化转化为一个常量。
总结#
由于不同的 MySQL
版本,索引失效策略也有所不同。
大多数索引失效情况都是明确的,有少部分索引失效会因MySQL
的版本不同而有所不同。
因此,我们应该在实践过程中进行研究,具体问题具体分析,如果没有办法准确的判断,可以使用explain
进行验证。