データベース インデックスとは: どのように機能し、何をするのか?

データベース インデックス SQL データベース インデックスの重要性 インデックスの種類

SQL データベースのインデックス作成は、データ レコードを分類および整理するプロセスです。 データベースを扱う人なら誰でも、特定のデータを検索するときにこの機能によって時間の節約ができることに感謝するでしょう。 この記事では、データベース インデックス SQL の定義、種類、データベース インデックスの重要性について説明しました。 乗り心地をお楽しみください!

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

データベース インデックスは、より高速なテーブル検索を容易にするデータ構造です。 データベースはインデックスがなくても動作しますが、クエリが結果を返すまでに時間がかかる場合があります。 各インデックスには、対応するテーブル内の XNUMX つ以上の列のデータで構成されるキーが含まれています。 データベースは、クエリでインデックスを使用してテーブルにアクセスする必要がある場合、レコードの取得を高速化するためにインデックスを利用することを選択する場合があります。

ユーザーがクエリを入力すると、クエリは通常、各行に対して線形検索を実行し、それらの行に必要な情報が含まれているかどうかを確認します。 これはインデックスを使用することで簡素化され、タスクの完了にかかる時間が短縮されるため、生産性が向上します。

データベースインデックスの種類

データベースのインデックスにはさまざまな種類があります。 データベースインデックスの種類は次のとおりです。

#1. DBMS のプライマリ インデックス

プライマリ データベース インデックスは、XNUMX つのフィールドからなる、順序付けられた固定長ファイルです。 最初のフィールドは主キーとして機能し、XNUMX 番目のフィールドは指定された情報がどのデータ ブロックに含まれているかを示します。 プライマリ データベース インデックス エントリ間には、常に XNUMX 対 XNUMX の対応関係があります。 DBMS で使用される主なインデックス作成には XNUMX つの異なる種類があります。

  • 高密度インデックス
  • スパースインデックス

#2. DBMS のセカンダリ インデックス

データベース管理システム (DBMS) の候補キーは、各エントリに一意の値を持つフィールドです。 これは、データをクラスターにグループ化しないタイプのインデックスです。 XNUMX つのレベルでデータベースにインデックスを作成するこの方法は、初期マッピング レベルのサイズを最小限に抑えるために使用されます。 このため、初期段階では広範囲の整数が選択されますが、マッピング サイズ自体は固定的に控えめなままです。

インデックス作成は何をするのでしょうか?

ソートされていないテーブルを、クエリによる検索効率を向上させる順序に変換するには、インデックスを作成します。 インデックスのないテーブルでは、クエリが行の順序を認識できず、それに応じてクエリ自体を最適化できないため、行全体にわたる線形検索が必要になります。 つまり、クエリは各行を調べて基準を満たす行を見つける必要があります。 ご想像のとおり、これにはかなり時間がかかります。 

データベースインデックスはどのように機能しますか?

クエリのパフォーマンスを向上させるために、クエリの状況が変化するたびにデータベース テーブルが自動的に再編成されることを期待するのは現実的ではありません。 実際に何が起こるかというと、データベースは データ構造 インデックスに応答して。 B ツリーは、おそらく使用されているデータ構造のタイプです。 B ツリーにはいくつかの利点がありますが、簡単にソートできるという事実が私たちのニーズにとって最も重要です。 前述のことから、並べ替えられたデータ構造によって検索の効率が向上することは驚くべきことではありません。

データベース インデックスが特定の列の構造を構築するときは、その列に関する情報のみが保存されることに注意してください。 他の列は含まれません。 

また読むことができます:

データベースインデックスを作成するためのヒント

データベース インデックスを作成するためのヒントは次のとおりです。

#1. ワークロードに応じたインデックス

処理されるデータの量に応じて効率的なデータベース インデックスを作成できます。 インデックス作成プロセスをテーブルの数に基づいて行うのではなく (アクセスが難しくなる可能性があります)、特定の用語の検索を容易にするデータベース インデックスの作成に重点を置きます。

#2. 述語を使用する必要があります

述語を使用してデータベース インデックスを作成することも、実行可能なオプションです。 述語は、ステートメントの真偽値を決定するために使用される一種の条件式です。 これにより、データベース インデックスの開発が簡素化されるだけでなく、ユーザーがどのデータを取得するかについて知識に基づいた選択ができるようになります。

建築プロジェクトに必要なツールや消耗品を見つけるために、その業界向けに設計されたデータベースではインデックスに述語が使用されている場合があります。 従業員はこれを利用して、数か月前に同様のプロジェクトで同じ材料が使用されたかどうかを確認する可能性があります。

最も一般的なデータベース インデックス SQL クエリに合わせたインデックスも、一般に最適な効率を実現するために構築されます。 これには、考えられるすべてのデータベース インデックス SQL クエリとその推定使用頻度の概要が含まれる場合があり、最も重要なものが強調表示されます。

これは、学校が標準的なデータベース検索を実行する必要がある場合、たとえば、最も多く家に呼び出された子供や病気で長期間欠席した子供を調べる場合に役立つ可能性があります。 これは、保護者の連絡先情報を迅速かつ簡単に検索できるため、緊急時に役立ちます。

#4. インデックスを作成することで並べ替えの必要性を回避する

並べ替えを必要としないインデックスを作成すると、クエリが目的のデータを取得する速度が向上します。 データベース ユーザーは、多くの場合、「Group by」句と「Order by」句を使用してレコードを手動で並べ替えることができます。 これら XNUMX つの並べ替えで使用される列にインデックスを構築することで、データベースの速度を最適化できます。 レコードを並べ替える必要がないため、クエリをさらに最適化できます。

#5. 独自のインデックスを作成する

従業員は、効果的なデータベースを開発する際に、独自のインデックスを多数作成する任務を負うことがよくあります。 これは、テーブルの列内の重複の可能性を排除することでデータの破損を防ぐため、非常に重要です。 制約、つまりテーブル内のデータが常に従うことが期待されるルールは、大部分のデータベース システムで一意のインデックスを生成するために使用されます。 主キーは、テーブル内のデータの識別を容易にするためにも使用されます。

#6. 外部キーを検討する

従業員は、データベースで使用される各外部キーに関連するインデックスを作成することで、データベースのパフォーマンスを最適化できます。 外部キーは、あるデータベース内の列のグループであり、別のデータベース内のテーブルへのアクセスを提供します。 これらのインデックスはほとんどのデータベース システムでは必要ありませんが、とにかく生産性を向上させることができます。 データベースには従業員が必要とするすべての情報が含まれていない可能性がありますが、このキーによって別のデータベースの適切な結果が得られる可能性があります。

#7。 データベースインデックス専用の列を挿入する

従業員は、特定の状況下でデータベースにデータベース インデックスのみの列をいくつか追加すると便利であると考える場合があります。 作業者はインデックスのみの情報を迅速に取得できるようになりました。 これは、ユーザーが入力したクエリがこれらの新しく追加されたインデックス列内のみを検索するだけで済むようにするためです。 これにより、従業員が必要とする特定のデータを提供するプロセスが迅速化されます。 ただし、ワーカーは他のクエリをチェックして、新しい列が自分の仕事の実行能力に影響を与えるかどうかを確認する必要があることに注意してください。

#8. インデックス数の制限を回避する

データベース内のインデックスの数は、作成時に制限しないことをお勧めします。 データベースを適切に最適化するには、各インデックスがデータの取得プロセスを高速化するオプティマイザーとして機能するため、できるだけ多くのインデックスを持つことが望ましいです。 これは当人にとって役立つだけではないことに注意してください。 ほとんどの職場では、データベースとそこに含まれる情報が従業員と共有されています。 これは、組織全体の生産量を向上させる可能性があることを意味します。

#9. データ変更の影響が多数あるかどうかを確認する

時間を節約するために、作業者は手動でのデータ入力をスキップすることを好む場合があります。 データに加えられた変更の結果について少し考えることで、これを実現できます。 これを実現するために、いくつかのオプションが存在します。 たとえば、従業員がテーブルのインデックスを確認する場合があります。 すでに列よりも多くのインデックスが存在する場合、別のデータベース インデックスを追加してもパフォーマンスに大きな影響を与えない可能性は十分にあります。 従業員は、テーブルに対してクエリを実行することで、クエリの実行時間をチェックすることもできます。 データベース インデックスを作成する価値は、クエリの実行にかかる時間によって異なります。

ワーカーが独自のインデックスを生成するためにデータを追加または削除する必要がある場合は、データベースの残りの部分への影響を考慮した上で行うことができます。 たとえば、データベースがベンダーの連絡先詳細でいっぱいの場合、会社と特定の従業員を結び付ける電話番号を削除するのは愚かです。

データベースインデックスの内部的な仕組み

データベース インデックス SQL は内部的にツリーとして構造化されています。 データベース インデックスはツリーとしてグラフィカルに表現され、葉の代わりに個々のレコードが表示されます。 ポインタによって接続された複数のノードがデータベースのインデックス ツリーの構造を構成します。

CREATE INDEX コマンドを実行すると、インデックス ツリーが生成されます。 データベース プログラムのアルゴリズムがインデックス ツリーの作成を担当します。 インデックス構築手順は、インデックス キーによってレコードをソートするステップから始まります。 ツリー インデックス内のすべてのノードが作成されると、その上に構造が構築されます。 データベース内に多数のレコードがある場合、インデックス ツリーの作成に時間がかかることがあります。

テーブル内の特定の行を見つけるには、リーフ ノードからインデックス検索を開始する必要があります。 道路の分岐点ごとに、どの道を選択するかを選択する必要があります。 これには、検索基準と各フォークに該当する値を詳細に分析する必要があります。 非常に基本的な例として、12 つの枝に分かれた木で数字 0 を検索する場合を考えてみましょう。 数字 10 ~ 11 はブランチ X にあり、20 ~ 12 はブランチ Y にあります。11 は XNUMX より大きいため、そこを確認する必要があります。

B ツリーは、特殊なインデックス ツリーの一例です。 バランス ツリー (B ツリー) には、ルートから各リーフ ノードまで同じ数のノードがあります。

データベースインデックスが内部でどのように機能するか

インデックスは、個々の項目への参照を保存することで関連情報に簡単にアクセスできるようにする単なるデータ構造です。 インデックスがない場合、データベース内のデータ行は組織化されていない「ヒープ」に保持されることがよくあります。 Microsoft SQL Server と Azure SQL Database の両方には、この機能を有効または無効にするために使用できるスイッチがあります。

実際には、データが完全に構造化されていない状態で保持されることはほとんどありません。 主キー (MySQL ではインデックスと同じになる場合もあります) が通常は代わりに使用されます。 自動インクリメントする整数の形式をとる場合があります。 ただし、データの並べ替えに使用できる列は XNUMX つだけであるため、(一意の値を使用した) 並べ替えの「バイナリ」効率は、順序付けされた列でフィルター処理するクエリに制限されます。 インデックスのあるテーブルは、多くの列でソートできるため、二分探索を使用して効率的に検索できます。

列にインデックスを付けると、実際には、インデックスを付けた列と、探している項目の場所へのポインタの 5 つの列を含む新しいテーブルが作成されます。 インデックスは元のテーブルと同じ長さになりますが、その幅は大幅に小さくなり、格納および走査に必要なディスク ブロックが少なくなります。 MySQL では、ポインターのサイズは XNUMX バイト未満になる傾向があります。 さらに深く知りたい人のために、上で参照した「伝説の」スタック オーバーフローの投稿では、ストレージに必要なブロック数の背後にある計算について説明しています。

ゼロから構築した場合を除き、現在のデータベースにはおそらく多数のインデックスが存在します。

データベースインデックスの重要性

データベース インデックスの重要性は決して無視できませんが、追加の書き込みや、データの複製コピーを最新の状態に保つための追加のストレージ スペースの必要性という形でコストが発生します。 データベース インデックスのもう XNUMX つの重要性は、最適なパフォーマンスを確保するために定期的なメンテナンスが必要なことです。 ただし、インデックスを使用する利点は、インデックスを維持することによる多少の不便さをはるかに上回ります。 インデックスが適切に機能するには、定期的なメンテナンスが必要です。 インデックスの再構築、再編成、断片化のチェックは、このカテゴリのタスクに分類されます。

インデックスを持つコスト

人生における他のほとんどのことと同様、インデックスにもお金がかかります。 テーブル内の行のいずれかが (INSERT、UPDATE、または DELETE によって) 変更された場合、テーブル上のすべてのインデックスを更新する必要があります。 これらの変更には時間がかかり、データベースに複数のインデックスが存在する場合、テーブルを広範囲に編集するプロセスのパフォーマンスが低下する可能性があります。

続行する前に、インデックス構築のコストとメリットを比較検討する必要があります。 顕著な効率の向上が期待できるでしょうか? これは統計表ですか、それとも大幅に操作されたものですか? テーブルを調整する間、パフォーマンスが低下しても大丈夫でしょうか? この検査の結果により、インデックスを作成する必要があるかどうかがわかります。 一部のデータベースには、必要に応じてインデックスを自動的に構築および削除する機能もあります。

データベースインデックスについて忘れてはいけないこと

データベースのインデックスについて忘れてはいけないことは次のとおりです。

  • インデックス作成には、検索基準列とポインターを含むデータ構造の追加が含まれます。
  • ポインタは、残りのデータを含む行のメモリ ディスクの場所です。
  • インデックス データ構造を並べ替えると、クエリのパフォーマンスが向上します。
  • クエリはインデックス内の目的の行を見つけます。 インデックスが見つかると、残りのデータへの参照が提供されます。
  • インデックスを使用すると、クエリは XNUMX 行ではなく XNUMX 行を参照するだけで済みます。

ダミーのためのインデックスとは何ですか?

指標とは、目安となる数値のことです。 証券市場の動きを定量的に分析することを指す言葉です。 金融市場の株式市場指数と債券市場指数はそれぞれ、市場全体またはその一部の代わりとなる証券の架空のポートフォリオで構成されています。

索引付けの目的は何ですか?

インデックス作成は、インフレ、失業、GDP 成長、生産性、株式市場のリターンなどの経済指標を監視するための統計ツールです。

最終的な考え

新しいクエリに応じて従業員がデータベースを常に再配置するよりも、インデックスを使用する方がはるかに効率的です。 一方、インデックスは独自の内部データベース階層を生成します。 たとえば、データベースのインデックスには B ツリー構造が採用されている場合があります。 また、XNUMX つ以上の分岐を持つノードもサポートされているため、ワーカーは単純な二分検索を超えて拡張できます。

参考文献

コメントを残す

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *

こんな商品もお勧めしています