MySQL导致索引失效的几种情况
作者:小红的布丁
这篇文章主要介绍了MySQL导致索引失效的几种情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
引言
在 MySQL 数据库中,索引是提升查询性能的关键工具。然而,在某些情况下,即使创建了索引,查询性能仍然可能不理想,甚至出现索引失效的现象。
索引失效会导致数据库执行全表扫描,极大地降低查询效率,尤其是在数据量较大的场景下。因此,了解常见的索引失效场景及其优化方案,对于数据库性能调优至关重要。
通过本文的学习,您将能够:
- 识别常见的索引失效场景。
- 理解索引失效的根本原因。
- 掌握针对性的优化策略,避免索引失效。
- 索引失效场景以及如何解决
1. 以%开头的LIKE查询
优化方案:
首先扫描二级索引获取满足条件的PRIMARY KEY,在根据主键回表查询。
SELECT * FROM (SELECT actor_id FROM actor WHERE last_name LIKE '%NI%') tmp INNER JOIN actor a ON a.`actor_id`=tmp.actor_id
2. 类型的隐式转换(字符转数字会失效,数字转字符不会失效)
例如:
SELECT * FROM actor WHERE last_name=1; -- 会失效 SELECT * FROM actor WHERE actor_id='1'; -- 不会失效
3. 联合索引不满足最左原则
对于复合索引,查询条件应该从索引的最左边列开始并且连续。
「改进方法」:
如果有一个索引是(a, b, c),那么应该保证查询条件从a开始,如WHERE a = 1 AND b = 2。
4. MYSQL优化器
估计使用索引比全部扫描要慢。
5. 使用or时
必须保证其前后都能有索引,如果其中任一不包含索引都会导致索引失效。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。