こんにちは!データベースの世界へようこそ。
普段、何気なく使っているデータベースですが、データを検索するとき、裏側で一体何が起きているのか気になったことはありませんか?
今日は、PostgreSQLが誇る「魔法のような時短テクニック」、「インデックスオンリースキャン」についてお話しします。難しい専門用語はなるべく抜きにして、身近な例えで解説していきますね。
—
本の「索引」を想像してみてください
皆さんが分厚い辞書や、専門書の巻末にある「索引」を引くときをイメージしてみてください。
例えば、「PostgreSQL」という言葉がどこで説明されているか知りたいとき、どうしますか?
わざわざ本の最初から最後までページをめくって探したりはしませんよね。巻末の「索引」を開いて、「PostgreSQL」の横に書いてある「120ページ」という数字を見て、直接そのページを開くはずです。
データベースにおける「インデックス」も、まさにこれと同じ役割をしています。
通常の「インデックススキャン」の動き
これまでのやり方だと、こんな感じです。
1. 索引(インデックス)で場所を特定する。
2. そのページ(ヒープ)を開いて、中身を確認する。
これでも十分速いのですが、実は「もっと速くできる方法」があるんです。それが今日のテーマです。
—
ページを開かずに終わらせる「インデックスオンリースキャン」
では、こんなシチュエーションを想像してみてください。
あなたは図書館で、「〇〇先生の著書は何冊あるかな?」と調べたいとします。
索引を見ると、本のタイトルと著者がリストアップされていて、そこを見るだけで「ああ、この先生の本は3冊あるんだな」と答えがわかってしまったらどうでしょう?
わざわざ本棚まで行って、本の実物(ヒープ)を手に取る必要はありませんよね。「索引に書いてある情報だけで用事が済んでしまう」、これこそが「インデックスオンリースキャン」の正体です。
なぜこれが速いのか?
データベースにとって、インデックス(索引)はとても小さくてコンパクトなまとめ役です。一方で、ヒープ(実際のデータが詰まっている場所)は巨大な本のようなもので、そこまで探しに行くには時間と体力(CPUやメモリの負荷)を使います。
「インデックスオンリースキャン」は、「わざわざ本棚まで往復しなくていいよ!索引だけで答えは出てるから!」と、データベースが気を利かせてくれるおかげで、爆速で結果を返せるようになるんです。
—
もっと活用するために:ちょっとしたコツ
この魔法を使うには、一つだけ条件があります。
それは、「検索したい項目が、すべてインデックスの中に含まれていること」です。
もし索引に「タイトル」しか載っていなくて、「出版年」まで知りたいとなると、結局は本の実物を確認しに行かなければいけませんよね。
PostgreSQLで効率化を図るときは、
「よく使う検索条件」と「よく表示する項目」をセットにしてインデックスを作っておくと、データベースがこの魔法を使ってくれる確率がグンと上がります。
—
まとめ:データベースと仲良くなろう
インデックスオンリースキャンは、ただの技術用語ではなく、「いかに無駄な動きを減らして、効率よく情報を引き出すか」というデータベースの工夫そのものです。
「インデックスを貼る」という行為は、単に検索を速くするだけでなく、こうして「本棚まで歩く回数」を減らすための戦略なんですね。
もし、今度皆さんがSQLを書くときに「あ、このクエリ、インデックスだけで完結させられるかも?」と思えたら、それはもう立派なデータベース・エンジニアの第一歩です!
少しずつ、この奥深いデータベースの世界を楽しんでいきましょうね。また次回の記事でお会いしましょう!
コメント