mysql の非クラスター化インデックスとは、インデックスの保存場所とデータの保存場所が分離されていることを意味します。つまり、インデックスは見つかってもデータが見つからない場合は、クエリを実行する必要があります。インデックスの値、つまり主キーに基づいてテーブルを再作成する ノンクラスタード インデックス クラスター インデックスは補助インデックスとも呼ばれます。
mysql の非クラスター化インデックスは次のとおりです。
インデックスのストレージとデータのストレージは分離されています。つまり、インデックスは見つかってもデータが見つからない場合は、インデックスの値 (主キー) に基づいてテーブルを再度クエリする必要があります。非クラスター化インデックスは補助インデックスとも呼ばれます。
例
以下では、student テーブルを作成し、3 つのクエリを実行して、クラスタ化インデックスである場合とそうでない場合を示します。
create table student ( id bigint, no varchar(20) , name varchar(20) , address varchar(20) , PRIMARY KEY (`branch_id`) USING BTREE, UNIQUE KEY `idx_no` (`no`) USING BTREE )ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
関連学習の推奨事項: mysql ビデオ チュートリアル
最初の方法は、主キーに基づいてすべてのフィールド データを直接クエリして取得することです。このとき、主キーに対応するインデックスリーフノードにはid=1の全フィールドの値が格納されているため、主キーはクラスターのクラスターインデックスとなります。
select * from student where id = 1
2 番目の方法は、番号に基づいて番号と名前をクエリすることです。番号自体は一意のインデックスですが、クエリされた列には学生番号と学生名が含まれます。番号インデックスがヒットした場合、インデックス付きノードのデータは主キー ID に保存され、主キー ID に基づいて再度クエリを実行する必要があるため、このクエリでは no はクラスター化インデックスではありません
select no,name from student where no = 'test'
3 番目の方法では、番号 Number に基づいてクエリを実行します (番号は知っているがクエリする必要があるかどうか尋ねられるかもしれません。はい、その番号がデータベースに存在するかどうかを確認する必要があるかもしれません)。この種のクエリは数値インデックスにヒットします。必要なデータはインデックスであるため、数値が直接返されます。テーブル クエリに戻る必要はありません。このシナリオでは、クラスター化インデックスはありません。
select no from student where no = 'test'
概要:
主キーはクラスター化インデックスである必要があります。MySQL の InnoDB
には主キーが必要です。開発者が手動で設定しなくても、 , 一意のインデックスが使用されます。一意のインデックスがない場合は、データベース内の行の ID が主キー インデックスとして使用されます。他の通常のインデックスは、SQL クエリの列が SQL シナリオと区別される必要があります。はインデックスそのものであり、このシナリオでは通常のインデックスと呼びますが、クラスター化インデックスとも呼ばれます。MyisAM エンジンにはクラスター化インデックスがありません。
以上がmysqlの非クラスター化インデックスとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。