インデックスがない場合は、はい、線形検索が実行されます。
ただし、データベースは通常、列をキーとして指定するときにB ツリーインデックスを使用します。これらは、磁気ディスク ハードウェアで適切に動作するように特別に調整された (高い B ツリー分岐係数) 特別なデータ構造形式です。最も時間のかかる要因はシーク操作です (磁気ヘッドはファイルの差分部分に移動する必要があります)。 )。
インデックスは、列内の値の並べ替えられた/構造化されたコピーと考えることができます。検索対象の値がインデックスに含まれているかどうかは、すぐに判断できます。見つかった場合は、メイン データ ファイル内の対応する行の正しい位置を指すポインターも見つけます (そのため、行内の他の列を読み取ることができます)。場合によっては、クエリによって要求されたすべてのデータが複数列のインデックスに含まれている場合、メイン ファイルにスキップして戻る必要はなく、見つかったものを読み取るだけで済みます。
他の種類のインデックスもありますが、データを複製し、検索が高速になるように配置するというアイデアは理解できると思います。
大規模なデータベースでは、インデックスによって、複雑なクエリが完了するまで数秒待つか、場合によっては数日待つかの違いが生じます。
ところで、B ツリーは単純で理解しやすいデータ構造ではなく、トラバーサル アルゴリズムも複雑です。さらに、データベースではデータのチャンクをディスクから常にロード/アンロードし、メモリ内で管理しているため、トラバーサルはほとんどのコードよりもさらに醜いものであり、これによりコードが大幅に醜くなります。ただし、二分探索木に精通している場合は、その概念を十分に理解していると思います。