[データベース] MySQLセカンダリインデックス

MySQLセカンダリインデックス

I.はじめに

1.MySQLインデックスを理解する必要があります。
2. MySQLでは、テーブルが作成されると、デフォルトでクラスター化インデックスが主キーとして作成されます。B+ツリーは、テーブル内のすべてのデータを編成します。つまり、データはインデックスの主キーです。したがって、InnoDBでは、主キーインデックスはクラスター化インデックスとも呼ばれます。インデックスのリーフノードには、データの行全体が格納されます。クラスタ化インデックスを除くすべてのインデックスはセカンダリインデックスと呼ばれ、セカンダリインデックスのリーフノードの内容はプライマリキーの値です。

次に、セカンダリインデックスを作成します

セカンダリインデックスを作成します。

CREATE INDEX [index name] ON [table name]([column name]);

または

ALTER TABLE [table name] ADD INDEX [index name]([column name]);

MySQLでは、CREATEINDEX操作はALTERTABLEADD_INDEXにマップされます。

3.セカンダリインデックス形式

たとえば、次のテーブルを作成します。

CREATE TABLE users(
    id INT NOT NULL, 
    name VARCHAR(20) NOT NULL,
    age INT NOT NULL, 
    PRIMARY KEY(id) 
    );

年齢フィールドを使用して新しいセカンダリインデックスを作成します。

ALTER TABLE users ADD INDEX index_age(age);

MySQLは、主キーIDのクラスター化インデックスと年齢のセカンダリインデックスを作成します。
ここに画像の説明を挿入

MySQLでは、プライマリキーインデックスのリーフノードはデータの行全体を格納し、セカンダリインデックスリーフノードのコンテンツはプライマリキーの値です。

第四に、二次索引の検索プロセス

MySQLクエリプロセスでは、SQLオプティマイザが取得する適切なインデックスを選択します。セカンダリインデックスを使用するプロセスでは、セカンダリインデックスがクエリ要件を満たしている場合、セカンダリインデックスはすべてのデータを格納しないため、 idと現在の列の属性のみを確認してください)、直接、つまりカバーするインデックスを返します。それ以外の場合は、テーブルに戻って主キーインデックス(クラスター化インデックス)をクエリする必要があります。

実行など

SELECT * FROM users WHERE age=35;

テーブルに戻る必要があります:
ここに画像の説明を挿入

EXPLAINを使用して実行プランを表示すると、使用されているインデックスが以前に作成したindex_ageであることがわかります。
ここに画像の説明を挿入

したがって、セカンダリインデックスは、指定されたフィールドとプライマリキーの間のマッピングです。プライマリキーの長さが短いほど、通常のインデックスのリーフノードが小さくなり、セカンダリインデックスが占めるスペースが小さくなります。したがって、あまり使用しないでください。主キーとしての長いフィールド。

添付ファイル:上記の知識は、データベースカーネルの月次レポート-2020/01を単純化することから得られたものです。それがあなたが始めるのに役立つことを願っています。

おすすめ

転載: blog.csdn.net/thesprit/article/details/112989674