上一篇我们讲述了哪些情况下可以使用索引(11种情况,这也是我们非常重视的sql优化的部分)。那么哪些情况下不适合使用索引呢?这里我们列出了7中情况。

1.在where条件中(包括group by以及order by)里用不到的字段不需要创建索引,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的。

2.数据量小的表最好不要使用索引

如果表中记录太少,比如少于1000个,那么是不需要创建索引的。表记录太少,是否创建索引对查询效率的影响并不大。甚至说,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化的效果。(了解:比如我们在一个表记录比较少的表上建立一个二级索引,那么查询的时候还需要经过索引,然后再进行回表那么这样消耗的时间可能比直接查询消耗的时间会更多)

3.有大量重复数据的列上不要建立索引

在条件表达式中经常用到的不同值较多的列上建立索引,但字段中如果有大量重复数据,也不用创建索引。比如在学生表中的性别字段上只有男和女两个不同的值,因此无须建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低数据更新速度。

索引的价值是帮你快速定位。如果想要定位的数据有很多,那么索引就失去了它的使用价值,比如通常情况下的性别字段。

说明:当数据重复度大,比如高于10%的时候,也不需要对这个字段使用索引

4.避免对经常更新的表创建过多的索引

①频繁更新的字段不一定要创建索引。因为更新数据的时候,也需要更新索引,如果索引太多,在更新索引的时候会造成负担,从而影响效率。

②避免对经常更新的表创建过多的索引,并且索引中的列尽可能少。此时,虽然提高了查询速度,同时却会降低更新 表的速度。

5.不建议使用无序的值作为索引

例如身份证、uuid(在索引比较时需要转为ASCII,并且插入时可能会造成页分裂,这些了解即可)、md5、hash、无序字符串等。

6.删除不再使用或者很少使用的索引

表中的数据被大量更新或者数据的使用方式被改变后原有的一些索引可能不再需要。数据库管理员应该定期找出这些索引,将他们删除,从而减少索引对更新操作的影响。

7.不要定义冗余或者重复的索引

①冗余索引

有时候有意或者无意的就对同一个列创建了多个索引,比如index(a,b,c)其相当于index(a) index(a,b)  index(a.b,c) .冗余索引只会增加维护的成本,并不会对搜索有什么好处。

②重复索引

比如

我们看到,col1既是主键、又给它定义一个唯一索引,还给它定义一个普通索引,可是主键本身就会生成聚簇索引,所以定义的唯一索引和普通索引是重复的,这种情况应该避免。

写在最后

索引是一把双刃剑,可提高查询效率,但也会降低插入和 更新的速度并占用磁盘空间。

选择索引的最终目的是为了使查询的速度变快,这篇文章以及上一篇文章是一些基本的准则,但不能拘泥于这些准则,一定要在以后的学习和工作中进行不断的实践,根据应用的实际情况进行分析和判断,选择合适的索引方式。

mysql数据库哪些情况不适合使用索引相关推荐

  1. SQL查询优化方法 提高SQL查询效率 数据库的哪些字段适合添加索引

    如何提高sql的查询效率 在正确的字段上创建索引. 优化查询sql的写法(特别是where语句的写法). 一.数据库的哪些字段适合添加索引 表的某个字段值得离散度越高,该字段越适合选作索引的关键字.主 ...

  2. Mysql数据库查询好慢,除了索引,还能因为什么?

    mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题. 遇到这种问题,我们一般也会想到是因为索引. 那除开索引之外,还有哪些因素会导致数据库查询变慢呢? 有哪些操作,可 ...

  3. 为什么MySQL数据库要用B+树存储索引?

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说两个多月前,小史通过了A厂的一面,两个多月后的今天,小史终于等到了A厂的二面. 简单 ...

  4. mysql存储base64位用什么类型_【漫画】面试现场:为什么MySQL数据库要用B+树存储索引?...

    推荐阅读:MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒! 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说 ...

  5. 为什么MySQL数据库要用B+树存储索引

    A:为什么MySQL数据库要用B+树存储索引? Hash的查找速度为O(1),而树的查找速度为O(log2n),为什么不用Hash作为数据库的存储索引呢? 树的话,无非就是前中后序遍历.二叉树.二叉搜 ...

  6. 漫画 | 为什么 MySQL 数据库要用 B+ 树存储索引?

    作者 |  channingbreeze 责编 | 郭芮 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说两个多月前,小史通过了A厂 ...

  7. mysql数据库in函数查询是否走索引

    mysql数据库in函数查询是否走索引? IN 通常是走索引的,当IN后面的数据在数据表中超过30%的匹配时是全表的扫描,不会走索引,因此IN走不走索引与后面的数据量有关系! 昨天恰好在工作中遇到了这 ...

  8. MySQL数据库学习【第九篇】索引原理与慢查询优化

    一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...

  9. java代码内创建mysql索引_点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)...

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...

最新文章

  1. 牛客网NOIP赛前集训营-普及组(第一场)
  2. 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序
  3. 如何添加显示桌面图标置于快速启动栏
  4. 禾多推出高精度定位和自动驾驶验证平台!倪凯:助力行业量产,定位中国向导...
  5. InfluxData【环境搭建 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
  6. openstack介绍(二)
  7. 上海大学计算机组成原理实验13,上海大学计算机组成原理实验报告11.doc
  8. MFC多线程的创建,包括工作线程和用户界面线程
  9. 服务器2016修改时间,服务器时间错误
  10. 面部识别 vs 情绪状态,你还能守住自己的秘密吗?
  11. Linux服务器配置多台虚拟主机
  12. 不可错过!普林斯顿陈丹琦最新《大语言模型理解》2022课程!全面讲述BERT、GPT、T5等大模型,附Slides...
  13. c语言中的数据类型作用,C语言数据类型是什么?
  14. ABAP SY-SUBRC的含义解析
  15. 中国手机行业发展现状及趋势,行业市场集中度上升「图」
  16. 世界星载SAR发展8—— Discover II (发现者2)(1998,美国)
  17. html选项卡jq,js/jQuery简单实现选项卡功能
  18. 我们无处安放的青春不言败
  19. 博大考神 职称 计算机 看什么,word2003博大考神题库答案职称计算机2
  20. System.arraycopy()使用方法

热门文章

  1. CSAPP 第3章 机器级编程课后作业
  2. 交叉验证方法思想简介
  3. 欢迎高校使用云创大数据的高质量大数据和人工智能免费直播授课!
  4. Android平板app开发布局文件,Android平板开发相关
  5. 再见c罗再见梅西_再见眼镜你好smartglasses
  6. git强制覆盖master分支
  7. 分享个碧蓝航线脚本,自律捞船神器
  8. iOS开发-类似微信录音上滑取消功能
  9. elasticsearch从入门到入门系列(二)---快速入门C
  10. 2017年中国程序员调查分析:大数据就业前景广阔