MySQLデータベースインデックスの左端一致原則

MySQLデータベースインデックスの左端一致原則

1. 共同インデックスの説明

3つのフィールドの結合インデックスを作成する

結合インデックス (a,b,c) は、インデックス (a), (a,b), (a,b,c) を作成することと同じです。

2. ac はインデックスを使用できますか?

先給出結論:a可以命中聯合索引(a,b,c),c無法命中,所以ac組合無法命中聯合索引。

1. abc共同インデックス(州、市、地区)を作成する

ここに画像の説明を挿入

ac インデックス クエリ

SELECT * FROM user_address WHERE 省 = '広東省' 
AND 地区 = '南雄市'

ここに画像の説明を挿入

表示クエリ範囲は ALL です

2. 2つのフィールドacのジョイントインデックスを直接作成する

ここに画像の説明を挿入

SELECT * FROM user_address WHERE 省 = '広東省' 
AND 地区 = '南雄市'

ここに画像の説明を挿入

クエリの結果、ref はインデックスを使用し、スキャンされた行数も 21 から 13 に変更されました。

3.abインデックスクエリ
ここに画像の説明を挿入

クエリスコープはrefです

結論は

abc の結合インデックス、ac の c はこれら 3 つのフィールドの結合インデックスにヒットできませんが、a はヒットできるため、possible_keys 列には結合インデックスが使用されていることが示されます。

3. 考える

abc インデックス、acb はインデックスに従いますか?

  • 左端のプレフィックス一致の原則に従って、MySQL は範囲クエリ (>、<、between、like) に遭遇して一致を停止するまで、右側への一致を続けます。
  • 例えば、a=3、b=4、c>5、d=6 の場合、(a、b、c、d) の順序でインデックスを作成すると、d は使用されません。(a、b、d、c) の順序でインデックスを作成すると、すべて使用でき、a、b、d の順序は任意に調整できます。
  • = および in は任意の順序で記述できます。たとえば、a=1、b=2、c=3 などです。(a、b、c) インデックスは任意の順序で作成できます。MySQL クエリ オプティマイザーを使用すると、インデックスが認識できる形式に最適化できます。

4. 最左マッチング原理の原因

  • なぜなら、abcのような結合インデックスは順序付けられていると理解でき、その形成の基礎はaの上に構築され、aからbを構築し、bからcを構築するため、順序付けられている必要があるからです。
  • 簡単に言えば、まず a をソートしてインデックスを作成し、次に a に基づいて b をソートし、最後に c をソートするということです。
  • したがって、結合インデックスが範囲クエリに遭遇すると、後続のインデックスは無効になります。

これで、MySQL データベース インデックスの最左一致原則に関するこの記事は終了です。MySQL インデックスの最左一致に関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベースのインデックスと障害シナリオの詳細な説明
  • MySQLデータベースインデックスの詳細な紹介
  • MySQLデータベースインデックスの詳細な説明
  • MySQL データベースのインデックスとトランザクション
  • MySQL データベースのインデックス順序の詳細な説明
  • MySQLデータベースインデックスの欠点と適切な使用
  • MySQLデータベースのトランザクションとインデックスの詳細な説明
  • MySQL データベース インデックスの面接の質問 (基本的なプログラマー スキル)
  • Mysql データベース テーブルのインデックスによってクエリ速度が向上しないのはなぜですか?

<<:  vueの実践的な応用におけるvuexの永続性の詳細な説明

>>:  Linuxシステムの操作レベルの詳細な紹介

推薦する

Webフロントエンド開発CSS関連チームコラボレーション

フロントエンド開発部門は成長し、スタッフも増加し、技術も向上しています。 CSSer はフロントエン...

DockerとVMwareの競合を解決する

1. Dockerの起動の問題:問題は解決しました: Hyper-V をオンにする必要があります (...

ドメイン名、ポート、IPに基づいてnginx仮想ホストを構築する

nginxでサポートされている仮想ホストには3つの種類があります1. ドメイン名ベースの仮想ホスティ...

MySQL IN ステートメントにおける低速クエリの効率を最適化する手法の例

表の構造は以下のとおりです。記事数は690件のみです。 記事テーブル article(id,titl...

Docker Composeオーケストレーションツールの詳細な説明

Docker の作成Docker Compose は、複数の Docker コンテナを定義して実行す...

Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル

以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...

Ubuntu でホームディレクトリを新しいパーティションに移行する詳細なチュートリアル

ユーザーのホーム ディレクトリがどんどん大きくなってきたら、ホーム ディレクトリを新しいパーティショ...

Jenkins の Docker のデプロイとインストール手順

まず、Docker がインストールされたサーバーが必要です。 (私はすでにこれをサーバーにインストー...

ソケット '/tmp/mysql.sock' 経由でローカル MySQL に接続できない解決策

エラーメッセージ:エラー 2002: ソケット '/tmp/mysql.sock' ...

jQueryのコア機能とイベント処理の詳細な説明

目次イベントページの読み込みイベント委任イベントの切り替えイベント要約するイベントページの読み込み1...

nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

0x00 はじめにWordPress は、世界で最も人気のある CMS システムです。PHP と M...

CSSはcalc()を使用して現在の表示画面の高さを取得します

まず、CSS3 の相対的な長さの単位を見てみましょう (詳細なチュートリアルを参照してください)。相...

antd pro に基づく SMS 認証コード ログイン機能 (プロセス分析)

目次まとめ全体的なプロセスフロントエンドページコード検証コードとログイン サービスをリクエストする ...

MySQL がデータの削除と挿入に非常に時間がかかる問題の解決策

会社の開発者がテスト環境で挿入ステートメントを実行すると、正常に実行されるまでに 10 秒以上かかり...

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...