Mysql数据库索引B+树实现的一些学习笔记

 

 

InnoDB存储引擎中有页(Page)的概念

页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K,在MySQL中可通过如下命令查看页的大小:

     mysql> show variables like 'innodb_page_size';

二叉树的深度会影响查询的料率,设计引擎的目的是尽可能多的存更多的数据的情况下减少二叉树的深度。

一次磁盘I/O的消耗很大,远远大于内存中查询的效率,所以会通过一次磁盘I/O查询到多个索引存到内存,然后在内存中查询(高效),此为B树较红黑树的优点

B+树只有叶子节点才存储数据data,非叶子节点只存储索引,每页16K的大小大概可以存储1710(bigint8字节 指针6字节=14字节,16K/14=1710),所以对于存储数据一般深度2-4的B+树就可以够用。

hash比BTree的优点:hash只适合准确查找,一次哈希可以得到磁盘存储位置,但是不适合范围查找,需要遍历。

 

数据表对应文件:

MyISAM存储引擎:不支持事务   非聚集索引(索引和数据分散存储)

*.frm :存储表的定义,表的结构文件

*.MYD :存储表的数据  d: data

*.MYI: 索引字段存储表的位置 i: index  B+树存储位置

InnoDB存储引擎: 聚集索引(数据索引和数据表存储在一起)(叶子节点包含完整的数据记录)

*.frm

*.ibd:InnoDb的表数据文件和索引文件

 

数据结构可视化网站推荐:

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

 

二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树的学习可以参考下面文章:

https://blog.csdn.net/qq_21993785/article/details/80576642

B+Tree在数据库索引上拥有独特优势的原因

https://blog.csdn.net/qq_21993785/article/details/80580679

你可能感兴趣的:(Mysql)