MySQLインデックスが使用されない状況のまとめ

MySQLインデックスが使用されない状況のまとめ

MySQL のインデックスの種類

一般的に、次の 4 つのカテゴリに分類できます。

  • 通常のインデックス: 最も一般的なインデックス
  • 一意のインデックス: インデックス列の値は一意である必要がありますが、null 値も許可されます。
  • 主キーインデックス: NULL値を許可しない特別な一意のインデックス
  • ジョイントインデックス: インデックス列には複数のフィールドがあり、使用時には左端のプレフィックス原則を満たす必要があります。

通常のインデックス

これは最も基本的なインデックスであり、制限はありません。以下の方法で作成できます。

1. インデックスを作成する

コードは次のとおりです。

mytable(username(length))にインデックスindexNameを作成します。

CHAR または VARCHAR 型の場合、長さはフィールドの実際の長さより短くてもかまいません。BLOB または TEXT 型の場合は、長さを指定する必要があります。以下でも同様です。

2. テーブル構造を変更する

コードは次のとおりです。

ALTER mytable ADD INDEX [indexName] ON (username(length))

テーブル作成時に直接指定する

テーブルmytableを作成します(
 ID INT NULLではありません、
 ユーザー名 VARCHAR(16) NOT NULL,
 INDEX [インデックス名] (ユーザー名(長さ))
);

インデックスを削除するための構文は次のとおりです。

mytable のインデックス [indexName] を削除します。

ユニークインデックス

これは、インデックス列の値が一意である必要があることを除いて、以前の通常のインデックスと似ていますが、null 値が許可されます。複合インデックスの場合、列の値の組み合わせは一意である必要があります。以下の方法で作成できます。

mytable(ユーザー名(長さ))に一意のインデックスindexNameを作成します。

テーブル構造を変更します。

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

テーブルを作成するときは、直接指定します。

テーブルmytableを作成します(  
	ID INT NULLではありません、  
	ユーザー名 VARCHAR(16) NOT NULL,  
	一意の [indexName] (ユーザー名(長さ))  
);

主キーインデックス

これは、null 値を許可しない特別な一意のインデックスです。通常、主キー インデックスはテーブルの作成時に作成されます。

コードは次のとおりです。

テーブルmytableを作成します(  
	ID INT NULLではありません、  
	ユーザー名 VARCHAR(16) NOT NULL,  
	主キー(ID) 
);

もちろん、ALTER コマンドを使用することもできます。注意: テーブルには主キーを 1 つだけ設定できます。

共同インデックス

単一列インデックスと複合インデックスを視覚的に比較するには、テーブルに複数のフィールドを追加します。

テーブルmytableを作成します(  
	ID INT NULLではありません、  
	ユーザー名 VARCHAR(16) NOT NULL,  
	都市 VARCHAR(50) NOT NULL,  
	年齢 INT NOT NULL 
);

MySQL の効率をさらに高めるには、複合インデックスの作成を検討する必要があります。つまり、名前、都市、年齢を 1 つのインデックスに構築します。

コードは次のとおりです。

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);

インデックスが使用されない状況

インデックスは常に効果的であるとは限りません。正しく操作しないと、インデックスの代わりにテーブル全体のスキャンが実行される可能性があります。Explain の possible_key、key_len、および key パラメータを使用すると、SQL ステートメントでインデックスが使用されているかどうかを分析できます。

以下の状況ではインデックスが失敗します

  1. != はクエリ列で使用されます。たとえば、select id,name,age from student where id != 2; です。
  2. クエリ列で、ID を 2 乗する pow(id,2) などの関数演算が使用されている場合、インデックスは使用されません。
  3. 条件に or がある場合、条件の一部にインデックスがあっても使用されません (このため、 or はできるだけ使用しないでください)
  4. 結合インデックスで最左プレフィックスの原則が満たされている場合でも、最初の条件に範囲クエリが含まれている場合、インデックスは使用されません。
  5. インデックス列のデータ型が暗黙的に変換された場合、インデックスは使用されません。たとえば、列の型が文字列の場合、条件内でデータを引用符で囲む必要があります。そうしないと、インデックスは使用されません。
  6. MySQL は、インデックスを使用するよりもテーブル全体のスキャンの方が高速であると見積もった場合、インデックスを使用しません。

Explain を使用して、インデックスが使用されているかどうかをテストできます。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL インデックス使用状況監視スキル (収集する価値あり!)
  • 複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明
  • インデックスは MySQL クエリ条件で使用されますか?
  • MySQL インデックスがソートに与える影響の分析例
  • MySQLアカウントのIP制限条件を変更する方法
  • MySQL パーティションテーブルの制限と制約の詳細な説明
  • MySQLクエリステートメントは、クエリされる行の数を制限するためにlimitを使用します。
  • MySQL接続数が制限を超える問題の解決方法
  • MySQL インデックスの長さ制限の原理の分析

<<:  WeChatアプレットがジグソーパズルゲームを実装

>>:  Ubuntu 18.04 (コミュニティ エディション) に Docker CE をインストールする方法

推薦する

JavaScript クラス配列の詳細な理解

js 配列はどこでも使用されているため、おそらく誰もがよく知っているでしょうが、配列クラス (疑似配...

JS関数のカリー化の詳細な説明

目次1. 補足知識ポイント: 関数の暗黙的な変換2. 補足知識: call/apply を使って配列...

Jira リバース プロキシを実装するための nginx について

概要: nginx リバース プロキシ jira を構成し、https を実装します。Tomcat ...

Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

1. 事件の背景:仕事上、Ubuntu への vscode リモート接続を使用する必要があります。 ...

CSS スタイルを HTML 外部スタイルシートにインポートする方法

リンクインスタイルとは、すべてのスタイルを 1 つ以上の外部スタイルシート ファイルに配置することで...

JavaScript進捗管理の詳しい説明

目次序文質問原理テスト序文プログラムを作成するときに、読み込みの進行状況やアップロードの進行状況など...

...

JavaScript インタビュー: 配列の平坦化メソッドを実装する方法

目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...

MySQL スローログ実践のまとめ

遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...

MySQL がデフォルトの分離レベルとして繰り返し読み取りを選択する理由

目次Oracle 分離​​レベルMySQL 分離レベル要約する多くの読者は、MySQL のトランザク...

NexusはAPIを使用して操作します

Nexus は RestApi を提供していますが、一部の API はまだ Groovy と組み合わ...

Docker メモリ監視とストレステストの方法

起動していたDockerコンテナはメモリを使い果たした状態になっており、再起動せずにコンテナのメモリ...

MYSQL メタデータ ロック (MDL ロック) MDL ロックの問題分析

1. はじめにMYSQL の MDL ロックは常に頭痛の種でした。ロックについて話すとき、通常は I...

Web ページの HTML コードの説明: 順序付きリストと順序なしリスト

このセクションでは、HTML のリスト要素について学習します。リストは、Web サイトのデザインにお...