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 をインストールする方法

推薦する

2列のデータをSQLの新しい列として操作する

以下のように表示されます。 bb_sbからa1、a2、a1+a2 a、a1*a2 b、a1*1.0/...

さまざまなマウスの形状を表現する方法

<a href = "http://" style = "cur...

HTML の marquee 属性の詳細な説明

このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...

CSSはボックスコンテナ(div)の高さを常に100%に設定します。

序文ブラウザをどのようにズームしても、ボックス コンテナーの高さを常に 100% に保つ必要がある場...

case when文のエラー問題の詳細な説明

序文MySQL データベースでは、if else のような判断演算を使用することがあります。では、M...

ホバー画像のポップアウトポップアップ効果を実現するための純粋な CSS のサンプルコード

実施原則メイングラフィックは、背景と前景の 2 つの要素で構成されています。次のサンプルコードでは、...

光沢のある輝くウェブサイトデザインの感動的なデザイン例

このコレクションには、あなたのデザインアイデアにインスピレーションを与える、輝いて光沢のある、優れた...

Tomcatの再構成後に起動が遅くなる問題を迅速に解決

Jenkins+Tomcatサーバーの設定中に、Tomcat設定ファイルが変更され、サーバーのTom...

vue+tsは要素のマウスドラッグの効果を実現します

この記事の例では、要素のマウスドラッグ効果を実現するためのvue+tsの具体的なコードを参考までに共...

Vue カードスタイルのクリックして切り替える画像コンポーネントの使用方法の詳細な説明

この記事では、vueカードスタイルのクリックして切り替える画像コンポーネントを参考までに紹介します。...

画像内のrarファイルを隠す方法

このロゴを .rar ファイルとしてローカルに保存し、解凍して効果を確認することができます。よりシン...

CentOS 7.6 Telnetサービス構築プロセス(Opensshアップグレードバトル第一弾のバックアップトランスポートライン構築)

不明な点があるときはいつでも、Blog Park にアクセスして、いつでも答えやインスピレーションを...

Linux でネットワーク パケット損失と遅延をシミュレートする方法

netem と tc: netem は、Linux カーネル バージョン 2.6 以降で提供されるネ...

MySQL クエリ キャッシュのグラフィカルな説明

目次1. 原則の概要クエリキャッシュシステム変数1. クエリキャッシュを持つ2. クエリキャッシュ制...

Vue echarts は棒グラフの動的な表示を実現します

この記事では、棒グラフの動的な表示を実現するためのvue echartsの具体的なコードを参考までに...