Mysql的Innodb引擎

innodb 引擎中,一页的默认大小为16K(如果操作系统中的一页为4k,那么mysql 中的1页=操作系统中的4页)

可以使用SHOW GLOBAL STATUS like 'Innodb_page_size' 命令查看

 

使用的索引数据结构是B+树。数据结构有叶子节点与非叶子节点组成

 

 

 

 

b+树 的一个节点存储的内容是:

 非叶子节点 :主键+指针

 叶子节点:数据

 

byte:1byte = 8bit     1个字节是8个bit    【-128~127【 (-2)的7次方 ~ (2的7次方) - 1】

short:2byte,char:2byte        -32768~32767 【(-2)的15次方 ~ (2的15次方) - 1】

int:4byte                             -2147483648~2147483647 【 (-2)的31次方 ~ (2的31次方) - 1

long:8byte                          (-2)的63次方 ~ (2的63次方) - 1

 

float:4byte

double:8byte

boolean:1byte

 

那么 假设数据库一行的数据为1k ,那么一页的数据是16条。也就是一个叶子节点能存16条数据

再看非叶子节点,假设主键id为bigint类型,那么长度8B,指针大小在源码中为6B,一共是14B, 那么一页能存的条数为 16*1024/14=1170个。

那么高度为2的B+树能存储的数据为 1170*16=18720条, 高度为3是1170*1170*16=21902400(千万级条)

也就是说 一次主键查询 3次IO操作就可以从千万级的数据中查询到数据!

posted @ 2023-02-09 16:14  蜡笔没了芯  阅读(28)  评论(0)    收藏  举报