MySQLの左結合を内部結合に素早く変換するプロセス

MySQLの左結合を内部結合に素早く変換するプロセス

日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プランがあり、左結合の駆動テーブルさえ異なる可能性があるのです。

左結合の場合、WHERE 条件に関連テーブルによるフィルターが含まれていると、左結合が内部結合に変換されることがあります。この場合、shopInfo にはフィルター条件 ShopCategory = 'LOC' があり、shopInfo のレコードが NULL ではないことが保証されているため、最適化プロセス中に左結合を内部結合に変換できます。 そうすると、O と S の JOIN 順序は交換可能になります。

検証結論:

テーブルを作成します。

--クラステーブル CREATE TABLE T_CLASS(
  class_id int が null ではない、
  クラス名 VARCHAR2(100)
);
インデックスを追加します。alter table T_CLASS add index inx_class_id(class_id);
--学生テーブル CREATE TABLE T_STUDENT(
  学生ID int NULLではない、
  class_id int が null ではない、
  学生名 VARCHAR(100)、
  年齢 int、
  セックス int 
)
インデックスを追加します。alter table T_STUDENT add index index_age(AGE);
--T_CLASS (CLASS_ID、CLASS_NAME) にクラスデータを挿入します
値(1、「クラス1」);

T_CLASS (CLASS_ID、CLASS_NAME) に挿入
値(2、「クラス2」);

T_CLASS (CLASS_ID、CLASS_NAME) に挿入
値(3、「3つのシフト」);

T_CLASS (CLASS_ID、CLASS_NAME) に挿入
値(4、「第4シフト」);

T_CLASS (CLASS_ID、CLASS_NAME) に挿入
値(5、「第5クラス」);
--T_STUDENT に学生データを挿入します (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX)
値(1、1、'李1'、3、'1');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(2、1、'李2'、2、'1');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(3、1、'李3'、3、'1');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(4、2、'李4'、4、'1');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(5、2、'李5'、3、'2');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(6、2、'李6'、3、'1');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(7、3、'李7'、6、'2');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(8、3、'李8'、4、'2');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(9、2、'李9'、2、'2');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(10、2、'李10'、3、'1');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(11、3、'李11'、3、'2');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(12、2、'李12'、8、'2');

T_STUDENT (STUDENT_ID、CLASS_ID、STUDENT_NAME、AGE、SEX) に挿入
値(13、1、'李13'、6、'2');

ケース1: テーブルBにはwhere条件があり、nullではない

ケース2: テーブルAとテーブルBの両方にwhere条件があり、nullではない

ケース3: テーブルAとテーブルBの両方にWHERE条件があり、NULLでない場合は、テーブルBのインデックスを削除します。

結論は:

MySQL オプティマイザーは、関連付けられたテーブルに where 条件があり、そのフィルター条件が関連付けられたテーブルよりも優れている場合にのみ、左結合を内部結合に変換します。

これで、mysql の left join を inner join に素早く変換するプロセスに関するこの記事は終了です。mysql の left join と inner join に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLの結合の基本原理についての簡単な説明
  • SQL文におけるJOINの使用シナリオの分析
  • MYSQL データベースの基礎 - 結合操作の原理
  • MySQL の無効な左結合の問題を解決する方法とその使用上の注意
  • コード標準では、SQL ステートメントに結合が多すぎないようにする必要があるのはなぜですか?
  • MySQL の効率的なクエリの左結合とグループ化 (プラス インデックス)
  • MySQL 結合バッファの原理
  • SQLのさまざまな結合サマリーの詳細な説明

<<:  ユーザーエクスペリエンスの76の経験ポイントの要約

>>:  HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

推薦する

HTML 言語百科事典

123WordPress.com-HTML noscriptオブジェクトolオプションPパラントプレ...

MySQL インデックスの使用方法 (単一列インデックスと複数列インデックス)

1. 単一列インデックスどの列にインデックスを作成するかを選択することは、パフォーマンス最適化プロ...

SpringBoot のパッケージ化と Docker へのアップロード、およびマルチインスタンス デプロイメントの実装に関する簡単な分析 (IDEA バージョン)

最近友人からDockerを触ったことがあるかと聞かれました。あまり自信がなかったので答えられませんで...

HTML のスクロールバーについて/スクロールバーの削除

1. xhtmlの下のスクロールバーの色元の HTML では、ページ全体のスクロール バーを次のよう...

js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

この記事は、JS レッドブックの第 8 章に記載されているオブジェクトに関する 2 番目の記事です。...

デザイン理論: コンテンツプレゼンテーションのための 10 のヒント

<br /> テキスト、記号、リンクの3つの側面に焦点を当て、主に中国語で、個人的な執筆...

SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...

ウェブサイトデザインにおいて非常に重要な概念であるdiv+floatの分析

ウェブサイトの構築では、HTML と CSS に関するさまざまな問題に常に遭遇します。ウェブサイト ...

MySQL 5.7.31 64 ビット無料インストール版チュートリアル図

1. ダウンロードダウンロードアドレス: https://dev.mysql.com/get/Dow...

フロントエンドAIカットのコツ(体験談)

AI 画像の切り取りは PS と連携する必要があります。まず、スライスするレイヤーを選択し、それを...

MySQLデータ移行方法とツールの分析

この記事は主にMySQLデータ移行方法とツールの分析を紹介します。サンプルコードを通じて詳細に紹介さ...

ページコンテンツ全体を中央に配置して、高さがコンテンツに合わせて自動的に拡張されるようにする方法

ページコンテンツ全体を中央に配置する方法と、コンテンツに合わせて高さを自動的に拡大縮小する方法。これ...

MySQL Innodb インデックス メカニズムの詳細な紹介

1. インデックスとは何ですか?インデックスは、ストレージ エンジンがレコードをすばやく検索するため...

Nginx でバージョン番号を隠す方法

Nginx はバージョン番号を非表示にする実稼働環境では、セキュリティ上の脆弱性の漏洩を避けるために...

Apache の一般的な仮想ホスト設定方法の分析

1. Apacheサーバーのインストールと設定yum インストール httpd -y systemc...