mysql索引失效的常见9种原因详解

article/2025/9/30 2:03:46

目录

前言:

1.最佳左前缀法则

2.主键插入顺序

3.计算、函数、类型转换(自动或手动)导致索引失效

4.范围条件右边的列索引失效

5.不等于(!= 或者<>)导致索引失效

6.is null可以使用索引,is not null无法使用索引

7.like以通配符%开头索引失效

8.OR 前后只要存在非索引的列,都会导致索引失效 

9.数据库和表的字符集统一使用utf8mb4

特别鸣谢:


前言:

        MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度, 因此索引对查询的速度有着至关重要的影响。

  • 使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。
  • 如果查询时没有使用索引,查询语句就会扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。

大多数情况下都(默认)采用B+ 树来构建索引。只是空间列类型的索引使R- 树,并且MEMORY 表还支持hash 索引。其实,用不用索引最终都是优化器说了算

优化器是基于什么的优化器? 基于cost开销(CostBaseOptimizer) ,它不是基于规则( Rule-BasedOptimizer),也不是基于语义。怎么样开销小就怎么来。另外, SQL 语句是否使用索引,跟数据库版本、数据量、数据选择度都有关系

1.最佳左前缀法则

拓展: Alibaba
Java 开发手册》
索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

2.主键插入顺序

 如果此时再插入一条主键值为 9 的记录,那它插入的位置就如下图:

        可这个数据页已经满了,再插进来咋办呢?我们需要把当前 页面分裂 成两个页面,把本页中的一些记录移动到新创建的这个页中。页面分裂和记录移位意味着什么?意味着: 性能损耗 !所以如果我们想尽量 避免这样无谓的性能损耗,最好让插入的记录的 主键值依次递增 ,这样就不会发生这样的性能损耗了。
        所以我们建议:让主键具有 AUTO_INCREMENT ,让存储引擎自己为表生成主键,
在插入记录时存储引擎会自动为我们填入自增的主键值。这样的主键占用空间小,顺序写入,减少页分裂。

3.计算、函数、类型转换(自动或手动)导致索引失效

4.范围条件右边的列索引失效

例子:
#创建一个联合索引, 注意字段的顺序
create index idx_age_classid_name on student(age,classid,name);
#执行计划
EXPLAIN SELECT SQL_NO_CACHE * FROM student
WHERE student .age = 30 AND student .classId > 20 AND student .name = 'abc' ;  

 

#再创建一个联合索引,与上面的索引对比字段顺序变了

create index idx_age_name_classid on student(age,name,classid); 

#再执行一模一样的执行计划

EXPLAIN SELECT SQL_NO_CACHE * FROM student
WHERE student .age = 30 AND student .classId > 20 AND student .name = 'abc' ;

 看到两个执行计划虽然都用到了索引,但是:

  • 第一个没用全,只用到了联合索引“idx_age_classid_name” 的age和classid。
  • 第二个把联合索引“idx_age_name_classid”的age,name和classid都用上了。

5.不等于(!= 或者<>)导致索引失效

6.is null可以使用索引,is not null无法使用索引

7.like以通配符%开头索引失效

拓展: Alibaba 《Java 开发手册》
【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

8.OR 前后只要存在非索引的列,都会导致索引失效 

9.数据库和表的字符集统一使用utf8mb4

        统一使用utf8mb4( 5.5.3 版本以上支持 ) 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码。不同的 字符集 进行比较前需要进行 转换 会造成索引失效。

特别鸣谢:

以上知识来源于“尚硅谷”,宋红康老师的《MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!》系列课程。

所以本文章看不懂的卷王们可以去搜索宋红康老师的mysql系列课程。


http://chatgpt.dhexx.cn/article/c0neDDWI.shtml

相关文章

【第三篇】MySQL 索引失效的常见原因【重点】

1.1 概述 有时候不知道小伙伴有没有跟我一样的情况&#xff0c;明明已经建立了索引&#xff0c;但是通过explain发现语句并没有使用上索引&#xff0c;这可能是某些原因导致了我们的索引失效。所以本篇主要介绍的是索引失效的常见原因和如何用好索引&#xff0c;给有需要的朋友…

你的凭据不工作,之前用于连接到(服务器IP)的凭据无法工作,请输入新的凭据(中英文均有)

之前windows还能够访问远程桌面&#xff0c;更新了系统发现又不行了&#xff0c;所以记录一下&#xff0c;解决方案&#xff1a; 在搜索里面输入gpedit.msc&#xff0c;进入到本地组策略编辑器&#xff1a; 中文版&#xff0c;把蓝色选中的策略改为&#xff08;经典&#xff…

远程桌面提示:你的凭据不工作

<<记录>> 远程连接服务器的时候&#xff0c;一直提示“你的凭据不工作”&#xff0c;连接失败。在网上找了很多办法&#xff0c;在注册表里设置凭据&#xff0c;或是添加windows新建凭证管理器等都不行。 如下图所示&#xff1a; 解决办法&#xff1a; 在输入用户…

Win10远程连接凭据不工作问题

Win10远程连接凭据不工作问题 今天为了远程连接可谓是煞费苦心&#xff0c;不过功夫不负有心人&#xff0c;问题终于解决了&#xff0c;不过在解决问题的过程中确实踩了无数的坑&#xff01;&#xff01;&#xff01;&#xff01; 话不多说&#xff0c;直接上干货。 当远程连接…

远程桌面失败:你的凭据不工作

方法一&#xff1a; 运行WinR&#xff0c;输入secpol.msc或是gpedit.msc: 然后按照以下操作&#xff0c;将默认设置“仅来宾—本地用户以来宾身份验证”&#xff0c;更改为“经典&#xff1a;本地用户以自己的身份验证”。 方法二&#xff1a; 更改远程桌面服务端的一个远程服…

win10远程桌面连接凭据怎么设置_win10系统连接远程桌面提示你的凭据不工作的解决方法...

无论谁在使用电脑的时候都可能会发现连接远程桌面提示你的凭据不工作的问题&#xff0c;连接远程桌面提示你的凭据不工作让用户们很苦恼&#xff0c;这是怎么回事呢&#xff0c;连接远程桌面提示你的凭据不工作有什么简便的处理方式呢&#xff0c;其实只要依照在Windows10系统桌…

win10 win11 远程连接 凭据不工作 无法建立连接

Windows 远程连接 远程连接个人或者学校电脑&#xff08;Windows系统&#xff09;时经常遇到无法连接的情况。本文结合两种情况给出相应解决方法。 No.1 问题描述 无法建立连接、未知连接错误 解决方法 查看目标ipv4地址是否正确&#xff0c;在windows&#xff08;WinR&#…

《远程连接》用户凭据不工作—解决办法!!

《远程连接》用户凭据不工作—解决办法&#xff01;&#xff01; 搜了很多教程发现并不管用&#xff0c;最后仔细观察才发现根本原因是什么&#xff01;&#xff01; 因为我两个电脑登的Microsoft不是同一个账户&#xff0c;所以用户名一直输入错误&#xff01;&#xff01;&…

远程计算机凭据不对,三种办法助你解决远程桌面提示“您的凭据不工作”的问题...

随着电脑的使用率越来越高&#xff0c;我们可能会遇到远程桌面提示“您的凭据不工作”的问题&#xff0c;要怎么处理呢&#xff1f;详细解决方法如下&#xff1a; 方法一&#xff1a;组策略编辑器设置身份验证 1、打开组策略编辑器。 找到开始--- 运行-- 输入 gpedit.msc&#…

【系统相关】远程连接,凭据不工作

前言&#xff1a; 在换电脑之前&#xff0c;我的电脑局域网远程配置成功很简单&#xff0c;但是换了电脑之后&#xff0c;按照常规配置就出现了问题&#xff0c;凭据不工作。先讲述常规配置&#xff0c;以win7为例。被远程电脑为B&#xff0c;远程操作电脑为A。 常规配置&#…

远程计算机登录时显示凭据不对,连接到远程计算机时凭据不工作

在域环境中&#xff0c;如果使用Vista及以上的操作系统&#xff0c;默认情况下&#xff0c;在连接到远程计算机时无法保存凭据。 当我们使用远程桌面连接时&#xff0c;即使已经勾选了“记住我的凭证”。 但是下次登录依然无法保存凭据&#xff0c;会提示“您的凭据不工作” 此…

Win10 远程桌面 你的凭据不工作

1.问题描述如图所示 2.问题可能原因 目标机器的访问权限设置为仅来宾身份&#xff0c;应该设置为经典模式。 3.解决问题 具体设置目标机器步骤&#xff1a; 开始-->运行->gpedit.msc->计算机配置->Windows设置->安全设置->本地策略->安全选项->网络…

WIN间远程桌面连接:你的凭据不工作解决(亲测有效)

WIN间远程桌面连接&#xff1a;你的凭据不工作解决(亲测有效) 注意&#xff1a;需要windows专业版设备 被连接端设置 设置 -》 系统 -》远程桌面 -》启用远程桌面&#xff0c;并记录电脑名称&#xff0c;控制中心 -》系统和安全 -》允许远程访问&#xff0c;设置如下&#xf…

远程连接提示凭据不工作

远程计算机的时候提示凭据不工作&#xff0c;查了一下&#xff0c;都说要配置gpedit.msc的网络访问&#xff0c;按照教程来了一遍没什么用&#xff0c;就想新建个账户连接试试看&#xff0c;然后...... 账户名称和全名竟然不是同一个&#xff01;&#xff01;&#xff01; 我…

您的凭据不工作

win10系统远程桌面弄了半天&#xff0c;就是一直显示“您的凭据不工作”&#xff0c;试了各种方法&#xff0c;包括之前写的一篇博客中的四种方法&#xff0c;但就是不行&#xff0c;后来无意见又一次尝试&#xff0c;找到了方法&#xff0c;如下图&#xff1a; 第一步设置&…

远程桌面技术之----“你的凭据不工作”

远程桌面技术之—-“你的凭据不工作” 远程桌面时&#xff0c;如果出现“你的凭据不工作”&#xff0c;请在被远程的主机上做一定的修改&#xff1a; 方法一&#xff1a; 进入“控制面板”->“凭据管理器”->“添加Windows凭据”->输入 要登录的服务器的IP地址、用…

WIN10远程连接WIN10报错:你的凭据不工作

很多用户在升级到win10系统之后&#xff0c;连接远程桌面功能的时候遇到这样一个错误&#xff0c;就是远程桌面提示“你的凭据不工作”&#xff0c;导致无法连接远程桌面&#xff0c;该怎么解决呢&#xff0c;下面为大家讲解一下Win10无法连接远程桌面提示“你的凭据不工作”的…

远程桌面连接提示你的凭据不工作怎么办?

当你在远程连接服务器时&#xff0c;是否有遇到远程连接服务器失败&#xff0c;凭据不工作的情况呢&#xff1f;相信多数朋友已经遇到过了&#xff0c;是什么原因导致了凭据不工作呢&#xff1f;今天飞飞来和你们说说凭据不工作的解决方法 1、打开运行&#xff08;快捷键WinR&…

您的凭据不工作 之前用于连接到%的凭据无法工作。请输入新凭据。

第一种解决方法&#xff1a;关闭共享的密码保护 网络共享中心-更改高级共享设置-所用网络-选择无密码保护的共享 第二种&#xff1a; winr 输入gpedit.msc 选择管理模板 -系统-凭据分配 选择允许分配保存的凭据用于仅ntlm服务器身份验证 选择已启用 点击显示输入TERMSRV/* 确…

解决Win10远程桌面连接出现“你的凭据不工作”问题

通过Win10连接远程电脑时&#xff0c;出现凭据不工作如何解决&#xff1f; 本人在试了许多方法以后&#xff0c;发现还是不管用&#xff0c;终于在最后&#xff0c;找到了一种解决方法。 1.显示问题 2.解决办法—— 在被远程操作的电脑上进行设置 进入此电脑—右击进入属性—…