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操作就可以从千万级的数据中查询到数据!
from 蜡笔没了芯

浙公网安备 33010602011771号