B + Tree如何提高性能?
文章插图
> Photo by Anders Jildén on Unsplash
如以上示例所示 , B + Tree适用于"相等"条件和比较条件 。
非叶水平可以看出 , 查询仅需要通过非叶子节点上的搜索键来找到期望值 。因此 , 当在创建B + Tree索引的列上检索SQL查询时 , 仅需要经过几个级别的非叶节点 。
您必须考虑到非叶节点一定是一种开销 , 并且当有很多数据行时 , 它会变慢 , 因为可能有许多非叶级别 。
部分正确 。是的 , 需要扫描非叶节点以获得期望值 。实际上 , 扫描次数完全等于非叶级别的数目 。但是 , 实际上 , 我们硬盘上的块将比上述示例大得多 。通常 , 具有1000万个条目的表可以放在只有3个非叶级别的B + Tree中 。即使表非常大 , 例如数十亿规模 , 通常B + Tree的非叶级别数通常为4或5 。
因此 , 使用B + Tree索引可以大大减少SQL查询中扫描的硬盘块的数量 。
为什么要扫描的块数很重要?我想本文的读者可能没有计算机科学背景 , 所以我想对"块"进行简单的解释对于更好地理解问题可能是必要的 。
在我们的硬盘中 , 数据并不总是按顺序存储 。单个文件可能会拆分并存储到不同的块中 。因此 , 当我们读取文件/数据集/表时 , 为了扫描整个文件 , 有必要在不同的块之间跳转 。
通常 , 对于机械硬盘驱动器 , 有一个只能上下移动的磁头 。当需要从其他位置读取数据时 , 整个硬盘驱动器会将该位置旋转到磁头所在的位置 , 以便磁头可以读取数据 。
想象一下 , 我们正在扫描1000个块 。最坏的情况是磁盘将需要旋转1000次 。如果我们使用索引 , 则此数字将减少为4-5次 。因此 , 索引可以提高效果 。
摘要
文章插图
> Photo by Aaron Burden on Unsplash
在本文中 , 我分享了B + tree的外观以及它的工作方式和如何促进SQL查询(通常在相等和比较的条件下) 。
事实证明 , B + Tree不再是最高级的数据库索引 , 但我相信它可能是仍在大多数RDBMS中广泛使用的最经典的索引 , 它仍然是证明为什么我们需要数据库索引的最佳示例 表及其工作方式 。希望这对您足够有趣 。
(本文翻译自Christopher Tao的文章《Why We Need Indexes for Database Tables》 , 参考:
https://towardsdatascience.com/why-we-need-indexes-for-database-tables-25198145a8ca)
推荐阅读
- 茶叶为什么要冷藏保存,茶叶保质期多长时间
- 全面修复Windows图标显示错乱
- 在淘宝开店需要什么条件 开淘宝店要具备什么条件
- 淘宝运营方案策划 淘宝运营工作计划
- 太极练习伤膝盖 我们需要这样保护
- 练习太极拳的时候需不需要音乐
- 富士康|为什么职场中有人错把平台当本事?
- 寺庙|职场不得志?你需要看看这篇文章!!!【进来看看什么是蘑菇定律】
- 如何选择科学锻炼时间
- 木耳需要泡多久?