0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQL】hashアルゴリズム

Posted at

はじめに

こんにちは。アメリカに住みながら独学でエンジニアを目指しているTairaです。
現在、SQLを勉強しており、その中でも内部結合や外部結合などを学習しています。
これらの結合では、Nested Loops、Hash、Sort Merge といったアルゴリズムが採用されることがあります。
本記事では、その中でもhashについて解説していきます。

ハッシュアルゴリズムとは?

RDBMS(リレーショナルデータベース管理システム)でテーブルを結合する際に使われる代表的な手法のひとつに「ハッシュ結合(Hash Join)」があります。特に**等値結合(equi-join)**において高いパフォーマンスを発揮するこのアルゴリズムは、Nested LoopsやSort-Merge と並ぶ重要な結合戦略のひとつです。


ハッシュ結合の基本手順

  1. 小さいテーブルAをフルスキャンする
  2. Aの結合キーをハッシュ化し、ハッシュテーブルを作成する
  3. 大きいテーブルBをフルスキャンし、Bのキーを使ってハッシュテーブルに照合、一致するレコードを返す

この手順によって、大量のデータから効率的に一致する行を検索できます。


なぜ小さいテーブルから処理するのか?

ハッシュテーブルは一時的にDBMSのワーキングメモリに保存されます。そのため、ハッシュ化されるテーブルが小さいほど、

  • メモリ使用量が少なく済む
  • ディスクI/Oが発生せず高速に照合できる

といったメリットがあります。


ハッシュ結合の特徴と制約

  • メモリ使用量が多い:Nested Loopsと比べ、ハッシュテーブルを保持するために大きなメモリを必要とする。
  • ディスクI/Oのリスク:ハッシュテーブルがメモリに収まらない場合はストレージにスピル(退避)され、処理が遅くなる。
  • 等値結合専用:ハッシュ値は元の値の順序を保持しないため、範囲条件などの結合には利用できない。

ハッシュ結合が有効なケース

  • Nested Loopsで適切な駆動表が存在しない場合
  • 小さいテーブルを駆動表にできても、内部表のヒット件数が多い場合
  • 内部表にインデックスが存在しない、または作成できない場合

これらのケースでは、ハッシュ結合を使うことでパフォーマンスを大幅に改善できることがあります。


まとめ

ハッシュ結合は、大量データを高速に結合できる強力な手法ですが、十分なメモリの確保等値結合であることなど、適用条件を意識することが重要です。Nested LoopsやSort-Mergeとの使い分けを理解し、実行計画を読み解く力をつけることで、より効率的なSQLチューニングが可能になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?