これは私の理解であり、完全に正しいとは限りません。
通常、データベースの実装では B ツリーがインデックスに使用されるため、ユーザーにすべての列にインデックスを付けるよう強制したい場合を除き、フィールドごとにデフォルトで B ツリーを作成する必要はありません。このように多数のインデックスがあると、ほぼすべてのケースで読み取りが高速になりますが (すべてにインデックスがあれば、完全なテーブル スキャンを実行する必要はありません)、挿入/更新/削除が非常に遅くなります。ツリーごとに更新されます。ご存じのとおり、最新のデータベースでは少なくとも 1 つのインデックス (主キー) が必要になるため、主キーのキーと適切なノードへのポインターを持つ B ツリーが少なくとも 1 つ必要になります。
B ツリー インデックス内のすべてのノードには、それが表す完全なオブジェクトへのポインタ/参照が必要です。
今後作成されるインデックスには、曲名、アーティストなど、インデックスで指定した属性が含まれますが、対応するノードへのポインター/参照は引き続き含まれます。したがって、たとえば曲のタイトルを変更する場合、すべてのインデックスが参照する参照ノードを変更する必要があります。変更された参照を属性として持つインデックスがある場合は、そのインデックス自体の値を変更する必要があります。
残念ながら、削除/更新時に他の B ツリーを強引に通過する必要があるというあなたの考えは正しいと思います。これは、多くのインデックスを使用することの欠点の 1 つです (更新/削除時間が遅くなります)。参照されているノードを削除するだけでは、削除されたオブジェクトへのポインタが残る可能性が高く、(言語によっては) なんらかの形式の NullPointerException が発生します。これを防ぐには、参照をすべてのツリーから削除する必要があります。
ただし、インデックスのフル スキャンを実行する方が、テーブルのフル スキャンを実行するよりもはるかに優れていることに注意してください。