日々の最適化プロセス中に、奇妙なことに気付きました。同じ 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要
序文最近プロジェクトに取り組んでいたとき、UI デザインのフォント サイズは 10 ピクセルでした。...
最近、問題に遭遇しました。モバイル端末の絵文字や一部の絵文字は 4 バイトですが、UTF-8 は 3...
前回の記事 https://www.jb51.net/article/154157.htm では、B...
今日、PHP を学習する場合、当然ながら、まず実行環境をインストールする必要があります。Phpstu...
<br />私が良いと思った国内のデザインサイトをまとめてみました。広告ではありません!...
1.構文TIMESTAMPDIFF(unit,begin,end); 単位に従って時間差を返します。...
多くの友人がフォーラムやメッセージエリアで、どのような状況で MySQL をシャーディングする必要が...
1. rzをサーバーにアップロードして解凍する rz [root@mini2 アップロード]# ta...
1. はじめにtr はテキストの一部を変換または削除するために使用されます。 tr は transl...
問題の説明Windows Server 2012 R2 または Windows Server 201...
くさびコンピュータにインストールされている MySQL のバージョンが比較的古く、おそらくバージョン...
コンセプト紹介: 1. px (ピクセル):仮想的な長さの単位で、コンピュータ システムのデジタル画...
Vue エコシステムには Vite と呼ばれる新しいビルド ツールがあり、Vue CLI よりも 1...
フロントエンドとバックエンドを分離し、nginxを使用してクロスドメインの問題を解決するフロントエン...
目次グローバル共有コンテンツファイルを作成するファイルをインポートしてグローバルに登録するページ共有...