首页 > 数据库 >MySQL索引失效

MySQL索引失效

时间:2023-07-25 16:47:55浏览次数:26  
标签:MySQL 查询 索引 使用 失效 column1

  1. 使用函数或表达式:
    当查询中使用函数或表达式操作列时,MySQL 无法使用该列上的索引。例如,WHERE 子句中使用函数、表达式或算术操作,如 DATE_FORMAT、CONCAT、IF 等,可能导致索引失效。

  2. 列类型不匹配:
    在查询中,如果列的类型与索引的列类型不匹配,索引可能失效。例如,如果索引是整数类型的,但在查询中将该列用作字符串进行比较,那么索引可能无法生效。(隐式转换)

  3. 模糊查询:
    对于模糊查询,例如使用 LIKE 操作符进行模糊匹配,如果模式的开头是通配符 %,则索引可能无法生效。例如,WHERE name LIKE '%John'。

  4. OR 条件:
    当查询中使用 OR 条件时,MySQL 可能无法有效地使用索引,尤其是在多个列上。对于 OR 条件,MySQL 只能选择一个索引来执行查询,导致其他索引失效。

  • or生效场景:
    • 单列上的 OR 条件: 当查询中涉及单个列上的 OR 条件时,并且该列上存在合适的索引,MySQL 可能会使用索引来执行查询。例如,如果查询是 WHERE column1 = value1 OR column1 = value2,而 column1 上有一个合适的索引,MySQL 可能会使用该索引来加速查询。

    • 复合索引上的部分 OR 条件: 如果查询中涉及到复合索引上的部分条件,而复合索引的其他列匹配较好,MySQL 可能会使用索引。例如,如果查询是 WHERE column1 = value1 OR (column1 = value2 AND column2 = value3),而复合索引 (column1, column2) 存在,并且 column1 = value1 条件匹配较多,MySQL 可能会使用该复合索引。

  1. 列的顺序: 对于复合索引(多列索引),列的顺序非常重要。如果查询中的列顺序与复合索引中的列顺序不一致,索引可能会失效。在复合索引中,应将最常用于过滤数据的列放在前面。(不符合最左匹配原则)

  2. 索引上使用了!=、<>判断时,索引失效

  3. 数据量少: 对于某些情况下,数据量非常小的表,MySQL 可能选择不使用索引,直接全表扫描来执行查询,以避免索引的额外开销。

  4. 数据分布不均匀: 当数据分布不均匀时,MySQL 可能选择不使用索引,因为全表扫描可能更快。例如,某些值的重复度过高,而其他值很少出现。

  5. 统计信息不准确: MySQL 使用统计信息来优化查询计划,如果统计信息不准确或过期,MySQL 可能做出不合理的查询计划,导致索引失效。

ps:
IS NULL 和 IS NOT NULL 条件通常不会导致索引失效,而是可以有效地使用索引来优化查询。

标签:MySQL,查询,索引,使用,失效,column1
From: https://www.cnblogs.com/yliunyue/p/17580211.html

相关文章

  • Mysql 增删改查语言系列
    Mysql数据语言系列目录Mysql数据语言系列一.数据定义语言DDL1数据库规范2DDL语言使用2创建视图二.数据操纵语言DML1插入语法2更新语法3删除语法4伪删除5数据恢复6案例三.数据控制语言DCL1概念2用户管理3权限管理4角色管理四.数据查询类语句DQL1语法格式......
  • 安装mysql启动服务过长
    安装MySQL启动服务过长的原因及解决方法在安装MySQL时,有时会遇到启动服务过长的问题。本文将介绍这个问题的原因以及可能的解决方法。问题描述当我们安装MySQL并尝试启动服务时,可能会遇到启动过程非常缓慢的情况。在终端或命令行中,我们可能会看到类似以下的输出:StartingMySQL.......
  • 排查mysql pxc集群故障节点
    排查MySQLPXC集群故障节点MySQLPXC(PerconaXtraDBCluster)是一个高可用性的数据库集群解决方案,它基于MySQL和GaleraCluster技术实现。在实际运行中,可能会遇到一些节点故障的情况,本文将介绍如何排查MySQLPXC集群的故障节点,并给出相应的代码示例。1.检查集群状态在排......
  • MySQL参数
     最大连接数showvariableslike'max_connections';超时时间showglobalvariableslike'%timeout%'; 超时分析:TimeoutError:QueuePoollimitofsize10overflow10reached,connectiontimedout,timeout30https://reality0ne.com/sqlalchemy-zhong-......
  • 远端ssh key失效Host key verification failed
    集群机器使用sshd-keygen配置了免密登录,然而登陆报错ERROR:Someonecouldbeeavesdroppingonyourightnow(man-in-the-middleattack)!ERROR:Itisalsopossiblethatahostkeyhasjustbeenchanged.ERROR:ThefingerprintfortheECDSAkeysentbytheremoteho......
  • Mysql联合索引是如何找到数据的
    比较简单的是单列索引(b+tree)。遇到多条件查询时,不可避免会使用到多列索引。联合索引又叫复合索引。b+tree结构如下:每一个磁盘块在mysql中是一个页,页大小是固定的,mysqlinnodb的默认的页大小是16k,每个索引会分配在页上的数量是由字段的大小决定。当字段值的长度越长,每一页上的数......
  • ubuntu22.04部署mysql---主从
    1、首先部署mysql主服务:详见上一篇《ubuntu22.04部署mysql---单机》https://blog.51cto.com/u_14175560/6766135上述部署好后,主节点server_id:vim/etc/mysql/my.cnf##新增配置:[mysqld]server_id=1重启mysql:systemctlrestartmysql登录mysql,指定从节点IP,运行下述(注意修改......
  • Centos8/linux下载、安装、配置、连接MySQL5.7(rpm方式)
    目录问题现象:问题分析:解决方法:下载:安装:配置:连接:拓展 问题现象:    今天在使用Centos8安装MySQL5.7的rpm包时,出现如下报错:        仓库"MySQL5.7CommunityServer"的GPG公钥已安装,但是不适用于此软件包。        最终问题解决了,但......
  • es和mysql的查询语句对比
    ES(Elasticsearch)和MySQL是两种常用的数据库查询工具,它们在查询语句的使用和对应关系上有一些区别。本文将对比ES和MySQL的查询语句,并详细介绍它们的对应关系。首先,我们来看一下ES的查询语句。ES是一种分布式搜索和分析引擎,它使用JSON格式的查询语句来进行数据检索。ES的查询语句可......
  • 深入理解Mysql索引
    在数据库中,最常用的SQL操作之一就是SELECT语句,它负责数据的检索。而在SELECT语句背后,与索引的交互密不可分。为了优化数据库性能和加快查询速度,开发者们往往优先考虑调整索引。让我们深入了解索引的背后故事。这篇文章将从什么是索引,索引的分类,索引的底层数据数据结构,跟大家一起......