MySQL データベース - 索引 (1) - 概要と B ツリー構造

目次

インデックスの概要

導入

長所と短所

インデックス構造 (1)

導入

二分木

B ツリー


インデックスのこの章は、次の部分に分かれて学習します。

  • インデックスの概要
  • インデックス構造
  • 指数の分類
  • インデックス構文
  • SQLパフォーマンス分析
  • インデックスの使用法
  • インデックス設計の原則

インデックスの概要

導入

インデックス (インデックス) は、 MySQL がデータを効率的に取得できるようにする(順序付けられた)データ構造です。データベース システムは、データに加えて、特定の検索アルゴリズムを満たすデータ構造も維持します。これらのデータ構造は、何らかの方法でデータを参照 (ポイント) するため、これらのデータ構造に高度な検索アルゴリズムを実装できます。このデータ構造は、インデックスです。

インデックスなしでテーブル データをクエリする場合 (たとえば、年齢が 45 歳に等しいクエリを実行する場合)、

テーブル全体をスキャンして、クエリ条件を満たしているかどうかを 1 つずつ照合する必要があります。

二分検索ツリー構造を使用してインデックスを作成すると、クエリ時にテーブル全体のスキャンを実行する必要がなく、テーブル内の年齢が 45 に等しい情報を迅速に見つけることができます。

長所と短所

アドバンテージ 短所
データ取得効率を向上させ、データベース IO コストを削減します。 インデックス列にもスペースが必要です
インデックス列を介してデータを並べ替えると、データの並べ替えのコストが削減され、CPU 消費量が削減されます。 インデックスを使用するとクエリの効率が大幅に向上しますが、同時にテーブルの更新速度も低下します。たとえば、テーブルに対して INSERT、UPDATE、DELETE を実行すると効率が低下します。

テーブル内のインデックス フィールド データが頻繁に変更されると、インデックスのメンテナンス作業も頻繁になり、データの不整合の問題が発生する可能性もあります。

インデックス構造 (1)

導入

以前にストレージ エンジンについて学んだとき、MySQLインデックスはストレージ エンジン層で実装されていることがわかりました。ストレージ エンジンが異なればインデックス構造も異なり、主に次のものが含まれます (いくつかのデータ構造の基本はよく理解されています)。

インデックス構造 説明する
B+ツリーインデックス
最も一般的なインデックス タイプ。ほとんどのエンジンが B+ ツリー インデックスをサポートします。
ハッシュ インデックス
基礎となるデータ構造はハッシュ テーブルを使用して実装されており インデックス列に正確に一致するクエリのみが有効 です
サポート範囲クエリ
R ツリー ( 空間インデックス)
鉛)
空間インデックスは MyISAM エンジンの特殊なインデックス タイプで、主に地理空間データ クラスに使用されます。
タイプ、通常あまり使用されない
全文( 全文
インデックス
これは、逆索引を確立する ことによって 文書を迅速に照合する方法です。に似ている
ルシーン、Solr、ES

B+ ツリーが最も一般的に使用されます。ここでは B+ ツリーに焦点を当てます。

次に、インデックス構造に対するさまざまなストレージ エンジンのサポートを見てみましょう。

索引 InnoDB マイISAM メモリ
B+ツリー インデックス
サポート
サポート
サポート
ハッシュ インデックス
サポートしません
サポートしません
サポート
R ツリー インデックス
サポートしません
サポート
サポートしません
全文
バージョン5.6以降でサポートされる
サポート サポートしません
注: 通常参照するインデックスは、特に指定がない限り、B+ ツリー構造で編成されたインデックスを指します。

二分木

MySQLのインデックス構造が二分木のデータ構造を採用している場合、理想的な構造は次のとおりです。

主キーが連続して挿入される場合、次の構造を持つ一方向リンク リストが形成されます。

したがって、インデックス構造としてバイナリ ツリーを選択すると、次のような欠点があります。

  • 連続して挿入すると、リンクされたリストが形成され、クエリのパフォーマンスが大幅に低下します。
  • データ量が多い場合は階層が深くなり、検索速度が遅くなります。

この時点で、赤黒ツリーを選択できると思われるかもしれませんが、赤黒ツリーは自己平衡型二分木です。データがシーケンシャルに挿入された場合でも、最終的なデータ構造は平衡型二分木になります。以下のとおりであります:

ただし、それでも、赤黒木も二分木であるため、次のような欠点があります。

  • データ量が多い場合は階層が深くなり、検索速度が遅くなります。

したがって、MySQLのインデックス構造ではバイナリツリーや赤黒ツリーは選択されず、B+Treeが選択されます。

B+Tree を学ぶ前に、B-Tree を紹介しましょう。

B ツリー

B ツリー、B ツリーはマルチフォークのロードマップ検索ツリーであり、バイナリ ツリーと比較して、B ツリーの各ノードは複数の分岐、つまりマルチフォークを持つことができます。
最大次数 (max-degree) が 5 (次数 5) の B ツリーを例にとると、この B ツリーの各ノードは最大 4 つのキーと 5 つのポインターを格納できます。

注: ツリーの次数は、ノードの子ノードの数を指します。

データ構造を視覚化する Web サイトを通じて、これを簡単に実証できます。

https://www.cs.usfca.edu/~galles/visualization/BTree.html


一連のデータを挿入します: 100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120
268 250。次に、データの挿入中のノードの変化を観察します。

特徴:

  • 5 次の B ツリーは、5 つのポインターに対応する、ノードごとに最大 4 つのキーを格納します。
  • ノードに格納されているキーの数が 5 に達すると、ノードが分裂し、中間要素が上向きに分割されます。
  • B ツリーでは、非リーフ ノードとリーフ ノードの両方にデータが格納されます。


終わり


学習内容: ダークホース プログラマー - MySQL データベース コース

おすすめ

転載: blog.csdn.net/li13437542099/article/details/132817264