banner
Tenifs

Tenifs

雄关漫道真如铁,而今迈步从头越。
github
follow
zhihu
email

导致 MySQL 索引失效的常见场景

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进行验证。

参考资料#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。