Während des täglichen Optimierungsprozesses stellte ich etwas Merkwürdiges fest: Dasselbe SQL hatte zwei völlig unterschiedliche Ausführungspläne, und sogar die treibende Tabelle des Left Join konnte unterschiedlich sein. Wenn die Where-Bedingung für Left Join einen Filter nach der zugehörigen Tabelle enthält, kann der Left Join in einen Inner Join umgewandelt werden. In diesem Fall hat shopInfo die Filterbedingung ShopCategory = 'LOC'; es ist garantiert, dass der Datensatz von shopInfo nicht NULL ist, sodass der Left Join während des Optimierungsprozesses in einen Inner Join umgewandelt werden kann. Dann ist die JOIN-Reihenfolge von O und S austauschbar. Schlussfolgerung der Überprüfung: Erstellen Sie die Tabelle: --Klassentabelle CREATE TABLE T_CLASS( class_id int ungleich null, Klassenname VARCHAR2(100) ); Index hinzufügen, Tabelle ändern T_CLASS, Index hinzufügen inx_class_id(class_id); --Studententabelle CREATE TABLE T_STUDENT( student_id int ungleich null, class_id int ungleich null, studentenname VARCHAR(100), Alter int, Sex im ) Index hinzufügen, Tabelle ändern T_STUDENT, Index hinzufügen, index_age(AGE); --Klassendaten in T_CLASS einfügen (CLASS_ID, CLASS_NAME) Werte (1, ‚Klasse 1‘); einfügen in T_CLASS (CLASS_ID, CLASS_NAME) Werte (2, ‚Klasse 2‘); einfügen in T_CLASS (CLASS_ID, CLASS_NAME) Werte (3, ‚drei Schichten‘); einfügen in T_CLASS (CLASS_ID, CLASS_NAME) Werte (4, ‚vierte Schicht‘); einfügen in T_CLASS (CLASS_ID, CLASS_NAME) Werte (5, ‚Fünfte Klasse‘); --Studentendaten in T_STUDENT einfügen (STUDENT_ID, CLASS_ID, STUDENT_NAME, ALTER, GESCHLECHT) Werte (1, 1, ‚1‘, 3, ‚1‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (2, 1, ‚1‘, 2, ‚1‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (3, 1, ‚3‘, 3, ‚1‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (4, 2, ‚14‘, 4, ‚1‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (5, 2, ‚5‘, 3, ‚2‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (6, 2, ‚6‘, 3, ‚1‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (7, 3, ‚7‘, 6, ‚2‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (8, 3, ‚李8‘, 4, ‚2‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (9, 2, ‚9‘, 2, ‚2‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (10, 2, ‚10‘, 3, ‚1‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (11, 3, ‚11‘, 3, ‚2‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (12, 2, ‚12‘, 8, ‚2‘); einfügen in T_STUDENT (STUDENT_ID, KLASSEN_ID, STUDENTENNAME, ALTER, GESCHLECHT) Werte (13, 1, ‚13‘, 6, ‚2‘); Fall 1: Tabelle B hat eine Where-Bedingung und ist nicht null Fall 2: Sowohl Tabelle A als auch Tabelle B haben Where-Bedingungen und sind nicht null Fall 3: Tabelle A und Tabelle B haben beide Where-Bedingungen und sind nicht null. Löschen Sie den Index von Tabelle B. abschließend: Der MySQL-Optimierer konvertiert einen Left Join nur dann in einen Inner Join, wenn die verknüpfte Tabelle eine Where-Bedingung hat und ihre Filterbedingung besser ist als die der verknüpften Tabelle. Dies ist das Ende dieses Artikels über den Prozess der schnellen Konvertierung von MySQL Left Join in Inner Join. Weitere relevante Inhalte zu MySQL Left Join und Inner Join finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Zusammenfassung von 76 Erfahrungspunkten der User Experience
>>: Detaillierte Erläuterung gängiger Methoden von JavaScript String
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Lösung: 1. IGNORIEREN 2. ERSET...
Ursprünglicher abgeleiteter Befehl: bin/sqoop imp...
Vorab geschrieben: In den folgenden Schritten müs...
Ich habe vor kurzem HTML neu gelernt, was als neue...
--Beim Verbinden mit der Datenbank die Matching-R...
Dynamische REM 1. Lassen Sie uns zunächst die akt...
Überblick Ich glaube, dass wir häufig auf solche ...
Bemerkung: Die Datenmenge in diesem Artikel beträ...
1. Suchen Sie das entsprechende NodeJS-Paket unte...
Problembeschreibung: Ich habe einen Mac gekauft u...
1. Hintergrund 1. Stellen Sie kurz den Shared Sto...
Wenn Sie HTML-Div-Blöcke verwenden und die Mitte ...
Lösung des Problems Bootstrap ist ein CSS-Framewo...