汽车网站建设可行性分析,做网站程序,中国水电建设集团港航建设有限公司网站,欧美风企业网站 英文模板为什么MySQL底层数据结构选择B树#xff1f;#xff08;而不是B树等其他数据结构#xff09;
B树非叶子节点#xff0c;不存放数据记录#xff0c;仅存放指针与关键字#xff0c;所以一个B树非叶子节点可以存放更多子节点信息#xff0c;有利于降低树高度#xff0c;从…为什么MySQL底层数据结构选择B树而不是B树等其他数据结构
B树非叶子节点不存放数据记录仅存放指针与关键字所以一个B树非叶子节点可以存放更多子节点信息有利于降低树高度从而减少搜索IO次数。 相反B树的叶子节点与非叶子节点数据结构一致存放 数据记录子节点指针 关键字导致B树非叶子节点可存放子节点指针空间减少树高度增高IO次数增多性能降低。故不选择。
为什么树越高磁盘IO次数越多
InnoDB 存储引擎存在自身文件管理机制其最小存储单位为页Page, 大小为 16KB。页即为B树中节点存储结构。所以B 树越高层级节点搜索次数越多对应的磁盘IO次数随之增多引擎性能随之降低。
扩展 计算机中磁盘存储数据最小单元是扇区一个扇区的大小是 512字节 。文件系统如XFS/EXT4最小单元是块一个块的大小是 4KB。
【经典问题】
一颗B树一般可以存放多少条数据记录
InnoDB 页的默认大小 16KBInnoDB 主键ID bigint 类型大小为 8 BytesInnoDB 中指针大小为 6 Bytes互联网业务数据记录大小通常为 1KB;叶子节点只放置数据记录数量16KB / 1KB 16;
开始计算 假设 Mysql B 树高为 3 层。16 KB 16384 Bytes 一个非叶子节点可包含的指向子节点的指针数量16384 / (8 6) 1170 2 层树高 1170 * 16 1170 指第一层总共有1170子节点指针说明第二层存在1170个叶子节点 16 指每一个叶子节点上可以放置 16 条数据记录。所以2层树高的B树可以存放 1170 * 16 条数据记录。 3 层树高1170 * 1170 * 16; 与上同理。新增了一层非叶子节点则需要多乘以一层的子节点数量这里就已经满足千万级别数据量的数据库。