データベース管理の分野では、インデックスはデータ取得の最適化とクエリ実行の高速化において重要な役割を果たします。データベースのインデックス作成の基礎を理解することで、開発者は使用している特定のデータベース システムを効果的に活用できるようになります。
ディスク デバイスに保存されている大規模なデータ セットは、個別のデータ ブロックに編成されます。これらのデータ ブロックは I/O 操作の最小単位を表し、全体としてアクセスできます。クエリでデータが必要になるたびに、データベースはデータが存在するデータ ブロック全体を取得する必要があります。
並べ替えられていないフィールドに基づいてデータを検索する場合、データベースは線形検索を使用します。これには、データの各ブロックを順番にチェックする必要があります。このプロセスには、平均して (N 1)/2 回のデータ ブロック アクセスが必要です。ここで、N はテーブルが占有するデータ ブロックの総数です。
しかし、特定のフィールドに基づいてデータをソートし、インデックスを作成することで、二分検索が可能になります。二分探索により、データ ブロックのアクセス数が約 log2 N に大幅に減少します。この効率の向上は、大規模なデータ セットを扱う場合に特に有益です。
データベースのインデックス付けには、インデックス付けされたフィールド値と対応するレコードへのポインターを格納する別のデータ構造の作成が含まれます。これらのインデックス エントリはソートされているため、線形検索よりもはるかに優れたパフォーマンスを発揮するバイナリ検索を使用できます。
たとえば、各行に id、firstName、lastName、および emailAddress フィールドが含まれる 500 万行があるテーブルについて考えてみましょう。 id フィールドは主キーとして定義され、一意の値が保証されますが、firstName は並べ替えられていない非キー フィールドです。
インデックスがないと、特定の firstName 値を検索するクエリにはテーブル全体の線形検索が必要となり、1,000,000 ブロック アクセスが必要になります。
firstName フィールドにインデックスを作成すると、データベースはインデックスに対して二分検索を実行できるため、データ ブロックのアクセス数が約 20 に減ります。データ ブロック アクセスの数が減少すると、クエリのパフォーマンスが大幅に向上します。
インデックス作成によりパフォーマンスが大幅に向上しますが、インデックス構造用に追加のストレージ スペースが必要になります。したがって、インデックスを作成するフィールドを選択するときは、慎重に検討する必要があります。
クエリフィルターや条件で頻繁に使用されるフィールドにはインデックスを作成する必要があります。結果の表示のみに使用されるインデックス フィールドは、挿入および削除時に不必要なスペースの消費とパフォーマンスのオーバーヘッドを引き起こす可能性があります。
さらに、インデックス付きフィールドのカーディナリティはインデックスの有効性に影響します。多くの異なる値を持つカーディナリティの高いフィールドは、データをより小さなサブセットに効果的に分割することでインデックスのパフォーマンスを最適化します。逆に、一意の値が制限されたカーディナリティの低いフィールドは、インデックスを無効にする可能性があります。
以上がデータベースのインデックス作成によりデータ検索がどのように高速化されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。