MySQL导致索引失效的几种情况

 更新时间:2025年05月12日 08:43:00   作者:小红的布丁  
这篇文章主要介绍了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时

必须保证其前后都能有索引,如果其中任一不包含索引都会导致索引失效。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解MySQL中存储函数创建与触发器设置

    详解MySQL中存储函数创建与触发器设置

    这篇文章主要为大家详细介绍了MySQL中存储函数的创建与触发器的设置,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
    2022-08-08
  • SQL 日期处理视图创建(常见数据类型查询防范 SQL注入)

    SQL 日期处理视图创建(常见数据类型查询防范 SQL注入)

    这篇文章主要为大家介绍了SQL日期处理和视图创建:常见数据类型、示例查询和防范 SQL 注入方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Mysql查询语句如何实现无限层次父子关系查询

    Mysql查询语句如何实现无限层次父子关系查询

    这篇文章主要介绍了Mysql查询语句如何实现无限层次父子关系查询问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MySQL存储过程及语法详解

    MySQL存储过程及语法详解

    这篇文章主要介绍了MySQL存储过程及语法详解,存储过程,也叫做存储程序,是一条或者多条SQL语句的集合,可以视为批量处理,但是其作用不仅仅局限于批量处理
    2022-08-08
  • Mysql主从GTID与binlog如何使用

    Mysql主从GTID与binlog如何使用

    MySQL的GTID和binlog是实现高效数据复制和恢复的重要机制,GTID保证事务的唯一标识,避免复制冲突;binlog记录数据变更,用于主从复制和数据恢复,两者配合,提高MySQL复制的准确性和管理便捷性
    2024-10-10
  • Mysql之索引的数据结构详解

    Mysql之索引的数据结构详解

    索引是存储引擎用于快速找到数据记录的一种数据结构,类似于教科书的目录部分,在MySQL中,索引可以加速数据查找,减少磁盘I/O的次数,提高查询速率,但是,创建和维护索引需要耗费时间,并且索引需要占磁盘空间,在InnoDB中,索引的实现基于B+树结构
    2024-12-12
  • mysql查询上下级机构的方法实例

    mysql查询上下级机构的方法实例

    大家应该都知道表里有上下级机构的,下面这篇文章主要给大家介绍了关于mysql查询上下级机构的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • mysql中的general_log(查询日志)开启和关闭

    mysql中的general_log(查询日志)开启和关闭

    这篇文章主要介绍了mysql中的general_log(查询日志)开启和关闭问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 解决Navicat远程连接MySQL出现 10060 unknow error的方法

    解决Navicat远程连接MySQL出现 10060 unknow error的方法

    这篇文章主要介绍了解决Navicat远程连接MySQL出现 10060 unknow error的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • MySQL索引不会被用到的情况汇总

    MySQL索引不会被用到的情况汇总

    这篇文章主要给大家介绍了关于MySQL索引不会被用到的一些情况,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论