ホームページ  >  記事  >  データベース  >  インデックスとは何ですか?

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

藏色散人
藏色散人オリジナル
2019-05-07 10:04:1586869ブラウズ

インデックスは、データベース テーブル内の 1 つまたは複数の列の値を並べ替える、別個の物理的な特別なデータベース構造です。テーブル内の 1 つまたは複数の列の値と、それに対応する列の値のコレクションです。テーブルへのポインター (pointer to the table). これらの値を物理的に識別する、データ ページ内の論理ポインターのリスト。索引は本の目次に相当し、目次のページ番号をもとに必要な内容をすぐに見つけることができます。

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

(推奨チュートリアル: mysql ビデオ チュートリアル )

インデックスは、データ テーブルで構成される特別なデータベース構造です。これは 1 つ以上の列の組み合わせであり、データ テーブル内の特定の値を持つレコードを迅速にクエリするために使用できます。

インデックスは、テーブルの指定された列に格納されているデータ値へのポインターを提供し、指定した並べ替え順序に従ってこれらのポインターを並べ替えます。データベースはインデックスを使用して特定の値を検索し、前方をポイントしてその値を含む行を検索します。これにより、テーブルに対応する SQL ステートメントがより高速に実行され、データベース テーブル内の特定の情報に迅速にアクセスできるようになります。

インデックスを使用してデータをクエリする場合、レコード内のすべての情報を読み取る必要はなく、インデックス列をクエリするだけで済みます。それ以外の場合、データベース システムは照合のために各レコードのすべての情報を読み取ります。

この索引は、新華辞典の発音順序と比較できます。たとえば、「く」という単語を調べたい場合、発音順序を使用しない場合、400 ページの辞書からページごとに検索する必要があります。ただし、ピンインを抽出して発音シーケンスを作成する場合は、10 ページを超える発音表から直接検索するだけで済みます。これにより時間を大幅に節約できます。

したがって、インデックスを使用すると、データベースのクエリ速度が大幅に向上し、データベース システムのパフォーマンスが効果的に向上します。

インデックスを使用する理由

インデックスとは、列の値とレコード行の間の関係を、ある基準に基づいて特定の順序で確立したものです。対応テーブルは基本的に、インデックス列の列値と元のテーブルのレコード行の間の 1 対 1 の対応を記述する順序付けされたテーブルです。

インデックスは MySQL の非常に重要なデータベース オブジェクトであり、データベース パフォーマンス チューニング テクノロジの基礎であり、データの高速な取得を実現するためによく使用されます。

MySQL では、通常、データベース テーブルの行データにアクセスする方法が 2 つあります。

1) シーケンシャル アクセス

シーケンシャル アクセスは、 table 順序付けされていない行データの条件を満たすターゲット データが見つかるまで、最初から最後まで 1 行ずつスキャンして、テーブル全体のスキャンを実行します。

シーケンシャル アクセスは実装が比較的簡単ですが、テーブル内に大量のデータがある場合、効率は非常に低くなります。例えば、数千万のデータの中から少量のデータを検索する場合、シーケンシャルアクセスを行うと全データを横断することになり、時間がかかり、データベースの処理性能に影響を与えるのは明らかです。

2) インデックス アクセス

インデックス アクセスは、インデックスをトラバースしてテーブル内のレコード行に直接アクセスする方法です。

この方法を使用する前提は、テーブルにインデックスを作成することです。列にインデックスを作成した後、データを検索するときに、テーブルのインデックスに基づいて、対応するレコード行の位置を直接見つけることができます。列をクリックすると、データをすばやく見つけることができます。インデックスは、指定された列のデータ値へのポインターを格納し、指定された並べ替え順序に従ってこれらのポインターを並べ替えます。

たとえば、学生基本情報テーブル tb_students で、student_id に基づいてインデックスが設定されている場合、システムはインデックス列から実際のレコードまでのマッピングテーブルを作成します。ユーザーが Student_id 12022 のデータを検索する必要がある場合、システムはまず Student_id インデックスでレコードを検索し、次にマッピング テーブルを通じてデータ行を直接検索し、データ行を返します。一般に、インデックスのスキャン速度は実際のデータ行のスキャン速度よりもはるかに速いため、インデックスを使用するとデータベースの効率が大幅に向上します。

つまり、インデックスを使用せずに、MySQL は最初のレコードから始めて、関連する行が見つかるまでテーブル全体を読み取る必要があります。テーブルが大きくなるほど、データのクエリにかかる時間が長くなります。テーブル内のクエリ対象のカラムにインデックスがある場合、MySQL はすべてのデータを確認することなく、データ ファイルを検索する場所にすぐにアクセスできるため、時間を大幅に節約できます。

インデックスの利点と欠点

インデックスには明らかな利点と避けられない欠点があります。

利点

インデックスの利点は次のとおりです。

  • 一意のインデックスを作成することにより、データの各行がデータベーステーブルが一意であることが保証されます。

  • すべての MySQL 列タイプにインデックスを設定できます。

  • を使用すると、データ クエリを大幅に高速化できます。これがインデックスを使用する主な理由です。

  • データの参照整合性を実現するという点で、テーブル間の接続を高速化できます。

  • #データ クエリにグループ化句と並べ替え句を使用すると、クエリ内のグループ化と並べ替えの時間を大幅に短縮することもできます

# #欠点

インデックスを増やすと、主に次のような多くの欠点もあります。

    インデックス グループの作成と維持に時間がかかり、データ量が増えるため、時間がかかります。増えると時間がかかります。
  • インデックスはディスク領域を占有する必要があります。データ テーブルが占有するデータ領域に加えて、各インデックスは一定量の物理領域も占有します。多数のインデックスがある場合、インデックス ファイルはデータ ファイルよりも早く最大ファイル サイズに達する可能性があります。

  • テーブル内のデータが追加、削除、および変更されると、インデックスも動的に維持する必要があるため、データのメンテナンス速度が低下します。

インデックスを使用する場合は、インデックスの長所と短所を考慮する必要があります。

インデックスを使用するとクエリの速度が向上しますが、レコードの挿入速度に影響します。インデックス付きテーブルにレコードを挿入するとき、データベース システムはインデックスに従って並べ替えるため、レコードの挿入速度が低下します。大量のレコードを挿入する場合、速度への影響はより顕著になります。この場合、最初にテーブル内のインデックスを削除し、次にデータを挿入し、挿入が完了した後にインデックスを作成するのが最善の方法です。

以上がインデックスとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。