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

假如有这样一列code的值为'AAA','AAB','BAA','BAB' ,如果where code like '%AB'条件,由于前面是

模糊的,所以不能利用索引的顺序,必须一个个去找,看是否满足条件。这样会导致全索引扫描或者全表扫

描。如果是这样的条件where code like 'A % ',就可以查找CODE中A开头的CODE的位置,当碰到B开头的

数据时,就可以停止查找了,因为后面的数据一定不满足要求。这样就可以利用索引了。

2.如果是组合索引的话,如果不按照索引的顺序进行查找,比如直接使用第三个位置上的索引而忽略第一二个位置上的索引时,则会进行全表查询

索引为c1,c2,c3,c4

上图结果显示直接使用c3是全表查询,无法使用该索引的,所以c3字段使用索引的前提是c1,c2两字段均使用了索引。

3.条件中有or

应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

可以这样查询:

select id from t where num=10 union all select id from t where num=20

4.索引无法存储null值,所以where的判断条件如果对字段进行了null值判断,将导致数据库放弃索引而进行全表查询,如

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

a.单列索引无法储null值,复合索引无法储全为null的值。

b.查询时,采用is null条件时,不能利用到索引,只能全表扫描。

为什么索引列无法存储Null值?

a.索引是有序的。NULL值进入索引时,无法确定其应该放在哪里。(将索引列值进行建树,其中必然涉及到诸多的比较操作,null 值是不确定值无法比较,无法确定null出现在索引树的叶子节点位置。)

5.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

6.in 和 not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

7. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

–name以abc开头的id

select id from t where substring(name,1,3)='abc'

8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where num/2=100

应改为:

select id from t where num=100*2

总结

到此这篇关于MySQL索引失效的几种情况的文章就介绍到这了,更多相关MySQL索引失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

mysql or 索引失效_MySQL索引失效的几种情况详析相关推荐

  1. mysql索引失效_MySQL索引失效的底层原理详解,终于有人讲清楚了

    前言 吊打面试官又来啦,今天我们讲讲MySQL索引为什么会失效,很多文章和培训机构的教程,都只会告诉你,在什么情况下索引会失效. 比如:没遵循最佳左前缀法则.范围查询的右边会失效.like查询用不到索 ...

  2. mysql数据索引失效_MySQL索引失效的几种情况

    1.索引无法存储null值 a.单列索引无法储null值,复合索引无法储全为null的值. b.查询时,采用is null条件时,不能利用到索引,只能全表扫描. 为什么索引列无法存储Null值? a. ...

  3. mysql 子查询索引失效_mysql 索引失效的情况

    索引失效的几种情况 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用 ...

  4. 插入数据mysql索引失效_MySQL索引失效问题

    索引在我们使用MySQL数据库时可以极大的提高查询效率,然而,有时候因为使用上的一些瑕疵就会导致索引的失效,无法达到我们使用索引的预期效果,今天介绍几种MySQL中几种常见的索引失效的原因,可以在以后 ...

  5. like左匹配索引失效_MySQL索引失效问题

    索引在我们使用MySQL数据库时可以极大的提高查询效率,然而,有时候因为使用上的一些瑕疵就会导致索引的失效,无法达到我们使用索引的预期效果,今天介绍几种MySQL中几种常见的索引失效的原因,可以在以后 ...

  6. mysql多索引结构_MySQL 索引结构

    谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...

  7. mysql的索引优化_MySQL索引优化与分析(重要)

    建表SQL CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NULL DEFAULT '' COM ...

  8. mysql验证索引正确性_mysql索引测试

    生成测试数据: 创建表用于测试: /*创建t_user表用于数据测试*/ DROP TABLE IF EXISTS t_user; CREATE TABLE `t_user` ( `id` bigin ...

  9. mysql设置id值为索引值_MySQL 索引

    一.索引作用 提供了类似于书中目录的作用,目的是为了优化查询 (一).索引种类 1.B树索引(Balance Tree) 作用 Btree的设计理念,就是让查询能够快速锁定范围,特别适合于范围查询. ...

  10. mysql索引总结_mysql 索引类型以及创建

    文章归属:http://feiyan.info/16.html  自己还是小白,从借鉴别人的东西开始学习. 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没 ...

最新文章

  1. RESTful之过滤Filtering
  2. Flutter底部导航栏的实现
  3. 47 APScheduler安装及基本概念
  4. Socket中listen
  5. suse mysql 5.5_suse 11 mysql 如何从5.1升级到5.5
  6. Mac下安装SecureCRT客户端并激活
  7. Drupal 覆写系统样式
  8. win10一直卡在自动修复_分享:win10自动修复过程中无法正确启动怎么办?
  9. python 版本控制及django,git的使用
  10. 专业运维配的vsftpd.conf
  11. 计算机网络自顶向下方法第6章-链路层和局域网.1
  12. dstat 性能监测工具
  13. 【短时平均过零率】基于matlab语音信号短时平均过零率【含Matlab源码 1721期】
  14. 对抗机器学习——Min Max模型(Towards Deep Learning Models Resistant to Adversarial Attacks)
  15. 浏览器之硬件加速机制
  16. php 数字英文中文版,php过滤只保留中文,英文以及数字的方法
  17. VS 默认添加Web 为 vb语言
  18. 联想计算机e480,【晒单】联想ThinkPad E480外观性能屌炸天
  19. Revel 企业级 Go 应用开发框架
  20. 防火墙的策略路由PBR

热门文章

  1. 使用Java写入Excel下拉选择框选项过多不显示问题
  2. mac根目录无法新建文件夹
  3. 2017越南赛国家I题 Integer Rotation(暴力+判题技巧)
  4. 吉他入门教程之吉他音阶训练——认识音阶
  5. 收藏!从十篇顶会论文解读计算机视觉的未来之路!
  6. 点云采样FPS原理及实现
  7. Vue3 script setup
  8. Windows设置调节音量的快捷键
  9. 交安ABC考试单选练习题库
  10. SPSS——描述性统计分析——探索性分析