ホームページ > データベース > mysql チュートリアル > データベースのインデックス作成によりクエリのパフォーマンスがどのように大幅に向上するのでしょうか?

データベースのインデックス作成によりクエリのパフォーマンスがどのように大幅に向上するのでしょうか?

Susan Sarandon
リリース: 2025-01-23 15:31:15
オリジナル
917 人が閲覧しました

How Can Database Indexing Significantly Improve Query Performance?

データ管理におけるデータベースインデックスの重要性

データ管理の分野では、特にデータセットのサイズが増大し続けるにつれて、インデックスがデータベースのパフォーマンスを最適化する上で重要な役割を果たします。この記事では、データベースのインデックス作成の基本を詳しく掘り下げて、特定のデータベース プラットフォームに依存しない包括的な説明を提供します。

インデックスが重要な理由

ディスクベースのストレージデバイスに保存されているデータは、データブロックに編成されています。各ブロックには、実際のデータの一部と後続のブロックへのポインタが含まれています。リンク リストとは異なり、ディスク ブロックを連続して保存する必要はありません。

非ソートフィールドに基づいてレコードを検索する場合、線形検索が必要となり、平均して (N 1)/2 ブロック アクセスが必要になります。非キー フィールド (一意のエントリが欠落している) の場合は、テーブルスペース全体をスキャンする必要があり、N ブロック アクセスが必要です。

対照的に、ソートされたフィールドではバイナリ検索が可能で、log2 N ブロック アクセスのみが必要です。さらに、非キー フィールドの場合は、より大きな値が見つかったら検索を終了できるため、必要なブロック アクセスの数が減ります。

データベースインデックスとは何ですか?

インデックス付けは、複数のフィールドに基づいてテーブル内のレコードを並べ替える手法です。フィールド値と対応するレコードへのポインターを含む特定のフィールドのインデックスを作成します。次に、このインデックス構造は二分探索のためにソートされます。

ただし、インデックスはフィールド値とレコード ポインターを含む別のテーブルを保存するため、追加のディスク領域のオーバーヘッドが発生します。このスペース要件は、テーブル内の複数のフィールドにインデックスを付ける場合、特にインデックス ファイルがファイル システムの制限を超える可能性がある MyISAM エンジンを使用する場合に重要になります。

インデックスの仕組み

テーブルに id (主キー)、firstName、lastName、および emailAddress の 5 つのフィールドが含まれるサンプル データベース スキーマを考えてみましょう。行あたり 204 バイトの固定サイズ、1024 バイトのブロック サイズを持つ 500 万行があると仮定します。

シナリオ 1: 並べ替えられたフィールドと並べ替えられていないフィールド

  • インデックスがない場合、id フィールド (ソートされており、キー フィールド) の線形検索には、約 500,000 のブロック アクセスが必要です。
  • インデックスを使用すると、id フィールドの二分検索により、ブロック アクセスの数が約 20 に削減されます。
  • firstName フィールド (並べ替えられていない非キー フィールド) の場合、線形検索には 1,000,000 ブロック アクセスが必要です。

シーン 2: インデックス

  • firstName フィールドのインデックスにより、レコード サイズが 54 バイトの小さなテーブルが作成されます。
  • インデックス テーブルには約 277,778 ブロックが必要ですが、元のテーブルには 1,000,000 ブロックが必要です。
  • インデックスのバイナリ検索には 19 ブロック アクセスが必要で、実際のレコードを取得するにはさらに 1 ブロック アクセスが必要で、合計 20 ブロック アクセスになります。

インデックスを使用する場合

インデックスを使用すると、検索条件で頻繁に使用されるフィールドでのクエリのパフォーマンスを向上させることができます。ただし、フィールドにインデックスを付けるかどうかを決定するときは、次の点を考慮することが重要です:

  • 出力専用フィールドのインデックス作成は避けてください。
  • カーディナリティが低いとインデックスの有効性が損なわれる可能性があるため、インデックス付きフィールドのカーディナリティが高いことを確認してください。
  • インデックスの過剰作成によって生じる可能性のあるファイル システムのサイズ制限を考慮してください。

以上がデータベースのインデックス作成によりクエリのパフォーマンスがどのように大幅に向上するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート