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 を使用する方法

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

推薦する

JavaScript で文字列を数値に変換する方法

目次1.parseInt(文字列、基数) 2. 数値() 3.parseFloat()主なメソッドは...

Xshell にショートカット コマンドを追加する方法

便利なターミナル エミュレーターである Xshell は、開発者がホスト サーバーをリモート管理する...

vue WatchとComputedの使用の概要

目次01. リスナーウォッチ(1)機能(2)特性と方法(3)監視対象(4)リスニングアレイ02. 計...

3つの簡単な例を使ってハイパーリンクの下線を削除する方法

ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...

JavaScript の基本オブジェクト

目次1. オブジェクト1.1 オブジェクトとは何ですか? 1.2 なぜオブジェクトが必要なのか? 2...

React のネストされたコンポーネントの構築順序

目次Reactの公式サイトではライフサイクルの説明を見ることができます次に、ネストされたコンポーネン...

ネイティブ js カプセル化シームレスカルーセル機能

ネイティブjsカプセル化シームレスカルーセルプラグイン、参考までに、具体的な内容は次のとおりです。例...

Docker Compose を使用して ELK を迅速にデプロイする (テスト済みで効果的)

目次1. 概要1.1 定義1.2 機能説明2. ELKを展開する2.1 ディレクトリとファイルを作成...

Centos7.9 で独立したメール サーバーを構築するための詳細な手順

目次序文1. イントラネットDNS AレコードとMXレコードを構成する2. メールサーバの初期化設定...

Dockerコンテナのインポ​​ートとエクスポートに関するチュートリアル

背景Docker の人気は、コンテナの共有と移植が容易であることと密接に関係しています。ユーザーは、...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

CSS3 でシンプルな白い雲が浮かぶ背景効果を実現

これは非常にシンプルな純粋な CSS3 の白い雲の浮遊する背景効果です。浮かぶ白い雲の特殊効果は、C...

Vueは、センシティブな単語フィルタリングコンポーネントを検出するためのさまざまなアイデアを実装しています。

目次前面に書かれた要件分析 v1アイデア1: インターセプションメソッドを使用して入力ボックスの入力...

コピー&ペーストはパッケージングの敵です

OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...

Windows で MySQL データベースを別のディスクに移動する

序文今日、MySQL をインストールしたところ、データベース ストレージがデフォルトで C ドライブ...