数据库理解感悟

一个神奇的网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html      可以准确的看到B+树插入、删除、查找的动态过程

B树和B+树的区别:

B树的数据和索引在每一个节点上,B+树的所有数据都存在于叶子结点,非叶子结点只是主键。正因为如此,B+树的每个结点能存储的主键,相比较B+数会比较多,这样B+数的高度会比B树要小很多,查找速度会更快。

 

读取数据的时候,扫描硬盘的数据到内存,进行查找,硬盘的最小单位就是页,默认大小为16KB,页不能太大,也不能太小,太大的话,读取硬盘的数据到内存,内存的压力会变大。B+树的一个节点就是一个页,页内数据行之间是单链表,有上限指针和下限指针,页与页之间是双链表。页的指针存储的为所指页的页码。

 

每个页的数据页容量有限,导致数据字段也是有限的。当数据页字段过大时,InnoDB会使用行溢出机制,行溢出机制会把超长字段拆分到下一个数据页,大大增加了磁盘的IO。

数据库本身做了优化,行溢出的数据,都会被一起都放在Blog页,如果查询的时候没有查询该字段,不会增加磁盘IO,如果查询到该字段,一样会增加磁盘读写,是个折中的方案,被所以数据库字段要慎重选择。

posted @ 2021-11-19 09:24  17601621550  阅读(41)  评论(0编辑  收藏  举报