【问题标题】:Databases: More questions about (B-Tree) indexes数据库:关于(B-Tree)索引的更多问题
【发布时间】:2011-09-26 06:27:34
【问题描述】:
我一直在研究索引,有一些问题困扰着我,我认为这些问题很重要。
如果您可以提供帮助或参考来源,请随时提供。
Q1: B 树索引有利于快速访问表中的特定行。考虑到一个 OLTP 系统,同时有许多访问,读和写,你认为在这个系统上有很多 B 树索引会是一个缺点吗?为什么?
Q2:为什么 B-Tree 索引没有被完全占用(如果我没记错的话,通常只有 75% 被占用)?
【问题讨论】:
标签:
database
data-structures
indexing
b-tree
【解决方案1】:
Q1:我在实践中没有管理大型索引系统的经验,但典型的多处理环境缺点适用于在系统上拥有多个 B 树索引——上下文切换成本、缓存失效和刷新、IO 调度不佳,并且列表上升。另一方面,IO 本质上应该是非阻塞的,以最大限度地利用资源,如果没有某种并发性,即使以协作方式完成,也很难做到这一点。 (例如,有些人推荐基于事件的系统。)此外,对于许多实际应用程序,您将需要多个索引结构,尤其是在您研究 OLTP 时。这里最重要的是良好的 IO 调度、访问模式和数据缓存,具体取决于所述访问模式。
Q2:因为分裂和重新平衡节点的成本很高。速度的天真方法是“只有在满了的情况下才分开”。鉴于此,有两个极端——一个节点刚刚分裂并且是半满的,或者一个节点是满的,所以它会在下一次。案例(50% 和 100%)之间的“平均”为 75%。是的,从数学的角度来看,这有点糟糕的逻辑,但它揭示了 75% 数字出现的根本原因。