MySQLB+树一页为什么是16KB呢?

嗯...MySQL...2 02 2 年...B+树...一页是1 6 KB...我当时很困惑...
这个东西...可能和I/O有关...你知道...从磁盘读取数据...读一次...这个块是一页...1 6 KB。
时间...很简单...
B+树...非叶子节点...存储键和指针...叶子节点...存储数据...1 6 KB页...分配...非叶子节点存储键和指针...叶子节点存储数据...这个结构很明显...
存储容量...计算...非大节点...例如使用6 个。
字节... 1 个指针是 1 4 个字节... 1 6 kb 中可以存储多少个指针? 1 6 1 02 4 / 1 4 ...大约1 1 7 0...这个数字...非常关键...
叶子节点呢?例如行数据是1 KB...1 6 KB包含1 6 个项目...这很好...查询时...我可以一次看到很多项目...方便...
性能...B+树...高度低...1 6 KB页面...B+树高度很容易降低...例如,3 层...高度快...认为核心低...高度高...I/O时间高...时间需要...
例如在2 02 2 年...某个城市...有一个查询...1 000万条数据...如果一页1 6 KB...B+树的高度是3 级...每次查询...3 个I/O...这个效率K...高....
树的结构是这样的...存储计算...查询快...很多原因...后来才意识到...可能是我有偏见...我只想到这些...没有别的...

学习小林coding 3.3 为什么MySQL采用B+树作为索引?

上周我们研究了数据库原理。

B+树适合MySQL索引。

主要原因是减少了磁盘IO。

B+树有很多节点。

一个节点存储多个索引。

这棵树不是很高。

树越短,读取的磁盘越少。

只有索引存储在非叶节点上。

没有保存数据。

内存使用较少。

叶子节点通过指针连接。

就像一个链接列表。

查询范围非常高效。

无需搜索整棵树。

B 树不工作。

B树节点存储数据。

每次都阅读更多内容。

查询范围也很慢。

AVL树和红黑树。

他们保持平衡。

但是元素很多,树还是很高。

二叉搜索树更糟糕。

极端情况下就变成链表了。

所以B+树是最好的。

MySQL使用正确。

只是想到了别的事。

B+树的插入和删除也很快。

节点是多余的。

无需调整太多。

我不确定这部分。

B+树是如何划分的?
算了。

图解MySQL索引--B-Tree(B+Tree)

上周我读了一篇关于 MySQL 索引的文章。

B-Tree和B+Tree是主要结构。

B-Tree的每个节点存储多个键值和子节点指针。
数据可以在任何地方。

请求必须从根节点开始逐层下降。
路径不固定。
该光盘可能需要多次读取。

范围请求遍历所有子树。
效率不太高。

B+Tree(MySQL默认使用此)
数据仅存储叶节点。
非叶子节点只有键值和子指针。

一个节点可以存储多个索引项。
树没那么高。

叶节点通过双向链表链接。
范围查询效率高。

例如 WHERE id BETWEEN 1 AND 1 0只需传递工作表列表即可。

查询路径稳定。
根生于叶。
磁盘IO的数量是固定的。

为什么不使用哈希/二叉树?
哈希索引不起作用。
仅可能完全匹配。

无法对字符串执行查询。
例如 > 或 BETWEEN。

我也解决不了。
哈希冲突也会影响性能。

哈希表已满内存。
不能直接在磁盘上使用。

二叉树/红黑树也有问题。

树的高度会改变。
随着数据的增加,高度也会增加 (O(logN))。

每个查询可能需要多次读取磁盘。

磁盘 IO 时间很高。
效率低。

B+Tree 使用许多分支。
通常超过 1 00 件。

按树的高度分3 -4 层。

每次IO读取一个节点。
通常为 1 6 KB。

这样磁盘访问次数就少很多了。

它如何应用于存储引擎?
MyISAM 引擎。
非聚集索引。

索引文件 (.MYI) 和数据文件 (.MYD) 是分开的。

B+Tree叶子节点存储数据行指针。

检查的时候要读两遍。

首先找到指针。
然后从数据文件中读取数据。

InnoDB 引擎。
聚集索引。

B+Tree主键索引的叶子节点直接存储整行数据。

二级索引的叶子节点存储主键的值。
需要做一道表格题。

还有一个自适应哈希索引。

为经常访问的索引页自动构建哈希索引。

加快等效查询速度。
但没有办法控制。
仅适用于内存。

优化提示:
使用自动递增主键。
减少分页符。

自增主键保证了数据的顺序输入。

B+树的叶子节点是从左到右填充的。

仅在节点已满时共享。
只需共享当前节点即可。

减少数据流量。

不自动递增的主键(例如 UUID)是随机输入的。

经常会导致页面分裂。
移动大量数据。

增加IO开销。

摘要:
B+Tree 回顾了设计。
磁盘IO效率高。

需求范围良好。
支持排序。

InnoDB 聚集索引。
优化数据存储。

自动递增主键减少了分页符。
更少的数据移动。

了解这些。
设计更好的表格和问题。

就是这样。
没关系。