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システムの操作レベルの詳細な紹介

推薦する

非常に詳細な Vue-Router のステップバイステップのチュートリアル

目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...

ARM64アーキテクチャでmysql5.7.22をインストールするプロセス全体

MySQLダウンロードアドレス: https://obs.cn-north-4.myhuaweicl...

Vue3 でパンくず関数コンポーネントをカプセル化するいくつかの方法

目次序文1. パンくずリストはなぜ必要なのでしょうか? 2. 一次包装1. 実装のアイデア2. コー...

CSSレイアウトにおけるフロート属性と位置属性の違い

CSS レイアウト - position プロパティposition 属性は、要素に適用する配置方法...

初心者向けウェブサイト構築ガイド⑦:美しいウェブサイトを作るのはとっても簡単

私はかつて、ウェブサイトを一度も構築したことのない人々が、初心者向けのウェブサイト構築方法に関する私...

Vue2.x と Vue3.x のルーティングフックの違いの詳細な説明

目次vue2.xプレコンセプト:ルーティングフックのカテゴリルーティングとコンポーネントの概念(フッ...

js の hasOwnProperty のプロパティとインスタンスの使用法の詳細な説明

1. js は hasOwnProperty が不正に占有されることから保護しません。オブジェクトに...

MySQLデータベース移行により、大量のデータを迅速にエクスポートおよびインポートできます

データベースの移行は、よく遭遇する問題です。データ量が少ない場合、移行は基本的に問題になりません。実...

Firefoxでリンクをクリックしたときに点線の枠線を削除する方法

今日、ブラウザの互換性の問題にいくつか遭遇しました。そのうちの 1 つは奇妙に感じました。Firef...

Windows10システムにMySQL 5.7.17をインストールする

オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...

MySql で正規表現クエリを使用する方法

正規表現は、特定のパターンに一致するテキストを検索および置換するためによく使用されます。たとえば、テ...

HTMLフォームタグチュートリアル(1):

フォームは、動的な Web ページを実装するための主要な外部フォームです。フォームとフォーム フィー...

Mysqlはブール型の演算を設定します

Mysqlはブール型を設定します1. Tinyintタイプテストテーブルを作成し、blフィールドをブ...

process.env.NODE_ENV 本番環境モードを設定する方法

始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...

UbuntuにProtobuf 3をインストールするための詳細なチュートリアル

いつインストールするかprotoc コマンドを使用しても Protoc が見つからない場合は、インス...