mysql 索引失效情况总结
参考《高性能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 索引失效情况总结相关推荐
- mysql 索引失效分析
大神总结的索引失效一句话理解后就不用看我下面的文章了,这就是 "模型数空运最快" 模:模糊查询like %在前面索引失效 型:数据类型有变化索引失效 数:索引列使用了函数索引失效 ...
- MySQL索引失效的9种情况(针对InnoDB存储引擎)
前言 MySQL中提高查询性能的最有效的方式之一就是对数据表合理的设计索引,优秀的索引的设计方案很大程度上可以提高查询的性能. 因此,索引对查询的速度有着至关重要的影响. 为了尽量的使优化器用到我们的 ...
- MySQL - 索引失效的情况有哪些?[汇总篇] - 以及合理使用建议
1.应用场景 主要学习掌握MySQL索引的使用场景以及使用条件限制. 帮助我们高效使用索引进行开发,开发高性能高可用程序. 2.学习/操作 1. 文档 MySQL 索引 - 学习/实践_william ...
- 详解MySQL索引失效的几种情况
MySQL索引是提高查询效率的重要手段.索引失效会导致查询效率下降,甚至全表扫描,影响数据库性能.以下是可能导致MySQL索引失效的情况: 1. 使用or操作符 当where语句中使用or操作符并且o ...
- 什么情况会导致 MySQL 索引失效?
为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景. explain 使用如下,只需要在查询的 SQL 前面添加上 explain 关键字 ...
- like左匹配索引失效_导致MySQL索引失效的一些常见写法总结
前言 最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用 ...
- MySQL 索引失效的 15 种场景!
背景 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑.常见的现象就是:明明在字段上添加了索引,但却并未生效. 前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参 ...
- MySQL 索引失效详解
MySQL 索引失效详解 一.MySQL索引失效原因汇总 隐式的类型转换,索引失效 查询条件包含or,可能导致索引失效 like通配符可能导致索引失效 查询条件不满足联合索引的最左匹配原则 在索引列上 ...
- 15个必知的Mysql索引失效场景,别再踩坑了
背景 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑.常见的现象就是:明明在字段上添加了索引,但却并未生效. 前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参 ...
- 导致 MySQL 索引失效
1.索引失效情况1:非最左匹配 最左匹配原则指的是,以最左边的为起点字段查询可以使用联合索引,否则将不能使用联合索引. 我们本文的联合索引的字段顺序是 sn + name + age,我们假设它们的顺 ...
最新文章
- P2574 XOR的艺术(线段树)
- GitHub回应突然断供:身在美国不由己,无权提前通知预警
- java三层架构是不是策略模式,把「策略模式」应用到实际项目中
- python面向对象编程从零开始_Python面向对象编程从零开始,从没对象到有对象
- 埃斯顿工业机器人控制柜_埃斯顿“王牌”——焊接机器人“隐形冠军”CLOOS出征...
- electron-vu打造低配版网易云(Mv版)
- 深度学习:径向基网络(RBF)
- (第十一周)规格说明书练习作业——吉林市一日游
- linux远程配置ssh服务,Linux远程服务之OpenSSH配置
- 万年历算法介绍(C程序)
- 软件工程导论—需求分析
- python傅里叶逆变换_Python傅里叶逆变换
- KT148A电子语音芯片ic方案适用的场景以及常见产品类型
- mysql instead of触发_在视图上使用 INSTEAD OF 触发器
- 2022-2027年(新版)中国钢铁产业运行状况及需求前景预测报告
- windows7计算机不显示u盘,win7插上u盘不显示盘符怎么办|win7 u盘识别不显示盘符的解决方法...
- 奥鹏计算机基础18秋在线作业答案,1056《 计算机基础》20秋西南大学在线作业答案答案...
- pdf翻译,两款pdf文件翻译软件,支持linux/ubuntu,window,mac下使用
- NAACL2022-Prompt相关论文对Prompt的看法
- 【每天更新】2022年最新WordPress主题下载,外贸独立站商城/企业网站/个人博客模板 2022-5-18
热门文章
- 案例分析:传统媒体如何借力微信平台推广
- python处理xps文件,从XPS文档中提取文本
- ROS2暑期学校 ROS2 Summer School 2022-转-
- VS2013_CodeLens
- 面试:Spring Boot的优缺点
- led的伏安特性曲线 matlab实现_Matlab在伏安特性实验中的应用
- 呼叫转移流程分析(一)
- 化工、食品外贸行业管理难点
- mysql中日期相减_一篇文章,搞定Excel表格中日期计算,内含公式详解!
- 体验+营销+云,Adobe越来越“不务正业”了?