一分快三-MySQL innodb的B+树到底长什么样,为什么MySQL要这么打算?

让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

你的位置:一分快三 > 公司资讯 > MySQL innodb的B+树到底长什么样,为什么MySQL要这么打算?
MySQL innodb的B+树到底长什么样,为什么MySQL要这么打算?
发布日期:2022-03-13 20:42     点击次数:181
配景

最近也许是咱们公司给的举止太过劲,业务数据量剧增,于是要计划优化数据库,作为才气猿的咱们都判辨数据是咱们的命根子,咱们做的责任即是处理数据,优化数据是咱们一直要面对的问题。

MySQL优化维度

一般优化数据库都需要从以下四个维度进行:

硬件 系统设立 数据库表结构 SQL 及索引

关于写业务的咱们的最获胜即是SQL及索引优化,后果最权贵性、价比最高的是索引优化。

意志索引

索引是匡助数据库(Mysql)高效获取数据的排好章程的数据结构。

旨趣

通过不休的收缩想要取得数据的限制来筛选出最终想要的遗弃,同期把立时的事件变成章程的事件,也即是咱们老是通过吞并种查找方式来锁定数据。

MySQL索引的数据结构有以下几种:

Hash表 B+树

使用Hash算法作为索引,有以下问题,是以大部分咱们采选的是BTREE。

存在Hash碰撞。 只可精准查找,无法用于局部查找和限制查找。 MySQL的B+树

咱们先往复首下大学数据结构里面的B+树,长这个款式。 

MySQL innodb的B+树到底长什么样,为什么MySQL要这么打算?

MySQL中的B+数其实是对传统的B+树做了纠正。

将叶子节点的数据单向指针变成双向指针,树高为2。

MySQL每次查1条数据都会查出1页数据(16K),然后在内存里面遍历,减少IO,大大擢升查询服从。

Mysql 在插入数据后,会自动给咱们排序。为什么要这么做呢?

1.先看一个例子,查询一条不存在的数据。 

MySQL innodb的B+树到底长什么样,为什么MySQL要这么打算? 

如若排序后,只用遍历到第4札纪录,就不错毋庸查了,如若不排序,就要遍历统共的数据。

2.相比多的数据查询,一经一页数据。 

MySQL innodb的B+树到底长什么样,为什么MySQL要这么打算? 

在页模式底部存储的数据,经受了链表的结构,插入相比快,然则查询相比慢,数据量相比大的时候就需要用空间换工夫,给页面加个目次,先去查页目次(通过二分法查找)。不加目次则需要查13次,加了目次只需要3次就就不错找到数据。这是排序的最主要原因。

3.跟着数据量的进一步增大,会出现许多页数据,然后再对多页数据进行索引,即经受了页目次的目次项,从而责罚页,而页目次责罚行。 

MySQL innodb的B+树到底长什么样,为什么MySQL要这么打算?

目次页的本体亦然页,存的数据是庸碌页的地址。是以不论是目次页一经页目次,都和数据存放在一道。这即是聚簇索引的由来(即主键索引和数据放在一道)。这么就酿成了B+树。

一棵树存放的数据量

一滑存放数据大小按1k算,则一页存放16行数据。高度为3的b +树,主键为BigInt(占8个字节),innodb 指针占(6个字节),就不错存放(16*1024/(8+6)*(16*1024/(8+6)*16=2千多万行数据。这即是一般一个表的数据非凡2千万就不提倡走索引,要分库分表的原因了。这么的结构就不错使得2千万的数据,只需要3次IO.

双向指针的原因

限制查找时,如若查找小于某个值的纪录,就需字据指针要反向查找,是以需要反向指针。

回表

当有多个字段构成组合索引时,此时的索引詈骂聚簇索引,叶子节点不存储数据,存储的是数据行地址,因为数据量相比大。这么查出后,通过纪录主键反查完好纪录。这即是回表。

介意

InnoDB中一定有主键索引,主键一定是聚簇索引,如若莫得则会使用一个unique索引作为主键索引,如若莫得unique索引,则会使用数据库里面的一个荫藏行id来作为东键索引。有且只须一个聚簇索引。非聚簇索引都需要回表。