xChar
·18 days ago

explain 可以用来分析 SQL 语句,具体用法如下:

image

只需在要执行的 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进行验证。

参考资料

Loading comments...