ホームページ  >  記事  >  データベース  >  なぜmysqlにはインデックスが必要なのでしょうか?

なぜmysqlにはインデックスが必要なのでしょうか?

(*-*)浩
(*-*)浩オリジナル
2019-05-09 11:04:504649ブラウズ

インデックスを使用するとクエリ速度がすぐに向上するため、インデックスを使用しない場合、mysql は最初のレコードから開始し、関連する行が見つかるまでテーブル全体を読み取る必要があります。
テーブルが大きくなるほど、時間はかかりますが、完全ではありません。

推奨コース: MySQL チュートリアル

なぜmysqlにはインデックスが必要なのでしょうか?

インデックスはデータ構造です;

したがって、データベース システムは、データに加えて、特定の検索アルゴリズムを満たすデータ構造も維持しており、これらのデータ構造は何らかの方法でデータを参照 (ポイント) するため、これらのデータ構造上に高度な検索アルゴリズムを実装できます。このデータ構造がインデックスです。

インデックス データ構造分析

このインデックスの構造は何ですか?言い換えれば、なぜこの構造により検索速度が向上するのでしょうか。

1. インデックスがない場合、特定のレコードを検索するとき (たとえば、name='wish' を検索する場合)、レコードが 1 つだけ存在するという保証はないため、すべてのレコードを検索する必要があります。

2. name にインデックスが作成されている場合、mysql はテーブル全体の検索を実行し、各レコードの name 値を昇順で検索して、インデックスを構築します。エントリ (名前と行 ID) をインデックス セグメントに格納し、名前が希望の場合にクエリを実行すると、該当する場所を直接検索できます

3. インデックスを作成したからといって、必ずそれが使用されるわけではありません。 MySQL はテーブルの情報を自動的にカウントした後、インデックスを使用するかどうかを決定します。テーブル内のデータが非常に少ない場合、フル テーブル スキャンの速度はすでに高速であり、すぐにインデックスを使用する必要がなくなります。

#インデックスの動作メカニズムを説明する例#テーブル A

#id,name

## には 2 つのフィールドがあります

#テーブルには現在 1,000 万個のデータがあります要件: 名前に基づいて対応する ID をクエリします

インデックスがない場合は、すべてのレコードをクエリする必要がありますテーブルに1,000万件のレコードを入れる必要がある データを1つずつチェックする必要がある 遅いか遅くないかはあなた次第

次に、名前に基づいてインデックスを作成します。

インデックス テーブル構造:

id,name,value

ここで、値はテーブル A の ID であり、json 配列に格納されます (複数の名前も同じ状況が存在します);

その後、ソート規則に従って名前をソートできます。アルゴリズムに従って、インデックス テーブル内の名前の位置を直接特定し、レコードをテーブルAのidを取り出すことができます。

つまり、インデックスを作成すると、テーブル A のレコードに直接アクセスできるようになります。

もちろん高速です。テーブル A にクエリを実行するには、1,000 万件のデータをクエリする必要があります。インデックスを作成することで、アルゴリズムによってクエリ量が大幅に削減されます。

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

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