Eine kurze Erläuterung, wann MySQL interne temporäre Tabellen verwendet

Eine kurze Erläuterung, wann MySQL interne temporäre Tabellen verwendet

Gewerkschaftsexekution

Verwenden Sie zur Vereinfachung der Analyse das folgende SQL als Beispiel

TABELLE ERSTELLEN t1 (id INT PRIMARY KEY, a INT, b INT, INDEX (a));

Trennzeichen;;
PROZEDUR ERSTELLEN idata ( ) BEGIN
ERKLÄREN
        ich INT;
 Setze i = 1;
 WÄHREND
   ( i <= 1000 ) TUN
   EINFÜGEN IN t1
  WERTE
   (z. B. i, i, i);
  Setze i = i + 1;
 ENDE WÄHREND;
 ENDE;;

Trennzeichen ;
Rufen Sie idata ( ) auf.

Dann führen wir das folgende SQL aus

(wählen Sie 1000 als f) Vereinigung (wählen Sie ID aus t1, sortiert nach ID-Abstiegslimit 2);

Die Semantik dieser SQL-Anweisung besteht darin, die Vereinigungsmenge der beiden Unterabfragen zu übernehmen und Duplikate zu entfernen.

Wie Sie sehen, ist der Schlüssel der zweiten Zeile primär, was bedeutet, dass die zweite Unterabfrage die Index-ID verwendet. Das Extra-Feld in der dritten Zeile gibt an, dass beim Ausführen der Union-Unterabfrage eine temporäre Tabelle verwendet wird.
Der Ausführungsfluss dieser Anweisung ist wie folgt:
1) Erstellen Sie eine temporäre Speichertabelle mit nur einem ganzzahligen Feld f, das das Primärschlüsselfeld ist.
2) Führen Sie die erste Unterabfrage aus und speichern Sie 1000 in einer temporären Tabelle
3) Führen Sie die zweite Unterabfrage aus, holen Sie sich die erste Zeilen-ID = 1000 und versuchen Sie, sie in die temporäre Tabelle einzufügen. Da der Wert 1000 jedoch bereits in der temporären Tabelle vorhanden ist, verletzt er die eindeutige Einschränkung, sodass das Einfügen fehlschlägt. Holen Sie sich dann die zweite Zeile 999 und fügen Sie sie erfolgreich in die temporäre Tabelle ein.
4) Daten zeilenweise aus der temporären Tabelle abrufen, das Ergebnis zurückgeben und die temporäre Tabelle löschen. Das Ergebnis enthält zwei Daten, 1000 und 999.
Wie Sie sehen, dient die temporäre Tabelle zur vorübergehenden Speicherung von Daten und verfügt über eine eindeutige Einschränkung, die die Semantik der Union-Deduplizierung realisiert.

Gruppieren nach

Ein weiteres häufiges Beispiel für die Verwendung temporärer Tabellen ist „group by“. Schauen wir uns das folgende SQL an

Wähle ID%10 als m, Anzahl(*) als c aus T1-Gruppe nach m;

Diese Anweisung gruppiert die Daten in Tabelle t1 nach id%10 und sortiert sie nach den Ergebnissen von m, bevor sie ausgegeben werden.

Im Feld „Extra“ sehen wir drei Informationen:

1) Using index, was bedeutet, dass diese Anweisung einen überdeckenden Index verwendet und den Index a auswählt;
2) Verwendung von „temporär“, was darauf hinweist, dass eine temporäre Tabelle verwendet wird;
3) Die Verwendung von Filesort bedeutet, dass eine Sortierung erforderlich ist;

Der Ausführungsfluss dieser Anweisung ist wie folgt:

1) Erstellen Sie eine temporäre Speichertabelle mit den Feldern m und c. Der Primärschlüssel ist m.
2) Scannen Sie den Index a der Tabelle t1, nehmen Sie die ID-Werte auf den Blattknoten nacheinander heraus und berechnen Sie das Ergebnis von ID%10, das als x aufgezeichnet wird.

  • Wenn die temporäre Tabelle keinen Primärschlüssel x hat, fügen Sie einen Datensatz (x,1) ein.
  • Wenn die Tabelle eine Zeile mit dem Primärschlüssel x enthält, addieren Sie 1 zum c-Wert der Zeile mit dem Primärschlüssel x.

3) Nachdem die Durchquerung abgeschlossen ist, sortieren Sie nach Feld m, um das Ergebnis zu erhalten

Die Größe der temporären Tabelle im Speicher ist begrenzt. Der Parameter tmp_table_size steuert diese Speichergröße. Der Standardwert ist 16 M. Wenn die temporäre Tabelle im Speicher die Obergrenze erreicht, wird die temporäre Tabelle im Speicher in eine temporäre Tabelle auf der Festplatte konvertiert. Die Standard-Engine für temporäre Tabellen auf der Festplatte ist InnoDB. Wenn die Tabelle eine große Datenmenge enthält, kann die Abfrage viel Speicherplatz beanspruchen.

Dies ist das Ende dieses Artikels darüber, wann MySQL interne temporäre Tabellen verwendet. Weitere Informationen zu internen temporären MySQL-Tabellen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Zusammenfassung der häufig verwendeten Datenbank- und Tabellen-Sharding-Lösungen von MySQL
  • Die MySQL-Partitionstabelle ist nach Monaten klassifiziert
  • MySQL partitioniert vorhandene Tabellen in der Datentabelle
  • So gehen Sie nach der MySQL-Tabellenpartitionierung problemlos online
  • MySQL-Serie Multi-Table Join Abfrage 92 und 99 Syntaxbeispiele ausführliches Tutorial
  • Spezifische Verwendung interner temporärer MySQL-Tabellen
  • Detailliertes Beispiel zum Sammeln und Aggregieren von MySQL-Tabelleninformationen über Python
  • Umfassende Zusammenfassung der MySQL-Tabellen

<<:  Einfaches Beispiel für die Verschönerung von HTML-Kontrollkästchen und -Radios

>>:  Tutorial zur Installation und Konfiguration von Hbase unter Linux

Artikel empfehlen

Detaillierte Erklärung des Unterschieds zwischen Vue-Lebenszyklus

Lebenszyklusklassifizierung Jede Komponente von V...

js canvas realisiert kreisförmige Wasseranimation

In diesem Artikelbeispiel wird der spezifische Co...

Sprungcode für HTML-Seite

Speichern Sie den folgenden Code als Standard-Home...

Virtual Box-Tutorialdiagramm zum Duplizieren virtueller Maschinen

Nachdem man sich an VM gewöhnt hat, ist der Wechs...

So implementieren Sie verschiebbare Komponenten in Vue

In diesem Artikel erfahren Sie, wie Sie ziehbare ...

Implementierung der schnellen Projektkonstruktion von vue3.0+vant3.0

Inhaltsverzeichnis 1. Projektkonstruktion 2. Vue3...

So ändern Sie den Standardspeicherort von Docker-Images (Lösung)

Aufgrund der anfänglichen Partitionierung des Sys...

Transkript der Implementierung berechneter Vue-Eigenschaften

In diesem Artikel wird das Implementierungszeugni...

Drei Möglichkeiten zur Implementierung des Wasserfall-Flow-Layouts

Vorwort Als ich heute Xianyu durchsuchte, fiel mi...

Drei häufig verwendete MySQL-Datentypen

Das Definieren des Datenfeldtyps in MySQL ist für...