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时

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

总结

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

相关文章

  • java连接mysql底层封装详解

    java连接mysql底层封装详解

    这篇文章主要介绍了java连接mysql底层封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • mysql模糊匹配多个值的两种方法实例

    mysql模糊匹配多个值的两种方法实例

    我们平时使用msyql需要模糊的匹配字段的时候,我们第一反应就是使用like查询语句来模糊匹配,下面这篇文章主要给大家介绍了关于mysql模糊匹配多个值的两种方法,需要的朋友可以参考下
    2022-12-12
  • Mysql Explain命令的使用与分析

    Mysql Explain命令的使用与分析

    今天小编就为大家分享一篇关于Mysql Explain命令的使用与分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • dmysql自己封装的mysql库

    dmysql自己封装的mysql库

    dmysql自己封装的mysql库...
    2007-07-07
  • mysql实现connect by start with方式

    mysql实现connect by start with方式

    本文介绍了MySQL中实现层级查询的几种方法,并分享了一种使用变量循环赋值的方式,通过实验验证了该方法的有效性
    2024-12-12
  • SQL中FIND_IN_SET的简单使用详解

    SQL中FIND_IN_SET的简单使用详解

    MySQL中find_in_set函数用于检查列值是否在字符串列表中,支持单个或多个值查询,返回存在结果,适用于将集合转为逗号分隔字符串后使用,实现高效筛选
    2025-07-07
  • MySQL 存储过程中执行动态SQL语句的方法

    MySQL 存储过程中执行动态SQL语句的方法

    这篇文章主要介绍了MySQL 存储过程中执行动态SQL语句的方法,需要的朋友可以参考下
    2014-08-08
  • Mysql 索引从入门到精通(从原理到实践)

    Mysql 索引从入门到精通(从原理到实践)

    本文介绍MySQL索引深度解析:从原理到实践,本文涵盖索引基础概念、类型、底层原理及管理策略,结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • mysql表类型查询示例详解

    mysql表类型查询示例详解

    这篇文章主要介绍了mysql表类型查询示例详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • MySQL连表查询分组去重的实现示例

    MySQL连表查询分组去重的实现示例

    本文将结合实例代码,介绍MySQL连表查询分组去重,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07

最新评论