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

推薦する

Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...

MySQL でレプリケーション フィルターを動的に変更する方法

MySQLはレプリケーションフィルターを動的に変更します今日遭遇した問題についてお話しします。今日は...

Windows環境でのMySQL 8.0.13無料インストールバージョンの設定チュートリアル

目次圧縮ファイルをダウンロードするアドレス: https://dev.mysql.com/downl...

デザイン協会: なぜ間違った場所を探したのですか?

数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...

Ubuntuがネットワークに接続できない場合の解決策

仮想マシン内の Ubuntu がネットワークに接続できない場合の効果的な解決策: 1. Ubuntu...

MYSQL8.0.13 無料インストール版 設定チュートリアル例 詳細説明

1. ダウンロード、例として8.0を取り上げますダウンロードアドレス: https://dev.my...

Win10環境にMysql5.7.23をインストールする際の問題点と落とし穴

たくさんのチュートリアルを読みましたが、うまくインストールできませんでした。しばらく試行錯誤した後、...

画像マーキー効果を実現するネイティブJS

今日は、ネイティブ JS で実装された画像マーキー効果を紹介します。効果は次のとおりです。 実装され...

関連するプロパティのリストを含む HTML エリア イメージ ホットスポットの使用の概要

<area> タグは主にイメージマップで使用されます。イメージマップにアクティブ領域 (...

フレックスボックスレイアウトの最終行の左揃えの実装アイデア

フレックスレイアウトを使用すると、9つの正方形のグリッドであれば、図に示すように均等に分割できます。...

ウェブサイトの再設計はどの家族にとっても難しい作業です

<br />どの家庭にもそれぞれの問題があり、改訂はどの IT 企業にとっても問題の 1...

Vueコンポーネントのルーティング強調表示問題の解決策

序文以前は、キャッシュを使用してルートを強調表示していました。すべてのルートをトラバースし、クリック...

Vue.js での VNode の使用

VNodeとはvue.js には VNode クラスがあり、これを使用してさまざまな種類の vnod...

Linux の MySQL でリモート接続を承認する方法

注意: 他のマシン (IP) は、承認なしではクライアント経由で MySQL データベースに接続でき...

新しい Linux ファイル権限設定における umask の詳細な理解

序文起源は質問 1 です: umask が 022 に設定されている場合、作成するファイルのデフォル...