这是我的理解,可能并不完全正确。
通常在数据库实现中,B 树用于索引,因此除非您想强制用户为每一列建立索引,否则默认为每个字段创建 B 树是不必要的。虽然如此多的索引几乎在所有情况下都会导致快速读取(对所有内容都有索引,您不必进行全表扫描),但它也会导致插入/更新/删除非常慢,因为相应的数据有在每棵树中更新。我相信您知道,现代数据库为您提供至少一个索引(主键),因此您将拥有至少一个 B 树,其中包含一个主键键和一个指向相应节点的指针。
B 树索引中的每个节点都应该有一个指向它所代表的完整对象的指针/引用。
未来创建的索引将包括您在索引中指定的属性,例如歌曲名称、艺术家等,但仍将包含指向相应节点的指针/引用。因此,当您修改歌曲标题时,您将需要修改所有索引引用的引用节点。如果您有任何将修改后的引用作为属性的索引,则必须修改该索引本身中的值。
不幸的是,我相信您的信念是正确的,即在删除/更新时您将不得不通过其他 B 树进行暴力破解,这是使用大量索引的缺点之一(更新/删除时间变慢)。如果您只是删除引用的节点,您最终可能会得到指向已删除对象的指针,这将(取决于您的语言)给您某种形式的 NullPointerException。为了防止这种情况,必须从所有树中删除它们的引用。
请记住,尽管对索引进行全盘扫描仍然比全表扫描要好得多。