【入門編】 ハッシュ結合 – PostgreSQL

こんにちは!データベースの世界へようこそ。
普段、何気なく書いているSQL。「とりあえず結果が出ればいいや」と思っていると、データが増えた瞬間に急に重くなって、「あれ、なんで?」と焦った経験はありませんか?

今日は、そんな時に頼りになる「ハッシュ結合」というテクニックについて、お話ししようと思います。難しい専門用語はなるべく使わずに、日常の風景に例えてみますね。

—

膨大なデータと向き合う時の「切り札」

例えば、あなたがものすごく大きな図書館の司書さんだと想像してみてください。
目の前には「利用者の名前リスト」が書かれた紙と、「借りている本の記録」が書かれた分厚い帳簿があります。

この2つを突き合わせて、「誰がどの本を借りているか」を全部書き出す作業を任されたとしたら、どうしますか?

1. もし「しらみつぶし」に探したら…?

利用者の名前を一人選ぶたびに、帳簿の最初から最後までをパラパラとめくって探す……。これ、数人ならいいですが、利用者が1万人いたら日が暮れてしまいますよね。データベースの世界でも、データが少ないうちはこれでもいいのですが、規模が大きくなると途端に限界が来ます。

2. 「ハッシュ結合」という賢い作戦

ここで登場するのが「ハッシュ結合」です。これは、いわば「あらかじめインデックス(索引)を作って、机のすぐ横に広げておく」という作戦です。

1. 小さい方のテーブルをメモリに展開する
まず、利用者のリストを机の上にバーッと広げます。このとき、ただ広げるのではなく、名前の頭文字や、見つけやすいように整理された「ハッシュテーブル」という状態にします。
2. 大きい方のテーブルを一度だけ流し込む
次に、分厚い帳簿を最初から最後までめくっていきます。このとき、帳簿に書かれた名前を見るたびに、机の上の「整理されたリスト」をチラッと見るだけで、「あ、この人はこのリストの人だ!」と即座に判断できます。

そう、いちいち最初から探し直す必要がないんです。「相手の情報を頭に叩き込んでから、一気に突き合わせる」。これがハッシュ結合の正体です。

—

なぜこれが「最強」と言われるのか

ハッシュ結合の最大のメリットは、「相手がどれだけ分厚い帳簿(巨大なデータ)を持っていても、一回通り過ぎるだけで終わる」という点です。

もちろん、いいことばかりではありません。

  • メモリをたくさん使う: 「机の上に広げる」ということは、その分のスペース(メモリ)が必要です。机が小さすぎると、整理しきれずに作業が滞ってしまうこともあります。
  • 準備が必要: 最初にリストを整理する時間は必要なので、データが極端に少ないときは、普通に探した方が速いこともあります。

—

最後に:データベースと仲良くなるために

「ハッシュ結合」という言葉を聞くと、なんだか冷たい技術用語のように聞こえるかもしれません。でも実際は、私たちが普段、仕事や勉強で効率を上げようと工夫していることと同じなんです。

データベースは、私たちが「どうやって探せばいいか」をうまく指示してあげれば、期待以上の速さで応えてくれます。

もし皆さんの環境で「このクエリ、なんか遅いな?」と感じたら、「もしかして、PostgreSQLは今、一生懸命しらみつぶしに探しているのかも? ハッシュ結合を使わせるためには、どうデータを整理したらいいかな?」と想像してみてください。

そんなふうにデータベースと対話できるようになると、チューニングの時間がちょっとだけ、楽しくなってくるはずですよ。

それでは、また次回の記事でお会いしましょう!質問があれば、いつでもコメント欄で教えてくださいね。

コメント

タイトルとURLをコピーしました