【MYSQL索引失效的场景有哪些】

 创建一张表:id为主键(primary key)name为普通建(index)【MYSQL索引失效的场景有哪些】_第1张图片

 插入数据:

【MYSQL索引失效的场景有哪些】_第2张图片

用主键索引查询:

【MYSQL索引失效的场景有哪些】_第3张图片

 用普通建索引查询 

【MYSQL索引失效的场景有哪些】_第4张图片

 

对于执行计划,参数有:

  • possible_keys 字段表示可能用到的索引;
  • key 字段表示实际用的索引,如果这一项为 NULL,说明没有使用索引;
  • key_len 表示索引的长度;
  • rows 表示扫描的数据行数。
  • type 表示数据扫描类型,我们需要重点看这个。

type 字段就是描述了找到所需数据时使用的扫描方式是什么,常见扫描类型的执行效率从低到高的顺序为

  • All(全表扫描);
  • index(全索引扫描);
  • range(索引范围扫描);
  • ref(非唯一索引扫描);
  • eq_ref(唯一索引扫描);
  • const(结果只有一条的主键或唯一索引扫描)。

 索引失效场景

当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。 

【MYSQL索引失效的场景有哪些】_第5张图片

对索引使用函数

【MYSQL索引失效的场景有哪些】_第6张图片

对索引进行表达式计算

【MYSQL索引失效的场景有哪些】_第7张图片 对索引隐式类型转换

【MYSQL索引失效的场景有哪些】_第8张图片

 WHERE 子句中的 OR

【MYSQL索引失效的场景有哪些】_第9张图片

 联合索引非最左匹配

参考https://xiaolincoding.com/mysql/index/index_lose.html#%E8%81%94%E5%90%88%E7%B4%A2%E5%BC%95%E9%9D%9E%E6%9C%80%E5%B7%A6%E5%8C%B9%E9%85%8D

你可能感兴趣的:(面试,数据库)