Zusammenfassung des Unterschieds zwischen der Verwendung von „from“ und „join“ zum Abfragen zweier Tabellen in MySQL

Zusammenfassung des Unterschieds zwischen der Verwendung von „from“ und „join“ zum Abfragen zweier Tabellen in MySQL

Vorwort

In MySQL ist die Abfrage mehrerer Tabellen eine sehr häufige Anforderung. Bei der Abfrage mehrerer Tabellen können Sie mehrere Tabellen verwenden oder mehrere Tabellen mithilfe von Join verbinden.

Was ist der Unterschied zwischen diesen beiden Abfragen? Welche Abfrage ist effizienter? Angesichts dieser Fragen habe ich beschlossen, es auszuprobieren.

1. Erstellen Sie zunächst zwei Tabellen eins und zwei auf dem lokalen MySQL

ein Tisch

CREATE TABLE `one` (
 `id` int(0) NICHT NULL AUTO_INCREMENT,
 `eins` varchar(100) NICHT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE = InnoDB-ZEICHENSATZ = utf8;

Zwei Tisch

CREATE TABLE `zwei` (
 `id` int(0) NICHT NULL AUTO_INCREMENT,
 `zwei` varchar(100) NICHT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE = InnoDB-ZEICHENSATZ = utf8;

Geben Sie zunächst einige Daten ein und prüfen Sie diese.

Wählen Sie one.id,one.one,two.id,two.two aus one,two, wobei one.id=two.id; 

wähle one.id, one.one,two.id, two.two aus eins, verbinde zwei mit one.id=two.id; 

Vergleicht man die beiden Abfragen, ist in der Abfragezeit fast kein Unterschied zu erkennen. Auch bei der Überprüfung der SQL-Laufanalyse ist kein Unterschied zu erkennen.

Um den Leistungsunterschied zwischen den beiden Abfragen hervorzuheben, fügen Sie 1 Million Datensätze in Tabelle eins und 100.000 Datensätze in Tabelle zwei ein. Angesichts einer großen Datenmenge wird der kleinste Unterschied unendlich vergrößert. Vergleichen wir nun die Unterschiede.

Verwenden Sie zunächst Python, um Daten in die Datenbank einzufügen. Warum Python verwenden? Weil Python einfache

Zum Code

pymysql importieren

db = pymysql.connect("127.0.0.1", "root", "123456", "bruce")
Cursor = db.cursor()

sql = "INSERT INTO einen (einen) Wert (%s)"
für i im Bereich (1000000):
 cursor.executemany(sql, ['eins' + str(i)])
 wenn i % 10000 == 0:
 db.commit()
 drucken(str(i) + 'commit')
db.commit()

drucken('füge eins ein, ok')
sql2 = "INSERT INTO zwei (zwei) Werte (%s)"
für i im Bereich (100000):
 cursor.executemany(sql2, ['zwei' + str(i)])
 wenn i % 10000 == 0:
 db.commit()
 drucken(str(i) + 'commit')
db.commit()
drucken('zwei einfügen ok')

Seien Sie geduldig und warten Sie einen Moment, das Einfügen wird einige Zeit dauern;

Nachdem die Daten eingefügt wurden, fragen wir einige

Verwenden Sie zunächst FROM zwei Tabellen zur Abfrage

Wählen Sie one.id,one.one,two.id,two.two aus one,two, wobei one.id=two.id; 

Es dauert ungefähr 20,49 Sekunden;

Lassen Sie uns erneut die JOIN-Abfrage verwenden

wähle one.id, one.one,two.id, two.two aus eins, verbinde zwei mit one.id=two.id; 

Es dauerte 19,45 Sekunden. Bei 100.000 Datenelementen ist ein 1-Sekunden-Fehler keine große Sache.

Schauen Sie sich die Abfrage an, wenn Sie die ID als Bedingungsbedingung verwenden

Es gibt keinen Unterschied in der Abfragezeit. Werfen wir einen Blick auf die SQL-Ausführungsanalyse.

Das Ergebnis ist immer noch das gleiche

Zusammenfassen

In MySQL führen die Verwendung von FROM zum Abfragen mehrerer Tabellen und die Verwendung einer JOIN-Verbindung (außer LEFT JOIN und RIGHT JOIN) zu denselben Abfrageergebnissen und derselben Abfrageeffizienz.

Nun, das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • MySQL verwendet Inner Join zum Abfragen/Löschen/Ändern von Beispielen
  • MySQL-Abfrageoptimierung: Einführung in das Sortierlimit für Join-Abfragen (Join-, Order-by- und Limit-Anweisung)
  • MySQL-Optimierung: Join statt Unterabfrage verwenden
  • Analyse der Verwendung mehrerer MySQL-Left-Join-Abfragen
  • Abfrageprozess und Optimierungsmethode der (JOIN/ORDER BY)-Anweisung in MySQL
  • Zusammenfassung verschiedener gängiger Abfragebeispiele für Join-Tabellen in MySQL
  • Detaillierte Erläuterung der Verwendung von MySQL-Profilen zur Analyse von langsamem SQL (Group Left Join ist effizienter als Unterabfrage)
  • Wissenspunkte zum Prinzip der MySQL-Join-Abfrage
  • Grundlegende MySQL-Tabellenabfragen – häufige Fehler beim Left-Join
  • MySQL effiziente Abfrage Left Join und Gruppieren nach (plus Index)

<<:  Tutorial zum Erstellen des File-Sharing-Dienstes Samba unter CentOS6.5

>>:  Eine kurze Diskussion über React Native APP-Updates

Artikel empfehlen

Installationsprozess der React Native-Umgebung

React-Native-Installationsprozess 1.npx react-nat...

Implementierungsschritte zur Kapselung von Komponenten basierend auf React

Inhaltsverzeichnis Vorwort Wie kapselt Antd Kompo...

Verwenden von Streaming-Abfragen in MySQL, um Daten-OOM zu vermeiden

Inhaltsverzeichnis 1. Einleitung 2. JDBC implemen...

Detaillierte Erklärung des Unterschieds zwischen run/cmd/entrypoint in Docker

In Dockerfile können run, cmd und entrypoint zum ...

Ich zeige Ihnen, wie Sie Schriftsymbole in CSS verwenden

Zunächst einmal: Was ist ein Schriftsymbol? Oberf...

Verständnis und Anwendungsszenarien von ES6-Erweiterungsoperatoren

Inhaltsverzeichnis 1. Ersetzen Sie die Apply-Meth...

Verwenden von NTP zur Zeitsynchronisierung in Ubuntu

NTP ist ein TCP/IP-Protokoll zur Zeitsynchronisie...

Erstellen einer einfachen Game-Engine mit React Native

Inhaltsverzeichnis Einführung Erste Schritte Eine...

Detaillierte Erklärung der Standardwerte von Breite und Höhe in CSS: auto und %

abschließend % der Breite: definiert die prozentu...

Detaillierte Erläuterung der allgemeinen Schritte zur SQL-Anweisungsoptimierung

Vorwort In diesem Artikel erfahren Sie hauptsächl...

So passen Sie CSS an den Vollbildmodus des iPhone an

1. Medienabfragemethode /*iPhone X-Anpassung*/ @m...

Beispielcode einer in Vue3 gekapselten Lupenkomponente

Inhaltsverzeichnis Komponenteninfrastruktur Zweck...

So stellen Sie die MySQL5.7-Kodierung auf utf8mb4 ein

Ich bin vor kurzem auf ein Problem gestoßen. Die ...