Der Prozess der schnellen Konvertierung eines MySQL-Left-Joins in einen Inner-Join

Der Prozess der schnellen Konvertierung eines MySQL-Left-Joins in einen Inner-Join

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:
  • Eine kurze Erläuterung des zugrunde liegenden Prinzips von MySQL Join
  • Analyse von Anwendungsszenarien von JOIN in SQL-Anweisungen
  • MySQL-Datenbankgrundlagen - Prinzip der Join-Operation
  • So lösen Sie das Problem des ungültigen linken Joins in MySQL und die Vorsichtsmaßnahmen bei seiner Verwendung
  • Warum erfordern Codestandards, dass SQL-Anweisungen nicht zu viele Verknüpfungen enthalten?
  • MySQL effiziente Abfrage Left Join und Gruppieren nach (plus Index)
  • MySQL-Joinpufferprinzip
  • Detaillierte Erklärung verschiedener Join-Zusammenfassungen von SQL

<<:  Zusammenfassung von 76 Erfahrungspunkten der User Experience

>>:  Detaillierte Erläuterung gängiger Methoden von JavaScript String

Artikel empfehlen

vue + springboot realisiert die Login-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Lösung zum Importieren weiterer Daten aus MySQL in Hive

Ursprünglicher abgeleiteter Befehl: bin/sqoop imp...

Ubuntu 18.04 erhält Root-Berechtigungen und meldet sich als Root-Benutzer an

Vorab geschrieben: In den folgenden Schritten müs...

Implementierung von dynamischem REM für mobiles Layout

Dynamische REM 1. Lassen Sie uns zunächst die akt...

...

MySQL-Gruppierungsabfragen und Aggregatfunktionen

Überblick Ich glaube, dass wir häufig auf solche ...

So erstellen Sie schnell zig Millionen Testdaten in MySQL

Bemerkung: Die Datenmenge in diesem Artikel beträ...

So aktualisieren Sie die Knotenversion unter CentOs manuell

1. Suchen Sie das entsprechende NodeJS-Paket unte...

So ändern Sie das ursprüngliche Passwort von MySQL auf dem MAC

Problembeschreibung: Ich habe einen Mac gekauft u...

VMware vSAN - Zusammenfassung der ersten Schritte

1. Hintergrund 1. Stellen Sie kurz den Shared Sto...

Lösung für die Lücke zwischen Divs

Wenn Sie HTML-Div-Blöcke verwenden und die Mitte ...

Sollte ich für das mobile Web-WAP Bootstrap oder jQuery Mobile verwenden?

Lösung des Problems Bootstrap ist ein CSS-Framewo...