MYSQL索引创建时机和不适用的时机

👏作者简介:大家好,我是小周同志,25届双非校招生Java选手,很高兴认识大家

📕学习出处:本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇

🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦

什么时候需要 / 不需要创建索引?

索引的优点:

  • 大大提高的查询速率。尤其是b+树,时间复杂度为O(logdN),当d就是最大节点为100时,应付千万级数据的查询,也只需要3-4次io操作。

索引的缺点:

  • 占用物理磁盘空间。

  • **索引需要维护。**比如修改这个索引的时候,索引内部会进行自适应排序。

  • 降低表的增删改的效率。因为每次增删改索引,B+ 树为了维护索引有序性,都需要进行动态维护

什么时候适用索引?
  • 字段有唯一性限制的

  • **经常用于where查询条件的字段。**可以增加查询的效率,当有多个字段查询条件时,可以使用联合索引。

  • **用于 GROUP BYORDER BY 的字段。**这样在查询的时候就不需要再去做一次排序了,因为建立索引之后在 B+Tree 中的记录都是排序好的。

什么时候不适用索引?
  • **没有用 whereGROUP BYORDER BY的。**既然 无法做到快速定位,那么就相当于索引没直到应有的作用,就不需要索引了,反而浪费了物理磁盘空间。

  • 存在大量重复数据的列不需要索引。 因为大量重复数据的话,索引就会进行多次磁盘和内存的io操作,性能消耗贼大,如果这样的话,还不如不加索引。MYSQL有个查询优化器,发现某个数据在表中出现的百分比比较大,会忽略索引,进行全表扫描。

  • **表数据太少,也不需要创建索引。**不需要索引也可以很快的找到数据,那么索引就没必要加了。

  • **经常更新的字段不需要创建索引。**索引字段被更新之后,b+树会进行自适应重排序,会影响数据库的性能。

相关推荐
浮游本尊43 分钟前
React 18.x 学习计划 - 第九天:React 18高级特性和最佳实践
前端·学习·react.js
阿蒙Amon1 小时前
JavaScript学习笔记:5.函数
javascript·笔记·学习
大江东去浪淘尽千古风流人物1 小时前
【bug】bug记录学习,Win系统下爆栈的表现, chkstk.asm 实际是栈溢出
学习·bug
正经教主1 小时前
【Trae+AI】和Trae学习搭建App_2.2.1:第4章·安卓APP调用Express后端实战1:前端调用后端
人工智能·学习·express
正经教主1 小时前
【Trae+AI】和Trae学习搭建App_1.2:第2章·App开发环境配置
android·学习·android studio
d111111111d1 小时前
STM32外设学习-读取芯片ID。(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
islandzzzz1 小时前
从0开始的SQL表DDL学习(基础语法结构、索引/约束关键字)
数据库·sql·学习
TL滕2 小时前
从0开始学算法——第十四天(数组与搜索练习)
笔记·学习·算法
Hooray112 小时前
后端_Flask学习笔记
笔记·后端·python·学习·flask
西南胶带の池上桜2 小时前
支持pytorch的模型学习环境创建流程(长期更新)
人工智能·pytorch·学习