Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ B-treeインデックス化 | クエリ最適化.インデックス
/
SQL最適化とクエリ機能

bookB-treeインデックス化

メニューを表示するにはスワイプしてください

B-treeインデックスは、データベースで大規模なデータを効率的に整理および検索するために一般的に使用される平衡木データ構造。 B-treeは**二分探索木(BST)**と非常に似ているが、B-treeのノードは2つ以上の子ノードを持つことができる。

B-treeはノード内にソートされた順序でキーを格納し、ルートからリーフノードまで階層的にたどることでデータの高速な取得を可能にする。B-treeインデックスは範囲クエリ等価検索に適しており、データベースのパフォーマンス最適化に広く利用されている。

仕組み

B-treeインデックスはデータを階層的に構成し、各ノードは固定数のキーと子ノードへのポインタを持つ。 B-treeはすべてのリーフノードが同じレベルにあることを保証することでバランスを保ち、検索操作を最適化する。 特定のキーを検索する際、B-treeアルゴリズムはルートノードからリーフノードまで木をたどり、二分探索を利用して目的のキーを効率的に見つける。

インデックスルックアップは、ツリーをたどってリーフノードに到達し、リーフノードの連鎖をたどって一致するレコードを見つけ、ディスクから実際のデータを取得する操作です。

図では、キー 302 のルックアップを示しています:

  1. 検索ツリー構造は、各ノードが2つのポインタを持つツリーの一種で、左ポインタは親ノードより小さい値を持つ子ノードを、右ポインタは親ノードより大きい値を持つ子ノードを指します;

  2. B-tree では、ルートノードに複数のインデックス値を保持できます。例えば、ルートに3つの異なる値が含まれる場合、3つのポインタがそれぞれそのキー値間の値の範囲を示します;

  3. 302 のようなキーを検索するには、ルートノードから開始し、適切なポインタをたどってリーフノードに到達します。図の赤枠で示されているように、3つのツリーブロックをたどることで検索が完了します;

  4. 302 から始まる値の範囲を検索するには、リーフノード間の水平ポインタを利用します。例えば、302 から 502 までの値を取得するには、リーフノードを順にたどります。

Note
注意

B-treeインデックスで検索に使用されるキーは、データベーステーブルのインデックス対象列に格納された値から取得されます。例えば、インデックスが "client_id" 列に作成されている場合、検索キーは実際の "client_id" の値となります。インデックス対象列の各 一意の数値 がB-treeインデックス内のキーとして機能し、対応するテーブル行の検索と取得を容易にします。

利点と欠点

標準的な二分探索木データ構造とは異なり、B-treeノードは2つ以上の子ノードを持つことができます。ノードごとの最大子ノード数のデフォルト値は通常16に設定されています。

インデックスの実装

PostgreSQLでカラムにB-treeインデックスを作成するには、次のSQLコマンドを使用します:

CREATE INDEX index_name ON table_name USING BTREE (column_name1, column_name2,...);

B-treeインデックスはSQLにおけるデフォルトインデックスであるため、次の文でも作成できます:

CREATE INDEX index_name ON table_name(column_name1, column_name2,..);
Note
注意

SQLでは、主キー制約を持つテーブルを作成すると、ほとんどのデータベース管理システムは主キーで指定されたカラムに対して自動的にインデックスを作成します。このインデックスは主キーの一意性制約を保証するのに役立ち、また主キーのカラムを使った検索や結合を含むクエリのパフォーマンスも向上させます。

question mark

PostgreSQLでB-treeインデックスの再編成や再バランスが発生しない操作はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  2
some-alt