MySQL インデックスの左端原則のサンプルコード

MySQL インデックスの左端原則のサンプルコード

序文

最近、MySQL のインデックスについて読んでいました。結合されたインデックスを見ると、左端の原則が見つかりました。関連情報を検索して、詳しく調べました。詳しい紹介を見てみましょう。

テーブルを作成する

テーブル `user` を作成します (
 `id` int(10) 符号なし NOT NULL AUTO_INCREMENT,
 `name` varchar(10) デフォルト NULL,
 `sex` tinyint(1) デフォルト NULL,
 `age` tinyint(2) デフォルト NULL,
 主キー (`id`)、
 キー `Index_user` (`name`,`age`) BTREE の使用
) ENGINE=InnoDB AUTO_INCREMENT=4 デフォルト CHARSET=utf8mb4;

SQLのテスト

最初

mysql> SELECT * FROM `user` where name="tom" \G を説明します
************************** 1. 行 ****************************
   id: 1
 選択タイプ: シンプル
  テーブル: ユーザー
 パーティション: NULL
   タイプ: ref
可能なキー: Index_user
   キー: Index_user
  キーの長さ: 43
   参照: 定数
   行数: 1
  フィルター: 100.00
  追加: NULL

2番目

mysql> SELECT * FROM `user` where age=18 and name="tom" \G を説明します
************************** 1. 行 ****************************
   id: 1
 選択タイプ: シンプル
  テーブル: ユーザー
 パーティション: NULL
   タイプ: ref
可能なキー: Index_user
   キー: Index_user
  キーの長さ: 45
   参照: const、const
   行数: 1
  フィルター: 100.00
  追加: NULL

3番目

mysql> SELECT * FROM `user` where age=18 \G を説明します
************************** 1. 行 ****************************
   id: 1
 選択タイプ: シンプル
  テーブル: ユーザー
 パーティション: NULL
   タイプ: すべて
可能なキー: NULL
   キー: NULL
  キー長さ: NULL
   参照: NULL
   行数: 3
  フィルター: 33.33
  追加: where の使用
セットに 1 行、警告 1 件 (0.00 秒)

4番目

mysql> explain SELECT * FROM `user` where name="tom" and age=18 \G
************************** 1. 行 ****************************
   id: 1
 選択タイプ: シンプル
  テーブル: ユーザー
 パーティション: NULL
   タイプ: ref
可能なキー: Index_user
   キー: Index_user
  キーの長さ: 45
   参照: const、const
   行数: 1
  フィルター: 100.00
  追加: NULL
セットに 1 行、警告 1 件 (0.00 秒)

要約する

このことから、SQL の where 句に結合インデックスの最初のフィールドが含まれているクエリのみがインデックスにヒットできることがわかります。これは、インデックスの最左一致機能と呼ばれます。 結合インデックスの使用は、where 条件の記述順序とは関係ありません。MySQL クエリ分析が最適化され、インデックスが使用されます。ただし、クエリ アナライザーへの負荷を軽減するには、インデックスの左から右への順序を一定に保つことが最善です。

b+ツリーのデータ項目は複合データ構造です。たとえば、(名前、年齢、性別) を使用すると、b+ツリーは左から右の順に検索ツリーを構築します。たとえば、(張さん、20、女性) などのデータを取得する場合、b+ツリーは最初に名前を比較して次の検索方向を決定します。名前が同じ場合は、年齢と性別を順に比較して、最終的に取得したデータを取得します。ただし、名前のない (20、女性) などのデータが見つかった場合、検索ツリーが確立されるときに名前が最初の比較要素となるため、b+ツリーは最初のステップでどのノードをチェックすればよいかわかりません。次にどこを照会するかを知るには、最初に名前に基づいて検索する必要があります。

さて、今回の記事は以上です。この記事の内容が皆さんの勉強や仕事に少しでも参考になれば幸いです。123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLジョイントインデックスの左端一致原則の詳細な分析
  • MySQL の結合インデックスと左端一致原則の詳細な説明
  • MySQLのインデックス設計の原則と一般的なインデックスの違いについて簡単に説明します。
  • MySQLインデックスを追加する3つの原則を簡単に理解する
  • 1 つの記事で MySQL インデックス作成の原則を理解する

<<:  Linux リモート開発に vs2019 を使用する方法

>>:  要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

推薦する

VueはExcelテーブルをインポートし、インポートに失敗したデータを自動的にダウンロードします。

次のような要件があります: インポート ボタン。ボタンをクリックして Excel テーブルをインポー...

Win10 に Linux ubuntu-18.04 デュアル システムをインストールする (インストール ガイド)

コンピューターに Linux Ubuntu システムをインストールしました。初めてインストールしまし...

Centos8 は kdc 暗号化に基づいて nfs を構築します

目次構成nfs サーバー (nfs.skills.com) nfs クライアント (client.s...

Linux でディスクをマウントし、起動時に自動的にマウントするように設定する方法

皆さんの時間は貴重だと承知しているので、プロセス コマンドを直接書き留めておきます。設定できます。原...

Ubuntuがインターネットに接続できない場合の解決策

問題の説明:デスクトップ コンピューターとキャンパス ネットワークを使用して、有線モードでインターネ...

Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

この記事では主に、Vue を使用してタブ ナビゲーション バーを実装し、flex レイアウトを使用し...

MySQL DATE_FORMAT関数の使用

タオバオが、ダブル11に最も多くの注文をした2人のユーザー、ユーザー1:「ショッピングの皇帝、陳哈哈...

CSSレイアウトで中央揃えレイアウトを実現する方法

1. 親コンテナーをテーブルに設定し、子をインライン要素に設定します。テキストを表示するサブコンテン...

XHTMLコードの一般的なアプリケーション問題をまとめる

時間が経つにつれて、多くの人が XHTML の使い方を知らないことに気づきました。普通の初心者だけで...

docker によってプルされたイメージがどこに保存されるかの詳細な説明

20200804追記:記事の内容に誤りがある可能性があります。他の回答を検索することもできます。 d...

Reactでwindow.print()を使用した際にページが応答しなくなる問題の解決記録について

目次1. 問題の背景: 2. 問題の原因: 3. 問題解決:要約: 1. 問題の背景: window...

Linux 向けの強化されたスクリーンショットと共有ツール: ScreenCloud

ScreenCloud は、必要だとは思わなかった素晴らしい小さなアプリです。デスクトップ Lin...

MySQL 8.0.13 のダウンロードとインストールのチュートリアル(画像とテキスト付き)

MySQL は最もよく使用されるデータベースです。詳しく知るには、コンピュータにインストールする必...

Javascript で関数のカリー化とデカリー化を実装する方法

関数のカリー化(黒い疑問符の顔)? ? ?カレー(黒い疑問符の顔)? ? ?これは完璧な中国語翻訳で...

テキストエリアの使用に関する注意事項

なぜテキストエリアについて具体的に言及するのでしょうか?なぜなら、textarea ノードは実際には...