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 棒グラフで疫病データ統計を実現

推薦する

Linux システムで Vim を使用してリモート ファイルを読み書きするコマンドの詳細な説明

vim の動作モードを設定する (一時的) :set (モード情報) :set nu — 行番号を表...

MySQLのビューとインデックスの使い方と違いの詳細な説明

MySQL ビュー簡単に言えば、MySQL ビューは SELECT コマンドを定義するためのショート...

MySQL 5.7.17 zip パッケージ バージョンを Windows 10 にインストールするチュートリアル

mysql5.7.17のインストールチュートリアルを参考までに共有します。具体的な内容は次のとおりで...

HTML テーブルタグチュートリアル (19): 行タグ

<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...

ウェブサイトのデザイン体験のための7つの異なるカラースキーム

ウェブサイト構築におけるカラーマッチングは非常に特殊であり、ウェブサイトのテーマ、感情、雰囲気などの...

Win10 への MySQL 5.7 のインストール MSI 版のチュートリアル(画像とテキスト付き)

主にインストール後に my.ini ファイルを確認するために、msi 形式でインストールしました。フ...

画像とテキストでHTTPヘッダーのあらゆる側面を理解する

HTTPヘッダーとはHTTP は「Hypertext Transfer Protocol」の略です。...

MySQL で準備、実行、割り当て解除ステートメントを使用するチュートリアル

序文MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。...

CentOS7環境にMySQL5.5データベースをインストールする

目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...

nginx の場所に複数の Proxy_pass メソッドがある

1. まず、nginxの位置情報に関する関連知識を確認しましょう1) 位置マッチング手順: ~ #波...

MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

Mysqlデータベーステーブルの定期的なバックアップの実装0. 背景実際の開発環境では、フロントエン...

MySQL テーブル分割後にスムーズにオンラインになる方法

目次テーブルの目的例えばテーブル分割戦略すでにオンラインになっている実行中のテーブルはどうすればよい...

Dockerを使用してSpring Bootプロジェクトをデプロイする手順

目次シンプルなSpringbootプロジェクトを作成する1. pom.xmlでSpring Boot...

yumコマンドの使い方

1. yumの紹介Yum (フルネームは Yellow dogUpdater、Modified) は...

我々は自らの力でIE6を絶滅に追い込んでいる

実際、IE6 が本当にいつ消滅するのか私たちは毎日疑問に思っていますが、2001 年のリリース以来、...