首页 > 数据库 >Mysql索引详解

Mysql索引详解

时间:2023-01-17 23:57:23浏览次数:60  
标签:节点 叶子 索引 详解 Mysql 磁盘 数据 主键

mysql的InnoDB存储引擎的索引底层就是B+树,用一个页作为一个叶子节点

B+树特点:排序(左小右大),叶子节点有指针(双向),非叶子节点的数据都冗余了一份在叶子节点,一个节点有多个元素

InnoDB页

详解

https://blog.csdn.net/weixin_26786277/article/details/113121272

概念

页是InnoDB最小的存储单位,16KB。

InnoDB是一个存储引擎,也就是一个程序,他主要负责存数据,取数据。主要是和磁盘打交道。在InnoDB里面向磁盘里面写数据,取数据,操作的都是一页数据(16kB)。

why?

如果我们不考虑页,假设表里有八条数据(1,2... 8),这八条数据肯定是在磁盘里面,我们执行select * from table where id = 7; 我们就要从磁盘数据中取出第一行数据id =1,判断不等于在取,id=2不等于在取,直到找到id =7,进行了7次磁盘IO,速度会很慢。所以我们要进行优化,使用页数据,这样我们在去取数据的时候,逻辑还是一样的,我们还是取第一行数据,第一行数据不足16kb,但是我们取数据最小单位是页,所以我们会把整条表的数据全部取出来(只要没有超过16KB),把他们放在内存中,这样的话我们磁盘IO只进行了一次,其他的操作都是在内存中,减少了磁盘IO。

内部结构

注意,假如我们有六条数据,无序进行插入,第一页(1,3,5,6)已经满了,我们在插入新数据的时候就要新增一页,我们插入4,这时候这个4还是插入在第一页,因为按照主键自增的原则排序,但是第一页已经满了,所以我们要把6移动到第二页中,插入2,就要再次进行改动,这样效率慢,性能高。所以我们不建议用UUID作为主键,因为它很长占空间,并且无序。

mysql中就是用一个页作为一个叶子节点

B+树特点:排序(左小右大),叶子节点有指针(双向),非叶子节点的数据都冗余了一份在叶子节点,一个节点有多个元素

 

我们所看到的这个B+树其实和主键的关系比较大,完全是按照主键的排序一步一步形成的。所以这个B+树就是我们所说的主键索引.

索引就是一个B+树,主键索引就是按照主键排序所生成出来的一个B+树。并且叶子节点存的是我们整张表的数据 。非叶子节点 --- 索引页,叶子节点 ---- 数据页

select * from table where id =5;

走索引:从上往下,利用了索引页,加快了查询速度。        全表扫描:叶子节点从头开始遍历

 

标签:节点,叶子,索引,详解,Mysql,磁盘,数据,主键
From: https://www.cnblogs.com/zhuyilong/p/17058840.html

相关文章

  • vuex详解
    vuex的介绍vuex是vue.js应用程序中的状态管理模式,它是集中式存储管理所有组件的数据状态,vuex解决了多个视图之间的数据交互同步,不需要进行组件连接再传递数据。vuex的5大......
  • MySQL笔记01: MySQL入门_1.1 MySQL概述
    1.1MySQL概述MySQL是一个关系数据库管理系统(RelationalDataBaseManagementSystem,RDBMS)。它是一个程序,可以存储大量的种类繁多的数据,并且提供服务以满足任何组织的需要......
  • python操作mysql的库--Pymysql
    安装pipinstallpymysql安装json,用于加载json配置文件参数pipinstallsimplejson创建实验用表MariaDB[test]>createtablestudent(idintnotnullauto_......
  • 事件详解
    事件概念  事件的本质其实也是委托,只不过加了event关键字语法:publicevent委托名事件名注意:  定义事件时,一般要有一个委托类型,用这个委托类型来定义处理事件......
  • MySQL8.0.21升级8.0.31
    一、停止systemctlstopmysqld.service二、下载8.0.31版本rpm包cd/tmpwgethttps://cdn.mysql.com/archives/mysql-8.0/mysql-community-common-8.0.31-1.el8.x86_64......
  • mysql查看、修改数据库字符集
    showVARIABLESlike'character%';character_set_client:客户端请求数据的字符集character_set_connection:客户机/服务器连接的字符集character_set_database:默认数据库的......
  • 初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。
    谷咕咕最近在准备面试,本来想多看看堆和栈的关系,看看发现又设计到gc(GarbageCollection)垃圾回收机制,发现盲区太多了,就去粗略的学习了一下jvm(java虚拟机),发现之前只会写程序,底......
  • jdbc连接mysql简单实例,在java项目中添加数据库驱动包
    傻瓜式教学从创建项目,到数据库建立,访问一步到位打开eclipse,newjavaProject创建一个普通的java项目右击刚才新建的项目,选择BuildPath—>ConfigureBuilePath选择addExte......
  • 谈谈对数据库中索引的理解
    索引的作用:因为数据的记录很多,为了方便查找,提高查询的效率。索引是对数据库表中一个或多个列的值进行排序的数据结构,以协助快速查询、更新数据库表中数据。索引的原理:把要......
  • Redis和MySQL如何保持数据一致性?强一致性,弱一致性,最终一致性
    强一致性,任何一次读都能读到某个数据的最近一次写的数据。系统中的所有进程,看到的操作顺序,都和全局时钟下的顺序一致。弱一致性,据更新后,如果能容忍后续的访问只能访问......