MySQLインデックスが失敗するいくつかの状況の分析

MySQLインデックスが失敗するいくつかの状況の分析

1. 最左プレフィックス原則 - 複数の列にインデックスが付けられている場合は、最左プレフィックス原則に従う必要があります。これは、クエリがインデックスの左端の列から開始され、インデックス内の列をスキップしないことを意味します。

前提条件: 複合インデックス (ユーザー名、パスワード、年齢) がテーブルに追加されている

分析: クエリにユーザー名がなく、クエリ条件複合インデックスの左端のユーザー名が欠落しているため、最良左プレフィックスの原則に違反し、インデックスが失敗して ALL (完全なテーブル スキャン) になります。

分析: クエリ条件にユーザー名とパスワードがありません。クエリ条件複合インデックスの左端のユーザー名とパスワードが欠落しているため、最良左プレフィックスの原則に違反し、インデックスが失敗して ALL (完全なテーブル スキャン) になります。

分析: このクエリにはユーザー名条件が 1 つだけあります。最良左プレフィックスの原則に従って、インデックスは部分的にしか使用できません。

2. インデックス列に対して操作 (計算、関数、(自動または手動の) 型変換) を実行しないでください。インデックスが失敗し、テーブル全体のスキャンが発生します。

分析: 最初のグラフインデックス列は関数を使用せず、左プレフィックスの原則に従い、インデックスを使用できます。 2 番目の図では、インデックス列に関数を使用しています。左プレフィックスの原則に従っていても、インデックスは無効のままです。

3. ストレージ エンジンはインデックス内の範囲条件の右側の列を使用できず、範囲の後のインデックスは無効になります。 (< 、> との間)

分析: 図 1 のすべてのインデックスが使用されます。図 2 では、インデックスはユーザー名と年齢を使用していますが、ユーザー名はインデックスを使用して取得され、年齢はインデックスのソートに重点を置いています。この場合、年齢は範囲検索であり、パスワード インデックスは無効になります。

4. MySQL が不等号 (!= または <>) を使用すると、インデックスが使用できなくなり、インデックスが失敗します。

5. MySQLでis not nullまたはis nullを使用すると、インデックスが使用できなくなります。

分析: ユーザー名列に通常のインデックスが作成されます。クエリには null が含まれていないため、結果のインデックスは有効ではありません。

6. MySQL では、like クエリが % で始まる場合、インデックスは無効になり、テーブル全体がスキャンされてインデックスがカバーされます。

分析: ユーザー名列に通常のインデックスが作成され、% で始まる値でクエリが実行されます。その結果、インデックスが無効になり、上書きされます。

7. MySQL では、文字列インデックスは一重引用符で囲まれていない場合は無効になります。正しい書き方: select * from t_user where username = 'lujin';

8. MySQL では、条件に or が含まれている場合、条件にインデックスが含まれていても or は使用されません (このため、 or はできるだけ使用しないようにする必要があります)。またはを使用してインデックスを有効にする場合は、または条件内の各列にのみインデックスを追加できます。

9. MySQLがインデックスよりも高速にフルテーブルスキャンを使用する場合、インデックスは使用されません。

要約する

これで、MySQL インデックス障害の分析に関するこの記事は終了です。MySQL インデックス障害に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Mysql インデックスが失敗するいくつかの状況の分析
  • MySQL のインデックス障害の一般的なシナリオと回避方法
  • MySQL でデータベース インデックスが失敗する状況の詳細な分析
  • mysql はインデックスを無効にしますか?
  • MySQL インデックス障害の 5 つの状況の分析
  • MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法
  • MySQL インデックスが失敗するいくつかの状況の概要
  • MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要
  • MySQLインデックスが失敗するいくつかの状況の詳細な分析
  • MySQL データベースのインデックスと障害シナリオの詳細な説明

<<:  スマートCSSを使用して、ユーザーのスクロール位置に基づいてスタイルを適用します。

>>:  Docker View プロセス、メモリ、カップ消費量

推薦する

nginx.conf ファイルの構文強調表示とフォーマット設定には nginx.vim ツールを使用します。

私はtengineを使用しています。インストールディレクトリは/usr/local/tengineで...

CSSセレクタを使用してラベルスタイルを設定するサンプルコード

CSS セレクターHTML タグにスタイルを設定すると、タグの属性を設定できます。 <div ...

mysql5.7.19 解凍版の詳細なインストール チュートリアル (純粋なクラックされた中国語版 SQLYog を使用)

Mysql5.7.19バージョンは今年リリースされた新しいバージョンです。最近のMySQLのバージ...

CSS 属性セレクタを使用して HTML DNA を接合する方法

CSS 属性セレクターは素晴らしいです。大量のクラス名を追加することを回避し、コード内の問題を指摘す...

組み込み Linux で QT アプリケーションを再起動する簡単な方法 (QT4.8 qws ベース)

アプリケーション ソフトウェアには通常、次のようなビジネス要件があります。新しいバージョンの APP...

TCP 3 回目のハンドシェイク データ転送プロセス図

RFC793 ドキュメントの SYN フラグを持つプロセス パケットはデータを伝送できません。つま...

ReactとReduxの関係を詳しく説明

目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...

Vueは複数の画像の追加、表示、削除を実装します

この記事では、Vueで複数の画像を追加、表示、削除するための具体的なコードを参考までに紹介します。具...

Linux での tcpdump コマンド例の詳細な説明

序文簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

html.cssオーバーフローの包括的な理解

html.cssオーバーフローの包括的な理解XML/HTML コードコンテンツをクリップボードにコピ...

MySQL 8.0.15 のダウンロードとインストールの詳細なチュートリアルは初心者にとって必須です。

この記事では、MySQL 8.0.15をダウンロードしてインストールするための具体的な手順を参考まで...

MySQL countの詳細な説明と関数のサンプルコード

mysql countの詳細な説明count関数はテーブルや配列内のレコードを数えるために使われます...

Windows Server 2019 のインストール (グラフィカル チュートリアル)

Windows Server 2019 は、Microsoft が公式にリリースした最新のサーバー...

JavaScript タイマーの詳細

目次1. 簡単な紹介2. 間隔を設定する2.1 説明2.2 パラメータ2.3 戻り値2.4 使用法3...

Reactでコンポーネントロジックを共有する3つの方法

簡単に説明すると、これら 3 つの方法は、レンダリング プロップ、高階コンポーネント、カスタム フッ...