← メディア一覧

データベース検索を爆速にするインデックスの秘密

5分53秒 | DB基礎FE

基本情報技術者試験の頻出テーマを解説した動画コンテンツです。

トランスクリプト(字幕テキスト)

どうもこんにちは!いやあ、皆さんが毎日使ってるアプリとかウェブサイトって、検索した一瞬で結果が出てきますよね。 あれって何であんなに速いんだろうって不思議に思ったことありませんか? 今日はその裏側にあるすごい秘密についてお話しします。 そう、データベースの検索をもう爆速にしちゃう、インデックスの世界に一緒に飛び込んでいきましょう。 さて、じゃあちょっと想像してみてください。皆さんの目の前に1,000ページもあるめちゃくちゃ分厚い専門書があるとします。 で、その中からたった一つの言葉を見つけてくださいって言われたら、皆さんならどうしますか? まさか1ページ目から順番に読んでいく、なんてことしないですよね。 普通は当たり前ですけど、本の1番後ろにある索引を開きますよね。 そこで目的の言葉を探して、「あ、何ページにあるのね」って確認するはずです。これなら一瞬で見つかります。 そう、まさにこれなんですよ。データベースの世界で言う「インデックス」っていうのは、 この本の索引と役割が全く同じなんです。 とんでもなく多いデータの中から、全部をいちいち見ることなく、 目的のデータを光の速さで見つけ出すための仕組み。それがインデックスなんですね。 じゃあ、今度は逆に考えてみましょうか?もし、 この超便利なインデックスがデータベースになかったとしたら、一体どうなっちゃうんでしょう? その答えがこの「フルスキャン」です。もう言葉の通り、データの先頭から最後まで、 全部を一個一個チェックして探すっていう気の遠くなるような方法です。 例えるなら、巨大な図書館で1冊の本を探すのに、1階の隅っこから最上階の隅っこまで、 全部の本棚を1個ずつ見て回るみたいなもんですよ。 いやあ、考えただけでも非効率すぎてゾッとしますよね。 この図を見るともう一発でわかりますよね。左のフルスキャンは1ページ目から全部読む。 一方、右のインデックス検索は巻末の索引を見る。もうスピードの差は歴然です。 非常に遅いと一瞬、まさに天と地ほどの差があるわけです。 でも、なんで、どうして、インデックスはこんなにも速いんでしょうか? その魔法みたいなスピードの裏には、実はめちゃくちゃ賢いデータ構造が隠されてるんですよ。 じゃあ、そのからくりを見ていきましょう。 その秘密の正体が、このB-Tree、まあBツリーって呼ばれるものです。 インデックスって、実は元のデータとは別に、検索したい列のデータだけを綺麗に並べ替えた、 いわば検索専用のミニ辞書みたいなものを持ってるんですね。 で、そのミニ辞書を管理しているのが、このBツリーっていう、木みたいに枝分かれした特別な構造なんです。 Bツリーを使うと、検索がものすごく効率的になるんですよ。 まず、木のてっぺんにある「ルート」からスタートして、大小を比べながら進むべき枝を選んでいく。 これを繰り返すと、探さなきゃいけない範囲がどんどん「半分、また半分」って減っていくんです。 あれ、この考え方どこかで聞いたことありませんか?そう、あの有名な「二分探索」と全く同じロジックなんですよね。 まさにこの言葉の通り、データが100万件あろうが、1億件あろうが関係ない。 「半分、また半分」って絞り込めるから、ほんの数ステップで目的地に辿り着けちゃう。これがインデックスが爆速な理由の正体だったわけです。 と、ここまで聞くと「インデックスって最強じゃん」って思いますよね。 でも、うまい話にはやっぱりちょっとした注意点というか、まあ、トレードオフがあるんです。万能な魔法ってわけじゃないんですね。 この表がそのポイントをすごく分かりやすく示してくれてます。 インデックスがあると、検索はもう圧倒的に速くなる。これはいいですよね。 でもその一方で、データの追加とか更新は、ちょっとだけ遅くなっちゃうんです。 何でかって言うと、新しいデータを追加したら、その索引であるBツリーの方も、正しい順番になるように書き直す必要があるから。 本に新しいページを足したら、巻末の索引もちゃんと更新しないといけないですよね。 それと全く同じ手間が、データベースでも発生するっていうわけなんです。 だからこそ、ここでのすごく大事な教訓はこれです。「闇雲に全部の列にインデックスをつければいい」ってものじゃないんですね。 ユーザーIDみたいに頻繁に検索で使われる列とか、商品のカテゴリーとか、 そういうここぞという場所を見極めて、そこにだけ賢く設定する。これこそがデータベースの性能を最大限に引き出すプロの技なんです。 はい、というわけで、今日の重要なポイントをサクッと振り返っておきましょう。 ポイントは大きく3つです。まず1つ目、インデックスは検索を爆速にするための索引だということ。 そして2つ目、その中身はBツリーっていう賢い構造で、非効率なフルスキャンを避けることができること。 で、最後の3つ目、検索は速くなるけど、 データの追加や更新はちょっと遅くなるっていう「副作用」があること。この3つはぜひ覚えておいてくださいね。 さて、今回の話でインデックスの秘密がちょっと見えてきたんじゃないでしょうか。最後に1つ、皆さんに考えてみてほしいんです。 あなたが毎日何気なく使っているSNSやショッピングアプリ。 その裏側では、一体どんなデータに索引が付けられて、あの快適なスピードが実現されているんでしょうか? そうやって考えると、いつも見てるデジタルの世界がまた少し面白く見えてきませんか?

このコンテンツは Web society で視聴・学習できます。