データベース インデックス作成は、バックエンド開発者がデータベース クエリを最適化するために使用する最も一般的な方法です。この記事では、データベースのインデックス作成について詳しく説明します。 データベースのインデックスとは何ですか? データベース インデックスを使用すると、クエリで効率的にデータベースからデータを取得できます。簡単に言えば、インデックス作成は、レコードを検索するときに効率を最大化する順序で、順序付けされていないテーブルを取得する方法です。 インデックスは特定のテーブルに関連付けることができ、1 つ以上のキーで構成されます。また、1 つのテーブルに複数のインデックスを作成することもできます。 データベース テーブルがインデックス化されていない場合、行の明確な順序はありません。したがって、クエリを実行するには、行を直線的に検索する必要があります。つまり、クエリは各行を検索して検索する必要があります。条件が一致する行。ご想像のとおり、これは理想的ではなく、膨大な量のデータを含むデータベース テーブル内を調べるときに問題になる可能性があります。 たとえば、次のようなテーブルがあります。 COMPANY_ID 単位 単価 10 12 1.15 12 12 1.05 14 18 1.31 18 18 1.34 11 24 1.15 16 12 1.31 10 12 1.15 12 24 1.3 18 6 1.34 18 12 1.35 14 12 1.95 21 18 1.36 12 12 1.05 20 6 1.31 18 18 1.34 11 24 1.15 14 24 1.05 そして、次のようにクエリを実行します。 SELECT company_id, units, unit_cost FROM index_test WHERE company_id = 18 この特定のケースでは、データベースは、 の潜在的なすべてのインスタンスを 18 として探すために、テーブルに表示される順序で 17 レコードすべてを一度に 1 つずつ検索する必要があります。 company_id これは、テーブルのサイズが大きくなるにつれて、ますます時間がかかるようになります。ここでインデックス作成がどのように役立つでしょうか?インデックスを作成すると、クエリのパフォーマンスを最適化するために、並べ替えられた方法で検索条件 (この場合は ) を使用して列を設定するのに役立ちます。 company_id 列にインデックスがある場合、テーブルは次のようになります。 company_id COMPANY_ID 単位 単価 10 12 1.15 10 12 1.15 11 24 1.15 11 24 1.15 12 12 1.05 12 24 1.3 12 12 1.05 14 18 1.31 14 12 1.95 14 24 1.05 16 12 1.31 18 18 1.34 18 6 1.34 18 12 1.35 18 18 1.34 20 6 1.31 21 18 1.36 これで、データベースは 18 に等しい を検索し、その行で要求されたすべての列を返し、次の行に移動することができます。次の行にも が 18 の場合、この行のリクエスト列も返されますが、次の行の が 18 の場合、データベースはここで検索を停止できることを認識し、応答を終了します。 . company_id company_id company_id これは、データベース インデックスとは何か、および何ができるかについてのかなり簡単な説明でしたが、その過程ではさらに多くのことが進行中です。インデックス作成の仕組みを詳しく見てみましょう。 データベースのインデックス作成はどのように機能しますか? 実際には、データベースのパフォーマンスを最適化するために、クエリ条件が変更されるたびにデータベース テーブルが自動的に並べ替えられるわけではありませんが、実際には、インデックスによって、データベースが簡単に並べ替えることができる別のデータ構造が作成されます。 データベースの列にインデックスが作成されると、その特定の列にデータ構造が作成され、このデータ構造には他の列が格納されないことに注意することが重要です。たとえば、上記の例では、データ構造には のみが含まれ、 や などの他の列は含まれません。 company_id unit unit_cost しかし、ここで正当な疑問が生じます。データベースは、クエリに対して返されるテーブル内の他のフィールドをどのように知るのでしょうか。方法を理解しようとしましょう。 データベース インデックスには、メモリ内の追加情報の場所を示す参照情報へのポインタが格納されます。つまり、インデックスは とその特定の行のアドレスをメモリに保持します。この例では、データベース インデックスは次のようになります。 company_id COMPANY_ID ポインター 10 _123 10 _129 11 _127 11 _138 12 _124 12 _130 12 _135 14 _125 14 _131 14 _133 16 _128 18 _126 18 _131 18 _132 18 _137 20 _136 21 _134 このインデックスを使用すると、クエリは、値として 18 を持つ 列の行を確認し、ポインターを使用して、そのレコードの関連情報を見つけることができます。 company_id 索引付けにはどのようなデータ構造が使用されますか? インデックスに期待されることを理解したので、データベースのインデックス作成に使用できる一般的なデータ構造を見てみましょう。 Bツリー は、検索、削除、および挿入が高速であるため、最もよく使用されるインデックス データ構造です。これらの操作はすべて対数時間で実行でき、B ツリーに含まれるデータは簡単に並べ替えることができます。 B ツリー ハッシュ テーブル ハッシュ インデックスは、 を使用するインデックスを記述するために一般的に使用されます。ハッシュ テーブルはデータの検索に特に効率的であるため、完全一致を検索するクエリは迅速に処理される可能性があります。ハッシュ インデックスのキーは列の値であり、ハッシュ テーブルの値はテーブルの行データへの参照です。 ハッシュ テーブル 一方、ハッシュ テーブルは順序付けられたデータ構造ではありません。したがって、他のタイプの検索では効率が悪い場合があります。 Rツリー は空間データベースで頻繁に使用され、通常は地理座標、四角形、多角形などの多次元情報をインデックス化するために使用されます。「現在地から 2 マイル以内にあるすべてのコーヒー ショップを検索する」などの検索に役立ちます。 R ツリー ビットマップ インデックス は、そのような値の出現回数が多い列、つまり選択性の低い列に役立ちます。たとえば、ブール値を持つ列を考えてみましょう。 ビットマップ インデックス いつインデックスを使用するか インデックスは、データベースのパフォーマンスを向上させるように設計されています。したがって、データベースのパフォーマンスを大幅に改善する必要がある場合はいつでも、インデックス作成を使用できます。データベースが拡大すればするほど、インデックス作成が役立つ可能性が高くなります。 ただし、最初に覚えておくべきことは、インデックスが余分なスペースを占有することです。したがって、テーブルが大きいほど、インデックスも大きくなります。追加、削除、または更新操作を実行するたびに、インデックスに対しても同じ操作を実行する必要があります。 インデックスを使用しない場合 データがデータベースに書き込まれると、元のテーブルが最初に更新され、次にそのテーブルに基づく他のインデックスが更新されます。データベースへの書き込みが完了すると、インデックスは更新されるまで操作できなくなります。データベースが継続的に書き込みを取得している場合、インデックスは機能しません。 これが、常に新しい書き込みを受け取る可能性がある本番データベースではなく、計画的に (オフピーク時に) 新しいデータを取得するデータ ウェアハウス内のデータベースにインデックスが適用されることが多い理由です。 インデックスを作成するには? 次のコード スニペットは、SQL データベースの単一の列にインデックスを作成する方法を示しています。 CREATE INDEX name_index ON Employee (Employee_Name); 複数の列にインデックスを作成する場合、SQL コマンドは次のようになります。 CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age); 一般に、索引付けされた列のデータが頻繁にアクセスされる場合にのみ、表に索引を作成する必要があります。 結論 そのため、この記事ではデータベースのインデックス作成について詳しく説明し、データベースのインデックス作成を実装するために使用されるデータ構造と、インデックスなどを使用することが推奨される場合についても学びました。 すべてを要約すると、ここに簡単な要約があります。 データベースのインデックス作成は、クエリの時間を大幅に短縮するのに役立ちます。 索引付けには、検索基準用の列とポインタを含むデータ構造が含まれます。 ポインターは、残りの情報を含む行のメモリ ディスク上のアドレスです。 クエリのパフォーマンスを向上させるために、インデックス データ構造 (B ツリー、R ツリー、ハッシュ テーブル、またはビットマップ) が並べ替えられます。 クエリは、指定された行のインデックスを検索します。インデックスは、残りの情報を発見するポインターを参照します。 これがこの記事のすべてです。データベースのインデックス作成は広大で少し複雑なトピックです。この記事が概念の基本を理解するのに役立つことを願っています。 読み続けます!