参考《高性能MYSQL》
mysql索引失效的情况有哪些

索引优化

索引优化应该是对查询性能优化最有效的手段。本文记录一下一些索引失效的情况。方便问题的排查。

1. like的列有索引时,前导模糊查询索引失效

当想模糊查询某字段时,如果是前导模糊查询,如like ‘%XXX’,此时不会走索引,使用**like ‘XXX%’**才会走索引。
业务需要左模糊或者全模糊,可以使用搜索引擎来解决。

2. 索引顺序的重要

组合索引中,不是最左列开始查找,无法使用索引

给user表加上name,age,email三个字段的组合索引。
若查找时,使用最左列,则索引生效,否则索引失效。

组合索引建立

  • 常用字段放在最左边
  • 等值条件尽量在最左边
  • 离散值较高的字段往左边放
SELECT
COUNT(DISTINCT name)/COUNT(*) name,
COUNT(DISTINCT age)/COUNT(*) age ,
COUNT(DISTINCT email)/COUNT(*) email
from user

按照计算的值由大到小的顺序建立组合索引,值越大证明该字段不为空命中索引几率大。

3. 如果条件中有 or,必须所有列单独使用时能使用索引,否则索引失效

当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效。
一开始usre表里只有name增加了索引,age未有索引,使用or查询name和age时,全表扫描。
把age加上索引,再进行or的查询,使用了索引。

4. 字符串类型,在条件中使用引号引用,否则索引失效

数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型,使索引无效,产生全表扫描。
比如user表里name加上索引,想查找name等于123的人,需要入’123’索引才会生效。

5. Mysql认为全表扫描要比使用索引快时,不使用索引

如表里只有一条数据时

6. 使用负向条件查询,索引失效

负向条件有:!=、<>、not in、not exists、not like 等。可以改为in查询等。
但是经过自己的测试,发现还是会走索引。
user表里name和age均加了索引。
使用!= <> 走了range级别的索引。
使用not in not exists not like 未使用索引。

7. 两个表编码不一致,导致索引失效

创建两个表,分别是文章表和作者表,文章表author_id是作者表中主键,其中结构如下:

CREATE TABLE `article` (`id` varchar(64) NOT NULL,`content` longtext NOT NULL,`title` varchar(50) NOT NULL,`author_id` varchar(64) NOT NULL,PRIMARY KEY (`id`),KEY `article_author_id` (`author_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8CREATE TABLE `author` (`id` varchar(64) NOT NULL,`name` varchar(20) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

注意两个表的编码一个是utf8,一个是utf8mb4
此时联表查询某个文章和作者信息,sql如下,可以看到执行计划中article表并未走索引

将两个表编码改成一致后(utf8mb4:支持表情包)再测试:

可以看到已经能检测到有索引,但因为测试的是两个空表,所以mysql最终没有使用该索引。

索引创建和删除

创建普通索引

CREATE INDEX index_name ON table_name(column_name);ALTER TABLE table_name ADD INDEX index_name (column_name) ;

创建唯一索引

唯一索引意味着该字段中的任意两行不能拥有相同的索引值。

CREATE UNIQUE INDEX index_name ON table_name(column_name);ALTER TABLE table_name ADD UNIQUE index_name (column_name) ;

创建组合索引

CREATE INDEX index_name ON table_name(column_name1, column_name2, column_name3);ALTER TABLE table_name ADD INDEX index_name (column_name1, column_name2, column_name3);

删除索引

DROP INDEX index_name ON table_name;
ALTER TABLE table_name DROP INDEX index_name;

mysql 索引失效情况总结相关推荐

  1. mysql 索引失效分析

    大神总结的索引失效一句话理解后就不用看我下面的文章了,这就是 "模型数空运最快" 模:模糊查询like  %在前面索引失效 型:数据类型有变化索引失效 数:索引列使用了函数索引失效 ...

  2. MySQL索引失效的9种情况(针对InnoDB存储引擎)

    前言 MySQL中提高查询性能的最有效的方式之一就是对数据表合理的设计索引,优秀的索引的设计方案很大程度上可以提高查询的性能. 因此,索引对查询的速度有着至关重要的影响. 为了尽量的使优化器用到我们的 ...

  3. MySQL - 索引失效的情况有哪些?[汇总篇] - 以及合理使用建议

    1.应用场景 主要学习掌握MySQL索引的使用场景以及使用条件限制. 帮助我们高效使用索引进行开发,开发高性能高可用程序. 2.学习/操作 1. 文档 MySQL 索引 - 学习/实践_william ...

  4. 详解MySQL索引失效的几种情况

    MySQL索引是提高查询效率的重要手段.索引失效会导致查询效率下降,甚至全表扫描,影响数据库性能.以下是可能导致MySQL索引失效的情况: 1. 使用or操作符 当where语句中使用or操作符并且o ...

  5. 什么情况会导致 MySQL 索引失效?

    为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景. explain 使用如下,只需要在查询的 SQL 前面添加上 explain 关键字 ...

  6. like左匹配索引失效_导致MySQL索引失效的一些常见写法总结

    前言 最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用 ...

  7. MySQL 索引失效的 15 种场景!

    背景 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑.常见的现象就是:明明在字段上添加了索引,但却并未生效. 前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参 ...

  8. MySQL 索引失效详解

    MySQL 索引失效详解 一.MySQL索引失效原因汇总 隐式的类型转换,索引失效 查询条件包含or,可能导致索引失效 like通配符可能导致索引失效 查询条件不满足联合索引的最左匹配原则 在索引列上 ...

  9. 15个必知的Mysql索引失效场景,别再踩坑了

    背景 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑.常见的现象就是:明明在字段上添加了索引,但却并未生效. 前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参 ...

  10. 导致 MySQL 索引失效

    1.索引失效情况1:非最左匹配 最左匹配原则指的是,以最左边的为起点字段查询可以使用联合索引,否则将不能使用联合索引. 我们本文的联合索引的字段顺序是 sn + name + age,我们假设它们的顺 ...

最新文章

  1. P2574 XOR的艺术(线段树)
  2. GitHub回应突然断供:身在美国不由己,无权提前通知预警
  3. java三层架构是不是策略模式,把「策略模式」应用到实际项目中
  4. python面向对象编程从零开始_Python面向对象编程从零开始,从没对象到有对象
  5. 埃斯顿工业机器人控制柜_埃斯顿“王牌”——焊接机器人“隐形冠军”CLOOS出征...
  6. electron-vu打造低配版网易云(Mv版)
  7. 深度学习:径向基网络(RBF)
  8. (第十一周)规格说明书练习作业——吉林市一日游
  9. linux远程配置ssh服务,Linux远程服务之OpenSSH配置
  10. 万年历算法介绍(C程序)
  11. 软件工程导论—需求分析
  12. python傅里叶逆变换_Python傅里叶逆变换
  13. KT148A电子语音芯片ic方案适用的场景以及常见产品类型
  14. mysql instead of触发_在视图上使用 INSTEAD OF 触发器
  15. 2022-2027年(新版)中国钢铁产业运行状况及需求前景预测报告
  16. windows7计算机不显示u盘,win7插上u盘不显示盘符怎么办|win7 u盘识别不显示盘符的解决方法...
  17. 奥鹏计算机基础18秋在线作业答案,1056《 计算机基础》20秋西南大学在线作业答案答案...
  18. pdf翻译,两款pdf文件翻译软件,支持linux/ubuntu,window,mac下使用
  19. NAACL2022-Prompt相关论文对Prompt的看法
  20. 【每天更新】2022年最新WordPress主题下载,外贸独立站商城/企业网站/个人博客模板 2022-5-18

热门文章

  1. 案例分析:传统媒体如何借力微信平台推广
  2. python处理xps文件,从XPS文档中提取文本
  3. ROS2暑期学校 ROS2 Summer School 2022-转-
  4. VS2013_CodeLens
  5. 面试:Spring Boot的优缺点
  6. led的伏安特性曲线 matlab实现_Matlab在伏安特性实验中的应用
  7. 呼叫转移流程分析(一)
  8. 化工、食品外贸行业管理难点
  9. mysql中日期相减_一篇文章,搞定Excel表格中日期计算,内含公式详解!
  10. 体验+营销+云,Adobe越来越“不务正业”了?