ジョインバッファとは?
じょいんばっふぁ
ジョインバッファとは、データベースのテーブル結合処理を高速化するためにメモリ上に確保される作業領域のことです。
ジョインバッファ(Join Buffer)は、リレーショナルデータベース管理システム(RDBMS)がテーブルの結合(JOIN)処理を実行する際に使用する、メモリ上の一時作業領域です。MySQLをはじめ多くのデータベースエンジンで採用されています。
テーブルを結合する際、インデックスが利用できない場合や、大量の行を照合する必要がある場面では、データベースは内側テーブルのデータをディスクから繰り返し読み込まなければなりません。ジョインバッファは、外側テーブルの行データをメモリに一定量まとめて蓄積してから内側テーブルと照合することで、ディスクI/Oの回数を削減し、処理を高速化します。
MySQLでは、変数 join_buffer_size でバッファサイズを設定でき、デフォルト値はバージョンによって異なりますが、接続ごとに個別に確保されます。また、MySQL 5.6以降では「Block Nested Loop(BNL)」アルゴリズムが利用され、ジョインバッファを使ったブロック単位の照合が行われます。さらにMySQL 8.0以降では「Hash Join」アルゴリズムも利用可能になっています。
ジョインバッファが有効に活用されると、特に以下の場面でパフォーマンス改善が期待できます。
- インデックスなしの結合条件(フルスキャンが必要な結合)
- 大量データを持つテーブルどうしの結合
- 複雑な多テーブル結合クエリ
ただし、バッファサイズを大きくしすぎると全接続のメモリ消費が増大するため、サーバーのメモリ容量と接続数のバランスを考慮した適切な設定が重要です。
使い方・例文
MySQLのSQLクエリで複数テーブルをJOINしているのにインデックスが効かない場合、EXPLAINの結果に「Using join buffer」と表示されることでジョインバッファが使用されていることを確認できます。
この用語をシェア
最終更新: