一、准备工作

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 索引欣失效的情况相关推荐

  1. Mysql索引查询失效的情况

    首先,复习一下索引的创建: 普通的索引的创建: CREATE INDEX  (自定义)索引名  ON  数据表(字段); 复合索引的创建: CREATE INDEX  (自定义)索引名  ON  数据 ...

  2. mysql使索引失效语句_mysql语句中索引可能失效的情况

    一.创建两张表 表a 表b  选择不同的存储引擎以InnoDB和MyISAM为例 表a CREATE TABLE `a` ( `ID` int NOT NULL AUTO_INCREMENT , `n ...

  3. MySQL索引优化:哪些情况下需要建立索引(适合构建索引的几种情况)

    适合构建索引的几种情况: 引言 我们知道正确的建立索引可以加快数据库的查询,但是如果索引建立不当,或者随意的建立过多索引不仅不会提升数据库的效率,反而在进行数据更新操作的时候需要耗费系统资源对索引进行 ...

  4. Mysql索引会失效的几种情况分析

    转自:http://www.jb51.net/article/50649.htm 在做项目的过程中,难免会遇到明明给mysql建立了索引,可是查询还是很缓慢的情况出现,下面我们来具体分析下这种情况出现 ...

  5. mysql 加索引不起作用_mysql加索引及索引失效的情况

    前言:B+TREE索引的本质是多路绝对平衡查找树,磁盘指针,相当于书的目录,索引不是越多越好. 一:如何加索引 1.PRIMARY  KEY(主键索引) mysql>ALTER  TABLE   ...

  6. Mysql索引使用情况_介绍mysql索引失效的情况

    mysql视频教程栏目索引失效的情况. 索引对于MySQL而言,是非常重要的篇章.索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效. 图片总结版 相关免费 ...

  7. MySQL索引原理、失效情况

    声明:本文是小编在学习过程中,东拼西凑整理,如有雷同,纯属借鉴. Mysql5.7的版本, InnoDB引擎 目录 1 mysql索引知识 1.1 B+Tree索引 1.2 主键索引和普通索引的区别 ...

  8. mysql join 索引 无效_ORACLE MYSQL中join 字段类型不同索引失效的情况-阿里云开发者社区...

    ORACLE MYSQL中join 字段类型不同索引失效的情况 重庆八怪 2016-12-29 780浏览量 简介: 关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACL ...

  9. mysql group 索引失效_介绍mysql索引失效的情况

    mysql视频教程栏目索引失效的情况. 索引对于MySQL而言,是非常重要的篇章.索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效. 图片总结版 相关免费 ...

最新文章

  1. (C++)1021 个位数统计
  2. C++为什么空格无法输出_算法竞赛C++常用技巧——输入输出优化(防止TLE)
  3. 佐治亚理工学院计算科学与工程系博士生招生!
  4. 用几条shell命令快速去重10G数据
  5. 解读GAN及其 2016 年度进展
  6. HDU Problem - 5976 Detachment(逆元,阶乘打表,数学)
  7. Node.js的helloworld 程序
  8. 拉普拉斯方程之美:万物的数学之匙
  9. JQuery实现旅游导航菜单应用方便
  10. mysql的order by,group by和distinct优化
  11. 3d 自动生成物体_相芯科技首秀SIGGRAPH,3D形象自动生成火了
  12. 小程序mpvue图片绘制水印_基于mpvue小程序使用echarts画折线图的方法示例
  13. 【深度学习】textCNN论文与原理
  14. BAT机器学习面试1000题系列(第1~305题
  15. springboot+jpa+mysql Springboot+jpa+jdbc+sqlserver 使用时遇到的一系列的问题
  16. 你想为开源社区做贡献吗?机会来了
  17. 基于LM2576的降压电源的分析与设计
  18. VC890D老款数字万用表内部旋钮触点
  19. 沈阳市养老保险停保单如何打印,停保变动通知单的打印方法
  20. ChatGPT国内镜像站初体验:聊天、Python代码生成等

热门文章

  1. 以太网的光猫和光纤的光猫有什么区别吗?
  2. 天气变冷了,给你的爱人制作一个天气提醒小助手
  3. 想给PPT制作拉幕动画?这个方法必不可少
  4. 启发式思考批判性思维
  5. 亲测几天后,要这样发布,头条和西瓜,在哪边发视频流量会更大?
  6. scala的可变列表
  7. 脉脉上的 “前端三大浪漫“ 是个啥?
  8. VBA—EXCEL操作集合—06
  9. 去除select下拉框默认样式
  10. 读书日之《历史的温度》