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配列重複排除の詳細な説明

推薦する

vue-cli で stimulsoft.reports.js を使用する詳細なチュートリアル

vue-cli は stimulsoft.reports.js を使用します (ナニーレベルのチュー...

CSS で div にスクロールを追加し、スクロール バーを非表示にする

CSS は div にスクロールを追加し、スクロール バーを非表示にします。具体的なコードは次のとお...

nginx高可用性クラスタの実装プロセス

この記事は主に、nginx 高可用性クラスタの実装プロセスを紹介します。この記事のサンプルコードは非...

バックエンドの権限に基づいてナビゲーション メニューを動的に生成する Vue-router のサンプル コード

目次js の1. グローバルガードを登録する2. Vuex 状態管理グローバルキャッシュルート3. ...

SHTML 簡潔なチュートリアル

SHTMLとASPは似ています。SHTMLという名前のファイルでは、SSIの命令がASPの命令と同じ...

Linux bzip2 コマンドの使用

1. コマンドの紹介bzip2 は、ファイルの圧縮と解凍に使用されます。これは、Linux システム...

Linuxプロセス監視と自動再起動の簡単な実装方法

目的: Linux では、さまざまな理由でサーバー プログラムがダンプされ、ユーザーの使用に影響する...

Nginx 7層負荷分散のいくつかのスケジューリングアルゴリズムの簡単な理解

この記事は主に、Nginx 7 層負荷分散のいくつかのスケジューリング アルゴリズムを紹介します。こ...

小さなアイコンのフロントエンド処理ソリューションのグラフィカルな説明

序文この記事を始める前に、複数選択の質問をしてみましょう。フロントエンド開発でビルド ツールを使用す...

JavaScriptはキャンバスを使用して座標と線を描画します

この記事では、JavaScriptでキャンバスを使用して座標と線を描く具体的なコードを参考までに紹介...

インスピレーションを得るための7つのクールなダイナミックウェブサイトデザイン

デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...

dockerでビルドしたnacos1.3.0の実装

1. nacosデータベースを再開します。データベース名nacos_configユーザー名とパスワー...

Dockerfile の一般的なコマンドの概要

構文の構成: 1 注釈情報2 コマンド --- パラメータ [通常は大文字 | 実際には大文字と小文...

Linux で指定されたフォルダの各サブフォルダ内のファイル数を表示する

カウントスクリプト #!/bin/sh 引数の数=$# [ $numOfArgs -ne 1 ]の場...