2026/4/11 0:18:28
网站建设
项目流程
网站建设价格gxjzdrj,广东网站se0优化公司,wordpress跑步,百度移动网站提交MySQL 数据库入门到大牛#xff0c;索引失效的几种情况
一、个人总结
1、AND 连接的列#xff0c;有联合索引#xff0c;单列索引失效。
WHERE name ‘JetLi’ and age 25。如果建立了 (name, age) 联合索引#xff0c;通常不需要再单独建立 name 单列索引#xff0c;否…MySQL 数据库入门到大牛索引失效的几种情况一、个人总结1、AND 连接的列有联合索引单列索引失效。WHERE name ‘JetLi’ and age 25。如果建立了 (name, age) 联合索引通常不需要再单独建立 name 单列索引否则会造成冗余增加写入成本。2、搜索条件没有使用联合索引最左边的列联合索引失效。WHERE age 25。name 和 age 有联合索引联合索引失效。3、对列进行运算、函数、类型转换会导致索引失效。WHERE name 123 name 是字符串类型123 是数字。4、范围条件右边的列索引失效。WHERE age 25 AND name ‘JetLi’。age 和 name 有联合索引。联合索引失效。建议把范围查询的字段放在联合索引的最后即 name 和 age。5、不等于条件索引失效。WHERE age ‘25’。age 是不等于条件age 单列索引失效。6、is not null索引失效。WHERE age is not null。age 单列索引失效。7、通配符开头索引失效。WHERE name like ‘%Jet’。name 单列索引失效。8、OR 前后存在没有索引的列索引失效。WHERE name ‘JetLi’ OR age 25。name 有单列索引age 没有单列索引name 上的单列索引失效。9、数据库和表字符集不一致索引失效。两个字符集不一致的表连接查询10、InnoDB 存储引擎如果使用主键自增而我们插入数据的主键忽大忽小索引失效。这个不算索引失效但是这种情况也会影响效率。二、AI 验证优化你的总结已经涵盖了 MySQL 索引失效的绝大多数核心场景非常棒特别是对联合索引最左前缀原则、函数操作以及类型转换的总结非常准确。1、 完善后的“索引失效清单”为了方便你记忆我把我们讨论的内容整理成一个表格失效场景典型 SQL 示例核心原因优化建议最左前缀原则WHERE age25(联合索引为(name,age))跳过了联合索引最左列调整查询条件或索引顺序索引列计算/函数WHERE YEAR(create_time) 2023破坏了索引有序性将计算移到等号右边类型转换WHERE phone138...(phone为字符串)隐式转换导致全表扫描保持数据类型一致左模糊查询WHERE name LIKE %LiB树无法反向匹配改为右模糊LIKE Li%OR 条件陷阱WHERE indexed1 OR not_indexed2无索引列导致全表扫描使用UNION拆分查询范围查询阻断WHERE a1 AND b2(联合索引(a,b))范围查询后索引断裂将范围字段放在联合索引末尾不等于操作WHERE status ! active需扫描大部分数据尽量用IN列举代替IS NOT NULLWHERE name IS NOT NULL优化器认为全表扫描更快字段设置为NOT NULL默认空值字符集不一致JOIN时两边字符集不同需要做隐式转换统一表和字段的字符集2、 总结你的总结已经非常全面了以上补充主要是为了严谨性。最后给你一个排查索引问题的终极建议永远不要靠猜使用 EXPLAIN 或 EXPLAIN FORMATJSON 命令来查看执行计划。看 type 列如果是 ALL 就是全表扫描索引失效如果是 ref/range/const 说明用了索引。看 key 列到底用了哪个索引。看 Extra 列是否有 Using where; Using filesort 或 Using temporary这些也是性能杀手。希望这些建议能帮你的总结更加完美