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

Detaillierte Erläuterung der MySQL-Benutzerrechteverwaltung

Inhaltsverzeichnis Vorwort: 1. Einführung in die ...

So verwenden Sie benutzerdefinierte CSS-Variablen in Vue

Inhaltsverzeichnis Die benutzerdefinierte CSS-Var...

PostgreSQL-Materialisierte Ansichtsprozessanalyse

Dieser Artikel stellt hauptsächlich die Prozessan...

Hinweise zum virtuellen Dateisystem des Linux-Kernel-Gerätetreibers

/******************** * Virtuelles Dateisystem VF...

js canvas realisiert kreisförmige Wasseranimation

In diesem Artikelbeispiel wird der spezifische Co...

So legen Sie Verknüpfungssymbole in Linux fest

Vorwort Durch das Erstellen von Verknüpfungen in ...

Grafisches Tutorial zum Herunterladen und Installieren von MySQL 5.7 und höher

1. Herunterladen 1. Download-Adresse der offiziel...

Adaptive Breitentabelle für HTML-Seiten

Auf den Seiten von Webanwendungen werden häufig T...

Methode zum Schreiben von bedingten Kommentaren und Beispielcode

Als Front-End-Ingenieure müssen wir mit dem IE ve...

Erfahren Sie, wie Sie Docker unter Windows 10 Home Edition installieren.

Als ich die Bücher über Redis und Spring Cloud Al...

Führen Sie die folgenden Schritte aus, um Vue-Router in Vue3 zu verwenden

Vorwort Die Verwaltung des Routings ist eine wese...

Einführung in Fork in Multithreading unter Linux

Inhaltsverzeichnis Frage: Fall (1) Fork vor dem E...