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

Tutorial-Diagramm zur Installation von TomCat unter Windows 10

Installieren Sie TomCat unter Windows Dieser Arti...

Tutorial zur Installation und Konfiguration von msmtp und mutt für Raspberry Pi

1. Installieren Sie mutt sudo apt-get install mut...

Detaillierte Erklärung zu Unique Constraints und NULL in MySQL

Vorwort Eine Anforderung, die ich zuvor zur Verei...

So installieren Sie eine MySQL-Datenbank unter Ubuntu

Ubuntu ist ein kostenloses und quelloffenes Deskt...

Reines CSS zum Hinzufügen von Stil zur ausgewählten Implementierung (kein Skript)

Ändern Sie den Standardstil der Auswahl, normalerw...

Beispiel zur Identifizierung des Benutzers mithilfe eines Linux-Bash-Skripts

In Bash-Skripten oder direkt im Skript selbst ist...

Natives JS zur Implementierung einer Echtzeituhr

Teilen Sie einen Echtzeituhreffekt, der mit nativ...

SQL Get gespeicherte Prozedur gibt Datenprozessanalyse zurück

Dieser Artikel stellt hauptsächlich die Analyse d...

Nginx-Anti-Crawler-Strategie, um UA am Crawlen von Websites zu hindern

Anti-Crawler-Richtliniendatei hinzugefügt: vim /u...

mysql8.0.23 msi Installation super ausführliches Tutorial

1. Laden Sie MySql herunter und installieren Sie ...

Details zum Lazy Loading im Vue-Routing

Inhaltsverzeichnis 1. Was ist Lazy Loading von Ro...

Detaillierte Erklärung des Unterschieds zwischen CSS-Link und @import

Wie fügt man CSS in HTML ein? Es gibt drei Möglic...

So erstellen Sie ein Django-Projekt und stellen eine Verbindung zu MySQL her

1: django-admin.py startproject Projektname 2: CD...