mysql 索引欣失效的情况
一、准备工作
1、新建一张表,并建立两个多个索引
脚本如下
CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) DEFAULT NULL,`school` varchar(50) DEFAULT NULL,`age` int(11) DEFAULT NULL,`grade` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`),KEY `age` (`age`) USING BTREE,KEY `school` (`school`) USING BTREE,KEY `name_grade` (`name`,`grade`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
其实中 age、school、name_grade为索引
加两个数据
INSERT INTO `t_user` VALUES ('1', '张三', '清华', '22', '一年级');
INSERT INTO `t_user` VALUES ('2', '李四', '北大', '24', '二年级');
二、具体情况
1. 用 != 或者 <> 作为索引字段判断条件时 导致索引失效
如:
改为 = 判断,索引立即生效
2、索引字段类型在使用时与其真正字段类型不一致时,索引失效
本例子中的mobile 字段类型varchar类型,如果查询语句这么写,
发现结果也是正确的
分析语句发现
此语句却没有真正走索引
如果电话加上引号,再分析下语句
结果就走索引了
这证明 如果数据库类型是varchar , 索引字段类型传入参数是long类型 结果是能查询出正确数据,只是索引失效了,如果反之索引也会失效吗,我们测试下看看结果
以number字段为例,它在数据存的是long为类型,传入参数类型为 varchar类型,分析语句如下
结果显示走索引了,据此我们可以得出结论
如果数据库类型是varchar , 索引字段类型传入参数是long类型 结果是能查询出正确数据,只是索引失效了, 反之,
如果数据库字段类型是long类型,索引字段传入参数是varchar类型,结果能查正确数据,索引没有失效
数据库字段类型那么多,是不是其它类型也存在这个问题呢,我们可以一一测试下,具体细节不在展示,以下汇总结果
索引字段类型 | 查询传参类型 | 是否走索引 |
varchar | long | 否 |
varchar | int | 否 |
varchar | tinyint | 否 |
varchar | double | 否 |
long | varchar | 是 |
int | varchar | 是 |
tinyint | varchar | 是 |
double | varchar | 是 |
decimal | varchar | 是 |
在mysql 数据库中,从上面的统计结论可以看出,对于数字类型(具体类型如上表)的索引字段,传入参数为varchar类型,索引依然有效,反之则无效
3、计算、函数导致索引失效
例如
4 、is null可以使用索引,is not null无法使用索引
结果如下
5、like以通配符%开头索引失效
结尾会生效
6.OR 前后只要存在非索引的列,都会导致索引失效
school 是地索引列,sex 不是索引列,结果如下
7、数据库和表的字符集统一使用utf8mb4
统一使用utf8mb4( 5.5.3 版本以上支持 ) 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码。不同的 字符集 进行比较前需要进行 转换 会造成索引失效。
mysql 索引欣失效的情况相关推荐
- Mysql索引查询失效的情况
首先,复习一下索引的创建: 普通的索引的创建: CREATE INDEX (自定义)索引名 ON 数据表(字段); 复合索引的创建: CREATE INDEX (自定义)索引名 ON 数据 ...
- mysql使索引失效语句_mysql语句中索引可能失效的情况
一.创建两张表 表a 表b 选择不同的存储引擎以InnoDB和MyISAM为例 表a CREATE TABLE `a` ( `ID` int NOT NULL AUTO_INCREMENT , `n ...
- MySQL索引优化:哪些情况下需要建立索引(适合构建索引的几种情况)
适合构建索引的几种情况: 引言 我们知道正确的建立索引可以加快数据库的查询,但是如果索引建立不当,或者随意的建立过多索引不仅不会提升数据库的效率,反而在进行数据更新操作的时候需要耗费系统资源对索引进行 ...
- Mysql索引会失效的几种情况分析
转自:http://www.jb51.net/article/50649.htm 在做项目的过程中,难免会遇到明明给mysql建立了索引,可是查询还是很缓慢的情况出现,下面我们来具体分析下这种情况出现 ...
- mysql 加索引不起作用_mysql加索引及索引失效的情况
前言:B+TREE索引的本质是多路绝对平衡查找树,磁盘指针,相当于书的目录,索引不是越多越好. 一:如何加索引 1.PRIMARY KEY(主键索引) mysql>ALTER TABLE ...
- Mysql索引使用情况_介绍mysql索引失效的情况
mysql视频教程栏目索引失效的情况. 索引对于MySQL而言,是非常重要的篇章.索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效. 图片总结版 相关免费 ...
- MySQL索引原理、失效情况
声明:本文是小编在学习过程中,东拼西凑整理,如有雷同,纯属借鉴. Mysql5.7的版本, InnoDB引擎 目录 1 mysql索引知识 1.1 B+Tree索引 1.2 主键索引和普通索引的区别 ...
- mysql join 索引 无效_ORACLE MYSQL中join 字段类型不同索引失效的情况-阿里云开发者社区...
ORACLE MYSQL中join 字段类型不同索引失效的情况 重庆八怪 2016-12-29 780浏览量 简介: 关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACL ...
- mysql group 索引失效_介绍mysql索引失效的情况
mysql视频教程栏目索引失效的情况. 索引对于MySQL而言,是非常重要的篇章.索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效. 图片总结版 相关免费 ...
最新文章
- (C++)1021 个位数统计
- C++为什么空格无法输出_算法竞赛C++常用技巧——输入输出优化(防止TLE)
- 佐治亚理工学院计算科学与工程系博士生招生!
- 用几条shell命令快速去重10G数据
- 解读GAN及其 2016 年度进展
- HDU Problem - 5976 Detachment(逆元,阶乘打表,数学)
- Node.js的helloworld 程序
- 拉普拉斯方程之美:万物的数学之匙
- JQuery实现旅游导航菜单应用方便
- mysql的order by,group by和distinct优化
- 3d 自动生成物体_相芯科技首秀SIGGRAPH,3D形象自动生成火了
- 小程序mpvue图片绘制水印_基于mpvue小程序使用echarts画折线图的方法示例
- 【深度学习】textCNN论文与原理
- BAT机器学习面试1000题系列(第1~305题
- springboot+jpa+mysql Springboot+jpa+jdbc+sqlserver 使用时遇到的一系列的问题
- 你想为开源社区做贡献吗?机会来了
- 基于LM2576的降压电源的分析与设计
- VC890D老款数字万用表内部旋钮触点
- 沈阳市养老保险停保单如何打印,停保变动通知单的打印方法
- ChatGPT国内镜像站初体验:聊天、Python代码生成等