首页 > 数据库 >MySQL索引结构演变历史

MySQL索引结构演变历史

时间:2023-11-21 15:07:06浏览次数:43  
标签:演变 链表 索引 查找 二叉树 MySQL 数据 节点

MySQL索引结构演变历史

什么是索引

索引定义:索引是依靠某些数据结构和算法来组织数据,最终引导用户快速检索出所需要的数据

例如新华字典中,我们可以通过偏旁部首或者拼音快速找到我们需要查找的字;这里的偏旁部首和拼音就是索引

索引选择数据结构历史

1.有序数组

优点 :

可以通过下标随机访问数据

缺点:

查找数据时需要将整个表数据都加载到内存中,内存压力非常大

且存储数据时需要考虑到指针移动问题,

2.链表

优点:

  1. 可以快速定位到上一个或者下一个节点
  2. 可以快速删除数据,只需改变指针的指向即可,这点比数组好

缺点:

  1. 无法向数组那样,通过下标随机访问数据
  2. 查找数据需从第一个节点开始遍历,不利于数据的查找,查找时间和无需数据类似,需要全遍历,最差时间是O(N)

3.二叉查找树

二叉树的优缺点:

  1. 查询数据的效率不稳定,若树左右比较平衡的时,最差情况为O(logN),如果插入数据是有序的,退化为了链表,查询时间变成了O(N)
  2. 数据量大的情况下,会导致树的高度变高,如果每个节点对应磁盘的一个块来存储一条数据,需io次数大幅增加,显然用此结构来存储数据是不可取的

正常数据

MySQL索引结构演变历史_二叉树

异常数据

MySQL索引结构演变历史_二叉树_02

4.平衡二叉树(AVL树)

平衡二叉树是一种特殊的二叉树,所以他也满足前面说到的二叉查找树的两个特性,同时还有一个特性:

它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

平衡二叉树相对于二叉树来说,树的左右比较平衡,不会出现二叉树那样退化成链表的情况,不管怎么插入数据,最终通过一些调整,都能够保证树左右高度相差不大于1。

但是当数据量非常大时,也会和二叉树一样出现树的高度过高问题

5.B-树

MySQL索引结构演变历史_数据_03

由平衡二叉树变化而来,每个节点中存储多个元素,节点中多个元素通过指针关联,解决了数据量大时,树的高度过高问题;

但是无法解决范围查找问题,例如查找[15,36]还是需要访问7个磁盘块(1/2/7/3/8/4/9)

6.b+树

MySQL索引结构演变历史_平衡二叉树_04

优化后 只在叶子结点中存储数据,其他节点只存储关键字,叶子结点之间通过双向指针关联

解决了范围查找问题

查找过程

先定位范围的最大值和最小值,然后子节点中依靠链表遍历范围数据

标签:演变,链表,索引,查找,二叉树,MySQL,数据,节点
From: https://blog.51cto.com/u_16337916/8501369

相关文章

  • phpstudy无法启动MySQL服务的解决方案
        MySQL这个服务,一直启动不了,原因是phpstudy里的MySQL服务与本地的MySQL占用的都是3306端口,产生了冲突。   在不想卸载好不容易在本地安装的MySQL服务,那么就可以采用以下办法解决服务冲突:        首先按下win+R执行services.msc进入服务,查找到M......
  • django连接mysql pycharm操作sqlite和mysql
    1如果项目使用sqlite,不需要额外配置,直接操作即可2django默认情况链接mysql,用的驱动是mysqldb模块,python3.x以后,这个模块用不了了,咱们用的全都是pymysql,需要做个替换3showmigrations:查看哪些记录更改了,但是没有同步到数据库中3如果使用mysql,需要配置如下: -1配置文件中配置......
  • 使用Java与MySQL开发计算器
    [实验目的]1.掌握软件开发的基本流程2.掌握常用的软件开发方式和工具。[实验内容]设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录(保存数据最好使用数据库)。[实验环境及开发工具]使用MicrosoftVisio作绘图工具使用......
  • MySQL主从搭建及Django实现读写分离
    mysql主从搭建#1主从同步的流程或原理1)master会将变动记录到二进制日志里面;2)master有一个I/O线程将二进制日志发送到slave;3)slave有一个I/O线程把master发送的二进制写入到relay日志里面;4)slave有一个SQL线程,按照relay日志处理slave的数据;#2在home目录下创建mys......
  • mysql 统计所有表的数据量
    在mysql里是可以查询​​information_schema.tables​​这张表的,然后获取我们想要的信息:SELECTtable_rows,table_nameFROMinformation_schema.tablesWHERETABLE_SCHEMA='mysql'andtable_namenotin('db','func')ORDERBYtable_rowsDESC;转自:https://z......
  • 02-MySQL的安装与配置(Windows)
    MySQL数据库MySQL关是一种关系数据库管理系统,所使用的SQL语言是用于访问数据库的最常用的标准化语言,其特点为体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,在Web应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之......
  • 01-MySQL概述
    数据库相关概念目前主流的关系型数据库管理系统 ......
  • MySQL
    MySQL下载方法下载路径https://www.mysql.com/MD5校验下载的软件包[root@localhost~]#md5summysql-5.7.38-1.el7.x86_64.rpm-bundle.tar826ce05d0379574a03935b62ae02db88mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar解压下载的软件包[root@localhost~]#tar-xvfmy......
  • pycharm链接数据库 django链接MySQL
    #找到pycharmdatabase选项(三个地方查找)#选取对应的数据库下载对应的驱动"""明明链接上了数据库但是看不到表无法操作这个时候你只需要将刚刚创建的链接删除重新链接一次即可"""  #1.配置文件中配置DATABASES={'default':{'ENGINE':'django.db.back......
  • 常见面试题-MySQL软删除以及索引结构
    为什么mysql删了行记录,反而磁盘空间没有减少?答:在mysql中,当使用delete删除数据时,mysql会将删除的数据标记为已删除,但是并不去磁盘上真正进行删除,而是在需要使用这片存储空间时,再将其从磁盘上清理掉,这是MySQL使用延迟清理的方式。延迟清理的优点:如果mysql立即删除数据,会导......