← メディア一覧

B-Tree_検索を速くする索引の仕組み

3分53秒 | DB基礎FE

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

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

もしあなたが1,000ページもある分厚い専門書からたった一つの専門用語を探すとしたらどうしますか? いや、大変ですね。まさか1ページ目から全部は読めませんよね。普通は巻末の索引を使うはずです。 実はデータベースの世界にもこれとそっくりのインデックスという仕組みがあって、検索をものすごく速くしているんです。 今回はあなたからお預かりした技術資料を元に、この驚異的な速さの秘密を解き明かしていきましょう。 ええ。このインデックスがないと、コンピューターは結構、あの、とんでもないことをするんですよ。とんでもないこと? フルスキャンと言って、データが100万件あろうが1億件あろうが、本当に律儀に最初から1個ずつ全部チェックしていくんです。うわあ。 資料にあった例えがすごく分かりやすいんですけど、まさに巨大な図書館のすべての棚を1冊の本のために端から端まで見て回るようなものなんです。 考えただけでも気が遠くなりそうです。図書館を走り回るのがフルスキャン。なるほど。ではそのインデックスは一体どうやって検索をそんなに速くしているんですか? 資料にはBツリーというキーワードがありましたけど。ええ、そこが一番の肝ですね。Bツリーと読みます。まず、例えば名前とかIDとか特定の列のデータだけを抜き出して、 あいうえお順とか数字順に並べた、まあ、別表みたいなものを作るんです。はいはい、まずは探しやすくするように整列させると。 そうです。でもただのリストじゃない。この別表がこう枝分かれした木のような構造で管理されてるんですね。これがBツリーです。 木のような構造ですか?ええ、だからいきなりリストの真ん中あたりを見るんです。探しているデータはこの真ん中の値より大きい?小さい?って。 ああ。この1回の確認だけで探す範囲はもう半分になりますよね。なるほど、半分、また半分と絞り込んでいく感じですね。それなら確かに速そうだ。 そうなんです。じゃあもう僕なら手当たり次第全部の列にインデックスをつけちゃいますね。あは、そう思いますよね。 ええ。それで全部早くなるならやらない理由がないじゃないですか。何か、こう、落とし穴があるんですか?まさに、そこがこの仕組みの最も重要なトレードオフなんです。 トレードオフ。検索、つまりデータの読み取りは劇的に早くなります。でもその代償としてデータの書き込み、つまり追加とか更新、削除の処理が少し遅くなってしまうんです。 え、遅くなるんですか?それはなぜです?考えてみてください。新しいデータを追加したり、既存のデータを更新するたびに、 本体のデータだけじゃなくて、その索引であるインデックス自体も書き直す必要があるんです。あー、なるほど。 本のページに何か書き込みをしたら、巻末の索引のページ番号もちゃんと修正する手間が増えますよね。理屈はあれと全く同じです。なるほど、それは分かりやすい。 本体と索引、両方をメンテナンスしなきゃいけないと。その通りです。だから何にでもインデックスを付ければ良いわけじゃなくて、 よく検索で使われる列にだけ設定するのが、まあ、賢い使い方だと言われていますね。いやー、奥が深い。まとめると、 インデックスはデータベースの検索速度を劇的に上げる索引のようなもので。ええ。その心臓部にはBツリーという賢い仕組みがあって、全データを調べるフルスキャンを回避してくれる。 はい。ただし、読み取りが速くなる代わりに、書き込みが少し遅くなるというトレードオフを常に意識する必要がある。まさにその通りです。完璧なまとめですね。 ありがとうございます。最後に一つ面白い視点をあなたに。あなたが毎日使っているアプリやサービスを思い浮かべてみてください。どの機能が早い検索を優先して、 どの機能が早い書き込みを優先するように設計されていると思いますか?あー。実はこのインデックスの考え方、あなたの身の回りのデジタル体験の裏側で常に働いているんですよ。

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