当前位置: 首页 > news >正文

mysql索引失效解决6_简单介绍MySQL索引失效的几种情况

导读

这篇文章主要介绍了MySQL索引失效的几种情况,帮助大家更好的理解和使用MySQL索引,感兴趣的朋友可以了解下

一.索引不存储null值

更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本没Null值,不能利用到索引,只能全表扫描。

为什么索引列不能存Null值?

将索引列值进行建树,其中必然涉及到诸多的比较操作。Null值的特殊性就在于参与的运算大多取值为null。这样的话,null值实际上是不能参与进建索引的过程。也就是说,null值不会像其他取值一样出现在索引树的叶子节点上。

二.不适合键值较少的列(重复数据较多的列)

假如索引列TYPE有5个键值,如果有1万条数据,那么 WHERE TYPE = 1将访问表中的2000个数据块。再加上访问索引块,一共要访问大于200个的数据块。如果全表扫描,假设10条数据一个数据块,那么只需访问1000个数据块,既然全表扫描访问的数据块少一些,肯定就不会利用索引了。

三.前导模糊查询不能利用索引(like '%XX'或者like '%XX%')

假如有这样一列code的值为'AAA','AAB','BAA','BAB' ,如果where code like '%AB'条件,由于前面是模糊的,所以不能利用索引的顺序,必须一个个去找,看是否满足条件。这样会导致全索引扫描或者全表扫描。如果是这样的条件where code like 'A % ',就可以查找CODE中A开头的CODE的位置,当碰到B开头的数据时,就可以停止查找了,因为后面的数据一定不满足要求。这样就可以利用索引了。

四.索引失效的几种情况

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

select * from tb1 where nid = 1 or name = 'seven@live.com';

--特别的:当or条件中有未建立索引的列才失效,以下会走索引

select * from tb1 where nid = 1 or name = 'seven';

select * from tb1 where nid = 1 or name = 'seven@live.com' and email = 'alex'

2.对于多列索引,不是使用的第一部分,则不会使用索引

3.like查询以%开头

select * from tb1 where email like '%cn';

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

elect * from tb1 where email = 999;

5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

6.普通索引的不等于不会走索引

- !=

select * from tb1 where email != 'alex'

--特别的:如果是主键,则还是会走索引

select * from tb1 where nid != 123

- >

select * from tb1 where email > 'alex'

--特别的:如果是主键或索引是整数类型,则还是会走索引

select * from tb1 where nid > 123

select * from tb1 where num > 123

7.组合索引最左前缀

如果组合索引为:(name,email)

name and email -- 使用索引

name -- 使用索引

email -- 不使用索引

以上就是MySQL索引失效的几种情况汇总的详细内容。Linux就该这么学

相关文章:

  • java 获取方法的参数_Java 8中如何获取参数名称的方法示例
  • java gui程序运行_13.JAVA之GUI编程将程序打包jar
  • java输入输出学生成绩_java从键盘输入学生成绩,找出最高分,并输出学生成绩等级。...
  • java $ 解析api_Java版抖音解析接口
  • java 10的 6次方_【Java】 剑指offer(15) 数值的整数次方
  • java 方法 返回值 int_关于java字节流类的read()方法返回值为int的思考
  • java 迭代器复制_java设计模式之迭代器模式
  • java取文件类型_java如何通过文件描述符获取文件类型
  • java pdb_当12C PDB遇上JDBC
  • java复选框添加选中事件_Java的JTable中添加JCheckBox,点击事件处理问题,求高手指点迷津...
  • java thread类是抽象类_抽象类详解
  • 摘要认证 java_摘要认证及实现HTTP digest authentication
  • ssdp java_SSDP 简单服务发现协议
  • suse tomcat mysql_suse 安装jdk和tomcat工作记录
  • javascript java 语法_JavaScript
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android 控件背景颜色处理
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS相对定位
  • EOS是什么
  • gcc介绍及安装
  • js 实现textarea输入字数提示
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • MySQL用户中的%到底包不包括localhost?
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Vue.js-Day01
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端路由实现-history
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 数据结构java版之冒泡排序及优化
  • 学习HTTP相关知识笔记
  • 因为阿里,他们成了“杭漂”
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 如何在招聘中考核.NET架构师
  • 数据可视化之下发图实践
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C语言)字符分类函数
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Matlab)使用竞争神经网络实现数据聚类
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (动态规划)5. 最长回文子串 java解决
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (算法)Game
  • (原)本想说脏话,奈何已放下
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)memcache、redis缓存
  • (转)创业家杂志:UCWEB天使第一步
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET CLR Hosting 简介
  • .net core使用RPC方式进行高效的HTTP服务访问