MySQLデータベースインデックスの詳細な説明

MySQLデータベースインデックスの詳細な説明

本日も引き続き、MySQL関連の知識をご紹介させていただきます。今回の記事の主な内容はMySQLのインデックス関連の内容です。

1. MySQLインデックスの紹介

インデックスは、データクエリを高速化するために、MySQL データベースによってテーブル内の 1 つまたは複数の列に追加される「ディレクトリ」です。 MySQL のインデックスは特別なファイルですが、InnoDB タイプのエンジン (MySQL エンジンについては今後の記事で説明します) のテーブルのインデックスはテーブル スペースの不可欠な部分です。
MySQL データベースは、通常のインデックス、一意のインデックス、主キー インデックス、複合インデックス、全文インデックスの合計 5 種類のインデックスをサポートしています。以下では、これら 4 種類のインデックスを 1 つずつ紹介します。

2. MySQLの5種類のインデックスの詳しい説明

1. 総合索引

共通インデックスは、MySQL データベース内の共通のインデックスです。共通インデックスを追加する列のデータには特別な要件はありません。共通インデックスの役割は、差分クエリを高速化することです。
以下は、データ テーブルを作成するときに共通インデックス SQL ステートメントを追加する例です。

テーブルexp(id int, name varchar(20),index exp_name(name))を作成します。

または、次のようにインデックスをキーに置き換えます。

テーブル exp (id、int、name varahcr (20)、キー exp_name(name)) を作成します。

上記の SQL コマンドでは、key または index はインデックスの追加を意味し、その後にインデックス名が続き、括弧内の列はインデックスを追加する列です。
この記事で紹介したインデックス関連のSQL文では、特別な説明がない限り、インデックスをキーに置き換えることができます。記事の長さを節約するために、この点については今後繰り返しません。
また、インデックス名を指定せずにインデックスを追加することもできます。この場合、MySQL はフィールドと同じ名前のインデックス名を自動的にインデックスに追加します。
実行結果は次のとおりです。

ここに画像の説明を挿入

データ テーブルを作成した後、テーブルに新しい共通インデックス SQL ステートメントを追加する例を次に示します。

テーブル exp を変更し、インデックス exp_id(id) を追加します。

実行結果は次のとおりです。

ここに画像の説明を挿入

以下は、データ テーブルを作成した後に共通インデックスを削除する SQL ステートメントの例です。

テーブルを変更してインデックス exp_name を削除します。

実行結果は次のとおりです。

ここに画像の説明を挿入

上記のコマンドでは、exp_name はインデックスを含むフィールドの名前ではなく、インデックスの名前であることに注意してください。テーブル内のインデックスの名前を忘れた場合は、次の SQL コマンドを実行してクエリを実行できます。

exp からインデックスを表示します。

このうち、exp はテーブル名であり、コマンド実行結果は以下のようになります。

ここに画像の説明を挿入

上の図からわかるように、通常のインデックスを追加した後、desc を使用してテーブル構造を表示すると、Key 列に MUL が表示されます。これは、列に通常のインデックスが追加されたことを意味します。

(II) ユニークインデックス

ユニーク インデックスは、インデックスが追加された列のすべての値が 1 回だけ出現することを要求する共通インデックスです。通常、一意のインデックスは ID 番号や学生番号などのフィールドに追加されますが、名前などのフィールドに追加することはできません。
ユニーク インデックスの追加は、通常のインデックスの追加とほぼ同じですが、通常のインデックスのキーワード key と index が、ユニーク キーとユニーク インデックスに置き換えられます。
以下は、データ テーブルを作成するときに一意のインデックスを追加する SQL ステートメントの例です。

テーブル exp (id int、name varchar(20)、一意のキー (name)) を作成します。

上記コマンドの実行結果は以下のとおりです。

ここに画像の説明を挿入

desc コマンドを使用して、一意のインデックスが追加されたフィールドのテーブル構造を照会すると、キー列に UNI が表示され、フィールドに一意のインデックスが追加されたことが示されます。
データ テーブルを作成した後に一意のインデックスを追加する SQL ステートメントの例を次に示します。

ここに画像の説明を挿入

以下は、一意のインデックスを削除する SQL ステートメントの例です。

alter table exp drop index name;

実行結果は次のとおりです。

ここに画像の説明を挿入

(III) 主キーインデックス

主キー インデックスは、データベース内のすべてのインデックスの中で最もクエリ速度が速く、各データ テーブルには主キー インデックス列を 1 つだけ持つことができます。主キー インデックスの列には重複データや null 値を含めることはできません。
主キー インデックスの追加と削除は、キーが主キーに置き換えられることを除いて、通常のインデックスや一意のインデックスと非常によく似ています。関連する SQL コマンドは次のとおりです。

テーブル exp(id int 、name varchar(20)、主キー (id)) を作成します。テーブル exp を変更して主キー (id) を追加します。

列に主キー インデックスを追加すると、次に示すように、desc でテーブル構造を表示するときに、キー列に PRI が表示されます。

ここに画像の説明を挿入

主キー インデックスを削除するには、次のコマンドを実行します。

alter table exp 主キーを削除します。

この SQL ステートメントでは、キーをインデックスに置き換えることはできないことに注意してください。
時々、主キー インデックスを削除しようとすると、MySQL が拒否することがあります。これは、auto_increment 属性がフィールドに追加されていることが原因の可能性があります。次に示すように、フィールド修飾子を削除することで、フィールドの主キー インデックスを削除できます。

ここに画像の説明を挿入

(IV)総合指数

異なる列を含むインデックスを作成する場合は、複合インデックスを作成できます。実際、複合インデックスはビジネス シナリオで頻繁に使用されます。たとえば、データ パケットの内容を記録する場合、データ パケットを識別するための基準として IP とポート番号を使用する必要があります。この場合、IP アドレス列とポート番号列の複合インデックスを作成できます。以下は、複合インデックスの作成、追加、および削除を行う SQL ステートメントの例です。

テーブル exp (ip varchar(15),port int,主キー (ip,port)) を作成します。
alter table exp に主キー(ip、port)を追加します。
alter table exp dorp 主キー;

複合インデックスが作成された後、desc を使用してデータ テーブル構造を表示すると、キー列に複数の PRI が表示されます。これは、PRI を含むこれらの列が複合インデックスの列であることを意味します。以下のように表示されます。

ここに画像の説明を挿入

複合インデックスは、複数列の主キー インデックスと同等であることに注意してください。したがって、複合インデックスが追加される列には空のデータを含めることはできず、これらの列のデータは完全に同じにすることはできません。そうでない場合、MySQL データベースはエラーを報告します。以下のように表示されます。

ここに画像の説明を挿入

(V) 全文索引

全文インデックスは主に、大量のデータにおけるあいまい一致の問題を解決するために使用されます。データベース内のフィールドのデータ量が非常に多い場合、like+ワイルドカード方式を使用して検索すると、速度が非常に遅くなります。この場合、フルテキスト インデックスを使用してあいまいクエリを高速化できます。全文索引の原理は、単語分割技術によってテキスト内のキーワードとその出現頻度を分析し、順番に索引を作成することです。フルテキスト インデックスの使用は、データベースのバージョン、データ テーブル エンジン、さらにはフィールド タイプと密接に関連しています。主な制限は次のとおりです。
1. フルテキスト インデックスは、MySQL バージョン 3.2 以降でのみサポートされます。
2. MySQL バージョン 5.7 以降には ngram プラグインが組み込まれ、フルテキスト インデックスで中国語がサポートされるようになりました。
3. MySQL 5.6 より前のバージョンでは、MyISAM エンジンのみがフルテキスト インデックスをサポートしています。
4. MySQL 5.6 以降のバージョンでは、MyISAM エンジンと InnoDB エンジンの両方がフルテキスト インデックスをサポートしています。
5. フルテキスト インデックスの追加をサポートするのは、char、varchar、text のデータ型を持つフィールドのみです。
フルテキスト インデックスを作成、追加、削除するための SQL コマンドは次のとおりです。

テーブル exp (id int、コンテンツ テキスト、filltext キー (コンテンツ)) を作成します。エンジン = MyISAM;
alter table exp フルテキスト インデックス (コンテンツ) を追加します。
テーブル exp を変更してインデックスの内容を削除します。

実行結果の一部は次のとおりです。

ここに画像の説明を挿入

全文インデックスを作成した後は、あいまい検索に like+wildcard メソッドを使用することはできません。全文インデックスの使用には、次に示すように独自の特定の構文があります。

select * from exp where match(content) against ('a');

match の後の括弧内のフィールドには全文インデックスが含まれ、against の後の括弧内のフィールドにはあいまい一致の対象となるコンテンツが含まれます。
さらに、フルテキスト インデックスの役割は一意ではありません。多くのシナリオでは、MySQL データベースの組み込みフルテキスト インデックスを使用せず、同様のサードパーティ インデックスを使用して同じ機能を実現します。

3. MySQLインデックスの使用原則

1. インデックス作成は、典型的な「スペースと時間を交換する」戦略です。コンピュータのストレージ スペースを消費しますが、クエリの速度は上がります。
2. インデックスを追加するとクエリ速度は向上しますが、挿入と削除の速度は低下します。データの挿入および削除時に追加のインデックス操作が必要になるためです。
3. インデックスは多ければ多いほど良いです。データ量が多くない場合はインデックスを追加する必要はありません。
4. テーブルの値を頻繁に挿入および変更する必要がある場合、インデックスを作成することは適していません。逆に、テーブル内のフィールドの値を頻繁にクエリ、並べ替え、グループ化する必要がある場合は、インデックスを作成する必要があります。
5. フィールドがユニークインデックスを作成するための条件を満たしている場合は、通常のインデックスを作成しないでください。

要約する

これで、MySQL データベース インデックスの詳細な説明に関するこの記事は終了です。MySQL インデックスに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLでテーブルインデックスを構築する方法
  • MySQL のインデックスとデータ テーブルを管理する方法
  • MySQLデータベースインデックスの詳細な紹介
  • MySQL データの最適化 - 多層インデックス
  • MySQLインデックスの基礎となるデータ構造の詳細
  • MySQL データベースのインデックスとトランザクション
  • MySQLテーブルのインデックス作成の原理の詳細な説明

<<:  Centos7 での NFS サービス構築の紹介

>>:  Vue+Echart 棒グラフで疫病データ統計を実現

推薦する

MySQL 自動インクリメント ID 枯渇の例

ディスプレイ定義IDテーブルに定義された自動増分IDが上限に達した場合、次のIDを申請する際に得られ...

MySQL開発標準と使用スキルの概要

1. 命名規則1. データベース名、テーブル名、フィールド名には小文字を使用し、アンダースコアで区切...

MySQLは遅いSQLを開始し、原因を分析します

ステップ1. MySQLスロークエリを有効にする方法1: 設定ファイルを変更するWindows: W...

HTTPS の有効化に関する経験の共有

国内のネットワーク環境が悪化し続ける中、さまざまな改ざんや乗っ取りが後を絶たず、サイト全体をHTTP...

Win10にMySQL8圧縮パッケージ版をインストールするチュートリアル

1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...

JavaScript ウェブページ入門開発詳細説明

パート3: ❤バックエンドデータ受信を見落とす3つの方法❤ (おすすめ集)パート 2: Web フォ...

CSSは5つの一般的な2D変換を実装します

CSS の 2D 変換を使用すると、移動、回転、拡大縮小、変形などの基本的な変換操作を 2 次元空間...

Tomcatはスレッドプールを使用してリモート同時リクエストを処理します。

Tomcatが同時リクエストを処理する方法を理解することで、スレッドプール、ロック、キュー、および...

ReactJs 基礎チュートリアル - 基本編

目次1. ReactJS の紹介2. ReactJSの理解とReactJSの利点1. ReactJS...

Mac M1 での Nginx のマルチサイト構成の実装

注: nginxはbrew経由でインストールされますウェブサイトのルートディレクトリ: /opt/h...

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...

Linuxでのcrontabの使い方と注意点の詳しい説明

Crontab は定期的な実行を設定するために使用されるコマンドです。そのデーモン プロセスは cr...

MySQLワームレプリケーションの基本知識

ワームは、その名前が示すように、自ら複製し、その数は倍増、つまり指数関数的に増加します。 MySQL...

Dockerの基本的な手順

目次基本的な指示1. 現在のマシンのコンテナステータスを確認する2. イメージをダウンロードまたは取...