MySQLインデックスの基本構文

MySQLインデックスの基本構文

インデックスはソートされたデータ構造です。 where 条件での検索や order by 条件での並べ替えに使用できるフィールドは、データの物理アドレスをインデックス化することで、すばやく検索できます。

インデックス分類

1. 通常のインデックス: 制約なし。主にクエリの効率を向上させるために使用されます。

2. ユニークインデックス(UNIQUE):通常のインデックスに基づいてデータの一意性制約を追加します。複数のインデックスが存在する場合があります。

3. 主キーインデックス:主キーインデックスは、ユニークインデックスに基づいて非NULL制約を追加します。つまり、NOT NULL+UNIQUEであり、1つしか存在できません。

4. 全文インデックス (FULLTEXT): MySQL の組み込み全文インデックスは英語のみをサポートします。

一般的には、ES(ElasticSearch)などの専用の全文検索エンジンが使用される。

インデックスを作成

#通常のインデックス

ALTER TABLE テーブル名 ADD INDEX インデックス名 (column_list);

#ユニークインデックス

ALTER TABLE テーブル名 ADD UNIQUE インデックス名 (column_list);

#主キーインデックス

ALTER TABLE テーブル名 ADD PRIMARY KEY インデックス名 (column_list);

#全文インデックス(文字列データ型)

ALTER TABLE テーブル名 ADD フルテキスト インデックス名 (column_list);  

#インデックスを表示

学生からのインデックスを表示 \G

ここでは、セミコロン終端文字の代わりに \G が使用され、出力データ情報がフォーマットされます。

#インデックスを削除

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

ALTER TABLE テーブル名 DROP INDEX インデックス名;

主キーインデックスを削除する

ALTER TABLE テーブル名 DROP PRIMARY KEY;

インデックス列が 1 列の場合、それは単一のインデックスです。
複数の列を組み合わせて作成されたインデックスを結合インデックスと呼びます。

どのような状況でインデックスを作成できますか?

1. フィールドの値には、idなどの一意性の制約があります。

2. 特にデータテーブルが大きい場合にWHEREクエリ条件として頻繁に使用されるフィールド

データ量が非常に多い場合、WHERE 条件フィルタリングがないのはひどいことです。

3. GROUP BYとORDER BYを頻繁に実行する必要がある列

4. UPDATEとDELETEのWHERE条件列も通常はインデックスを作成する必要がある

その理由は、まず WHERE 条件列に基づいてレコードを取得し、その後更新または削除する必要があるためです。非インデックス フィールドでデータを更新すると、その効果はより明白になります。

インデックスが多すぎると、データの更新時にインデックスの更新が発生する場合に負担がかかります。

5.DISTINCTフィールドにはインデックスを作成する必要がある

6. 複数テーブルのJOIN操作を実行する場合、インデックスを作成するときに次の原則に注意する必要があります。

接続するテーブルの数は 3 を超えてはなりません。テーブルを追加するたびにネストされたループが追加され、桁数が急速に増加します。接続に使用するフィールドにインデックスを作成し、複数のテーブル内のフィールドの型が一貫している必要があります。

インデックスを作成する必要がないのはいつですか?

インデックスの価値は、フィールドをすばやく見つけることです。フィールドが見つからない場合は、通常、インデックスを作成する必要はありません。

1. WHERE 条件 (GROUP BY および ORDER BY を含む) で使用されないフィールドにはインデックスを作成する必要はありません。

2. テーブルのレコード数が少なすぎる場合 (たとえば、1,000 行未満) は、インデックスを作成する必要はありません。

3. フィールドに大量の重複データがある場合、性別フィールドなどのインデックスを作成する必要はありません。

4. 頻繁に更新されるフィールドには、必ずしもインデックスを作成する必要はありません。データを更新する際には、インデックスも更新する必要があるためです。インデックスが多すぎると、インデックス更新時に負担がかかり、効率に影響します。

どのような状況でインデックスが失敗するのでしょうか?

1. インデックス列を式の計算や関数に使用すると失敗します。

2. WHERE 句で、OR の前の条件列にインデックスが付けられているが、OR の後の条件列にインデックスが付けられていない場合、インデックスは無効になります。

3. あいまいクエリにLIKEを使用する場合、式は%で始まることはできません。

4. インデックス列をNOT NULL制約に設定してみる

インデックス列が NOT NULL かどうかを判断するには、多くの場合、テーブル全体のスキャンが必要です。したがって、データ テーブルを設計するときに、フィールドに NOT NULL 制約を設定するのが最適です。たとえば、INT 型フィールドの既定値を 0 に設定できます。文字タイプのデフォルト値を空の文字列 ('') に設定します。

上記はMySQLインデックスの基本構文の詳細な内容です。MySQLインデックス構文の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySql インデックスはクエリ速度を向上させる一般的な方法のコード例
  • MySQL インデックスが失敗するいくつかの状況の概要
  • MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明
  • MySQL インデックスのパフォーマンス最適化の問題に対する解決策
  • MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要
  • さまざまな種類のMySQLインデックス
  • MySQL パフォーマンスの最適化: インデックスを効率的かつ正しく使用する方法
  • MySQLの複合インデックス方式の詳細な説明
  • MySQLが間違ったインデックスを選択する理由と解決策

<<:  nginx の default_server 定義とマッチングルールの詳細な説明

>>:  JavaScript配列重複排除の詳細な説明

推薦する

VMware 仮想マシンに CentOS と Qt をインストールするチュートリアル図

VMware のインストールパッケージのインストールダウンロードアドレス: https://www....

TOM.COMのホームページリニューアルの経験

<br />何の警告もなく、cnBeta で TOM.COM の Web サイトが再設計...

Vueは画像のドラッグアンドドロップ機能を実装します

この記事の例では、画像のドラッグアンドドロップ機能を実現するためのVueの具体的なコードを参考までに...

Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...

XHTML チュートリアル、XHTML の基礎を簡単に紹介します

<br />この記事では、XHTMLとXHTMLの基礎知識について簡単に紹介します。 X...

Vueプラグインの詳しい説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

MySQLデータベーステーブルの容量を確認する方法の例

この記事では、MySQL のデータベース テーブルの容量を確認するためのコマンド ステートメントを紹...

MacOS Catalina アップグレード後の VMware ブラック スクリーン問題に対する完璧な解決策の詳細な説明

MacOS Catalina アップグレード後の VMware ブラック スクリーンに対する完璧なソ...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...

Docker を使用して Spring Boot をデプロイする方法

Docker テクノロジの開発により、マイクロサービスの実装にさらに便利な環境が提供されます。Doc...

Vue.jsは背景テーブルコンポーネントのカプセル化を管理します

目次問題分析なぜカプセル化なのかパッケージの内容は何ですか?テーブルコンポーネントをカプセル化するデ...

Linux 最速のテキスト検索ツール ripgrep (grep の最良の代替)

序文テキスト検索ツールといえば、Linux で最も便利でよく使われるツールの 1 つである grep...

JS の Promise に中止関数を追加する方法

目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...

Apache、Tomcat、Nginx サーバーの詳細な理解と比較分析

質問1件会社のサーバーはApacheを使用しており、バックエンドはPHP、サーバーはLinux C/...