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

MySql索引(index)

一、使用场景

数据进行select查询时

1、先遍历表

2、再把行给带入条件中,看条件足否成立

3、条件成立就保留,不成就跳过

若表比较大,则遍历的成本比较高,至少为o(N)

数据库把数据存储在硬盘里,每读取一个数据,都需要读取硬盘,这个开销本身就是很大的

索引是针对查询操作而引发的的优化手段,通过索引来加快查询的速度,避免针对表进行遍历

索引能提高查洵速度,但也有代价:

1、占用更多的空间,生成索引是需要一系列的数据结构,以及一系列的额外的数据,来储存在硬盘空间的

2、可能会降低修改插入删除的速度

二、使用

查看索引:show index from 表名

创建索引:create index 索引名字 on 表名

删除索引:drop index 索引名字 on 表名

主键,nuique,外键都是会自动生索引的

三、特点

一个索引是针对一个列来指定,只有针对这列进行查询时,查询速度才能被优化

一个表可以有多个索引

创建索引也一个危险操作

创建索引的时候需要对现有的数据,进行个大规模的重新整理

若当前表是空表或者数据不多,创建索引都没有问题,但如果这个表很大,创建索引也很容易将服务器卡住

一般创建索引都是在创建表的时候规划好的,一旦表使用很久了有很多数据了再去想修改索引就要慎重

重新创建索引:搞个新机器,创建空表,创建索引再把旧机器数据导入新机器中,用新机器代管旧机器

删除索引中,手动创建的索引可手动删除,如果是自动创建的索引(主键,外键,unique),不可删除

该操作也是危险操作(数据很重要),索引也是通过一定的数据结构来实现的

四、B树

红黑树:精准匹配,也可范围查询,也能模糊匹配

B树:每个节点的度都是不确定的,一个节点上保存N个key就划分出N+1个区间,每个区间都衍生出一系列的子树

由于每个节点都是在个硬盘的区域内,一次读硬盘就读出了整个节点,多个key,再进行几次比较,树的高度大幅降低

一个节点中,虽可以保存N个key,但不是无限制的,达到一定规模就会触发节点的分裂

但如果删除的节点过多,也会触发节点的合并

五、B+树

数据库引入的索引是一个改进的数据结构:B+树(N叉搜索树)

1、B+树也是一个N又搜索树,一个节点存在N个key,被划分N个区间

2、每一个节点上N个key中,最后一个,就相当于当前子树的最大值

3、父结点上的每个key都会以最大值的身份在子节点对应区间内存在(key可能重复出现),最后叶子节点这层就会包含整个树的数据全集

4、B+树会使用链表这样的结构把叶子节点串起来,可以非常方便完成对数据集合的遍历,也很方便从数据集合中按照范围取出一个子集

六、B+树的优点(比之B树、哈希表、红黑树)

1、N叉搜索树,树的高度是有限的,降低IO的次数

2、非常擅长范围查询

3、所有查询最终还是要落到叶子节点上,查询与查询间的开销是稳定的

4、由于叶子节点是全集,会把行数据只存诸在叶子节点上,非叶子节点只是诸存一个用来排序的key,所以叶子节点非常占用空间,但非叶子节点则占不了多少空间

数据库是按行组织数据,创建索引的时候,是针对列创建

硬盘上还是要储存这些非叶子节点的,但当我们查询时,就可以把非叶子节点加载到内存,整体查询的比较过程就可以在内存中进行了,进一步减少了IO的访问次数

mysql索列实现,也是有一些变数,不仅只有B+树这一种情况

内部有个模块:储存引擎,提供了很多版本的实现

Innodb当前最常用的mysql储存引擎


http://www.kler.cn/news/337059.html

相关文章:

  • 第二十二天|回溯算法| 理论基础,77. 组合(剪枝),216. 组合总和III,17. 电话号码的字母组合
  • 工业缺陷检测深度学习方法
  • Python深度学习进阶与前沿应用:注意力机制、Transformer模型、生成式模型、目标检测算法、图神经网络、强化学习等
  • platformio.ini工程配置文件入门
  • Linux NFS 服务器 搭建
  • C++仿函数( 调用运算符重载)
  • 【JS】在 Node.js 和 Electron 中获取设备 UUID 的最佳实践
  • Leetcode203.移除链表元素-Python
  • 输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式
  • 【RabbitMQ】RabbitMQ学习
  • 钉钉x昇腾:用AI一体机撬动企业数字资产智能化
  • sqli-labs靶场第二关less-2
  • 在macOS上进行开发环境配置与应用开发详细的配置指南
  • k8s 之安装busybox
  • 【Python】Python知识总结浅析
  • 【SQL】掌握SQL查询技巧:数据筛选与限制
  • whereis命令:查找命令的路径
  • swift使用internvl2微调ocr文字检测(目标检测)
  • RabbitMQ(学习前言)
  • sqli-labs靶场第八关布尔盲注通关