mysql B+树理解和 索引规则
- mysql的数据存储
因为内存的易失性。一般情况下,我们都会选择将 user 表中的数据和索引存储在磁盘这种外围设备中。但是和内存相比,从磁盘中读取数据的速度会慢上百倍千倍甚至万倍,所以,我们应当尽量减少从磁盘中读取数据的次数。另外,从磁盘中读取数据时,都是按照磁盘块来读取的,并不是一条一条的读。如果我们能把尽量多的数据放进磁盘块中,那一次磁盘读取操作就会读取更多数据,那我们查找数据的时间也会大幅度降低。如果我们用树这种数据结构作为索引的数据结构,那我们每查找一次数据就需要从磁盘中读取一个节点,也就是我们说的一个磁盘块。我们都知道平衡二叉树可是每个节点只存储一个键值和数据的。那说明什么?说明每个磁盘块仅仅存储一个键值和数据!那如果我们要存储海量的数据呢?
mysql 的最新默认inodb 存储 数据,innodb 底层二叉树结构,数据存储 的时候默认主键的 聚簇索引(主索引树,数据存储在此b+ 树上),B+ 树 是根据 查找优化下目前最优 存储方案 ,B+ 保留 二叉树的特点,但是层高 有限制,且节点不存储数据,数据最后存储在 最底层的(根结点上),也是所谓的数据页 ,这样做到,一部分数据存储在一个块上吗,利用磁盘读取一块数据可以做到不用多次I/O交互,加快查询速度。
- 索引
索引分为B+ 、 Hash索引、全文索引