Detaillierte Erklärung zur Verwendung von MySQL-Speichertabellen und temporären Tabellen

Detaillierte Erklärung zur Verwendung von MySQL-Speichertabellen und temporären Tabellen

Verwendung von MySQL-Speichertabellen und temporären Tabellen

Speichertabelle:

Sitzung 1
$ mysql -uroot
root@(keine) 10:05:06>Test verwenden
Datenbank geändert
root@test 10:06:06>TABELLE ERSTELLEN tmp_memory (i INT) ENGINE = SPEICHER;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
root@test 10:08:46>in tmp_memory-Werte einfügen (1);
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
root@test 10:08:46>
Sitzung2
$ mysql -uroot-Test
root@test 10:05:12>TABELLE ERSTELLEN tmp_memory (i INT) ENGINE = SPEICHER;
FEHLER 1050 (42S01): Tabelle 'tmp_memory' existiert bereits
root@test 10:16:27>Wählen Sie * aus temporärem Speicher;
+------+
| ich |
+------+
| 1 |
+------+
1 Zeile im Satz (0,00 Sek.)

1. Mehrere Sitzungen können keine Tabellen mit demselben Namen erstellen

2. Nachdem eine Sitzung erstellt wurde, ist sie auch für andere Sitzungen sichtbar

3. Im Datenverzeichnis befindet sich nur tmp_memory.frm. Die Tabellenstruktur wird auf der Festplatte gespeichert und die Daten werden im Speicher gespeichert.

4. Nach dem Neustart oder Herunterfahren von MySQL gehen die Daten in der Speichertabelle verloren, die Tabellenstruktur ist jedoch weiterhin vorhanden

5. Sie können Indizes erstellen, Indizes löschen und eindeutige Indizes unterstützen

6. Betrifft nicht die Master- und Slave-Datenbanken. In die Master-Datenbank eingefügte Daten sind auch in der Slave-Datenbank zu finden.

7. Tabellen anzeigen

Temporäre Tabelle:

Sitzung1
$ mysql -uroot-Test
root@test 10:30:18>TEMPORÄRE TABELLE ERSTELLEN tmp_table (Name VARCHAR(10) NICHT NULL, Wert INTEGER NICHT NULL);
Abfrage OK, 0 Zeilen betroffen (0,05 Sek.)
root@test 10:31:54>Wählen Sie * aus tmp_table;
+--------+-------+
| Name | Wert |
+--------+-------+
| aaaaaa | 10 |
+--------+-------+
1 Zeile im Satz (0,00 Sek.)
Sitzung2
root@test 10:20:13> TEMPORÄRE TABELLE ERSTELLEN tmp_table (Name VARCHAR(10) NICHT NULL, Wert INTEGER NICHT NULL);
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)
root@test 10:30:39>in tmp_table-Werte einfügen ('bbbbbbb',10);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
root@test 10:31:33>Wählen Sie * aus tmp_table;
+---------+-------+
| Name | Wert |
+---------+-------+
| bbbbbb | 10 |
+---------+-------+
1 Zeile im Satz (0,00 Sek.)
root@test 10:31:43>Beenden
Tschüss
[1 Einzeln:MS-Master db152011.sqa.cm6:mysql ~ ]
$ mysql -uroot-Test
root@test 10:32:17>Wählen Sie * aus tmp_table;
FEHLER 1146 (42S02): Tabelle „test.tmp_table“ existiert nicht
root@test 10:32:22>
root@test 10:32:23>

1. Die Namen der erstellten Tabellen können gleich sein

2. Tabellenstruktur und Daten werden im Speicher abgelegt

3. Wenn die Sitzung verschwindet, verschwinden die Tabellenstruktur und die Daten

4. Sie können Indizes erstellen und löschen

5. Die von der Hauptdatenbank erstellte Tabelle kann nicht in der Standbydatenbank gefunden werden.

6. Tabellen anzeigen kann die Tabelle nicht sehen

Was Sie bei der Verwendung von Speichertabellen beachten sollten

1. Die Speichertabelle muss Daten löschen oder die Tabelle selbst löschen. Dazu ist eine Löschberechtigung erforderlich, was gefährlicher ist

2. Die Tabellenstruktur der Speichertabelle wird auf der Festplatte gespeichert. Wenn mehrere Sitzungen denselben Tabellennamen verwenden, treten Konflikte auf. Wenn der Tabellenname nicht verwendet werden muss und die Tabellenstruktur bei jeder Verwendung neu erstellt werden muss, entstehen viele kleine Dateien, was der DB-Wartung nicht förderlich ist und Risiken birgt, wenn der DBA die Tabelle bereinigt.

Aus den obigen Gründen ist die Verwendung einer Speichertabelle nicht geeignet.

1. Temporäre Tabellen sind auf Sitzungsebene. Selbst wenn mehrere Sitzungen Tabellen mit demselben Namen erstellen, wirken sie sich nicht gegenseitig aus.

2. Die Sitzung verschwindet und alles verschwindet, was der Fehlerbehebung bei der Anwendung nicht förderlich ist

Darüber hinaus benötigen beide zusätzlichen Speicherplatz, was auf der Datenbankseite tolerierbar, aber nicht sehr kontrollierbar ist. Auf der Datenbankseite gibt es außerdem diesen Parameter:

max_tmp_tables Die maximale Anzahl temporärer Tabellen, die ein Client gleichzeitig geöffnet halten kann. Der Standardwert ist 32 und Sie können diesen Wert nach Bedarf anpassen.

mysql erstellt eine temporäre Tabelle und fügt die Abfrageergebnisse in eine vorhandene Tabelle ein

Ich bin heute auf ein sehr kniffliges Problem gestoßen. Ich wollte einige Daten vorübergehend speichern und sie später lesen. Ich erinnere mich, dass der Lehrer im Datenbanktheorie-Kurs sagte, dass temporäre Tabellen erstellt werden können. Ich frage mich, ob MySQL eine solche Funktion hat? Temporäre Tabellen befinden sich im Speicher und sollten schneller gelesen werden als Ansichten. Anschließend müssen Sie die Abfrageergebnisse auch in einer temporären Tabelle speichern.

Nachfolgend finden Sie ein Beispiel für die Erstellung einer temporären Tabelle und das Einfügen von Daten zu Ihrer Referenz.

A. Nachdem die temporäre Tabelle von MySQL getrennt wurde, löscht das System automatisch die Daten in der temporären Tabelle. Dies ist jedoch auf die mit der folgenden Anweisung erstellte Tabelle beschränkt:

1) Felder definieren

Temporäre Tabelle erstellen tmp_table (
 Name VARCHAR(10) NOT NULL, 
 Uhrzeit und Datum NICHT NULL
 )

Ein fortgeschrittenerer Punkt ist:

Erstellen Sie eine temporäre Tabelle `temptable` (
 `jws` varchar(100) Zeichensatz utf8 sortieren utf8_bin NICHT NULL,
 `tzlb` varchar(100) Zeichensatz utf8 sortieren utf8_bin NICHT NULL,
 `uptime`-Datum NICHT NULL
)ENGINE=InnoDB DEFAULT CHARSET=latin1″

Sogar die Kodierungsmethode ist angegeben. . Haha, um verstümmelte Zeichen zu vermeiden.

2) Importieren Sie die Abfrageergebnisse direkt in eine temporäre Tabelle

Temporäre Tabelle erstellen tmp_table SELECT * FROM Tabellenname

B. Darüber hinaus können Sie mit MySQL auch temporäre Tabellen direkt im Speicher erstellen. Da es sich im Speicher befindet, ist die Geschwindigkeit sehr hoch. Die Syntax lautet wie folgt:

 Temporäre Tabelle erstellen tmp_table (
 Name VARCHAR(10) NOT NULL,
 Wert INTEGER NICHT NULL
 ) TYP = HEAP

Wie speichern Sie also die Abfrageergebnisse in einer vorhandenen Tabelle?

1. Sie können die zweite Methode in A verwenden.

2. Verwenden Sie insert into temtable (select a,b,c,d from tablea)”;

Parameter für temporäre MySQL-Datenbankspeichertabelle

1. Maximale Größe der temporären Tabelle im internen Speicher

Diese Variable gilt nicht für vom Benutzer erstellte MEMORY-Tabellen. In einigen komplexeren Abfragen werden temporäre Tabellen erstellt. Der tatsächliche Grenzwert wird durch den kleineren Wert von tmp_table_size und max_heap_table_size bestimmt.
tmp-table-size-ParameterStandardmäßig 16777216

1.1. Temporäre Speichertabellen und temporäre Festplattentabellen Wenn die temporäre Tabelle im Speicher das Limit überschreitet, konvertiert MySQL sie automatisch in eine temporäre Tabelle auf der Festplatte.
Ab MySQL 5.7.5 definiert die Option internal_tmp_disk_storage_engine die Speicher-Engine, die für temporäre Festplattentabellen verwendet werden soll.
Vor MySQL 5.7.5 wurde die MyISAM-Speicher-Engine verwendet.
Die Anzahl der erstellten temporären Speichertabellen: Created_tmp_tables
Die Anzahl der erstellten temporären Festplattentabellen: Created_tmp_disk_tables
Hinzugefügt: Created_tmp_files

1.2. Einstellungsreferenz: Beachten Sie beim Einstellen der temporären Tabellengröße die Werte der temporären Festplattentabelle und der temporären Speichertabelle.
Das allgemeine Verhältnis ist: Erstellte temporäre Festplattentabellen/Erstellte temporäre Tabellen<5 %
Wenn Sie viele erweiterte GROUP BY-Abfragen durchführen und über ausreichend Arbeitsspeicher verfügen, erhöhen Sie den Wert von tmp_table_size (und bei Bedarf von max_heap_table_size).

2. Maximale Größe der MEMORY-Tabelle

Diese Variable legt die maximale Größe fest, auf die vom Benutzer erstellte MEMORY-Tabellen anwachsen dürfen. Dieser Variablenwert wird verwendet, um den MAX_ROWS-Wert der MEMORY-Tabelle zu berechnen.
max_heap_table_size-Parameter Standard 16777216

2.1. Verwendung Das Setzen dieser Variable hat keine Auswirkung auf vorhandene MEMORY-Tabellen, es sei denn, die Tabelle wird mit einer Anweisung wie CREATE TABLE neu erstellt oder mit ALTER TABLE oder TRUNCATE TABLE geändert.
Ein Serverneustart setzt auch die maximale Größe vorhandener MEMORY-Tabellen auf den globalen Wert max_heap_table_size.
Diese Variable wird auch zusammen mit tmp_table_size verwendet, um die Größe der internen Speichertabelle zu begrenzen.

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Speicherverwaltung der MySQL InnoDB-Speicher-Engine
  • Detaillierte Analyse des MySQL 8.0-Speicherverbrauchs
  • Lösungen für MySQL OOM (Speicherüberlauf)
  • Detaillierte Erklärung zum Anzeigen der MySQL-Speichernutzung
  • Die perfekte Lösung für den häufig auftretenden Startfehler bei MySQL mit unzureichendem Arbeitsspeicher
  • Test und Lösung für den großen Speicherverbrauch und die hohe CPU-Auslastung von MySQL
  • Lösung für hohen Speicherverbrauch beim Starten von MySQL 5.6
  • Teilen Sie den Prozess zur Fehlerbehebung bei abnormalem Speicheranstieg in der MySQL-Produktionsdatenbank

<<:  Tutorial zur HTML-Tabellenauszeichnung (16): Attribut für horizontale Titelausrichtung ALIGN

>>:  Prozessdiagramm für das erste Bereitstellungs-Webprojekt von Tomcat

Artikel empfehlen

Detaillierte Erklärung dynamisch generierter Tabellen mit Javascript

*Seite erstellen: zwei Eingabefelder und ein Butt...

So deinstallieren Sie das native OpenJDK von Linux und installieren Sun JDK

Siehe: https://www.jb51.net/article/112612.htm Üb...

So konfigurieren Sie inländische Quellen in CentOS8 yum/dnf

CentOS 8 hat das Installationsprogramm für Softwa...

Detaillierte Erklärung des Linx awk-Einführungstutorials

Awk ist eine Anwendung zur Verarbeitung von Textd...

Detaillierte Schritte zur Installation von MySql 5.7.21 unter Linux

Vorwort Die am häufigsten verwendete Datenbank in...

Zusammenfassung der Probleme mit der Mysql-connector-java-Treiberversion

Problem mit der Mysql-Connector-Java-Treiberversi...

So erstellen Sie eine Ansicht in MySQL

Grundlegende Syntax Sie können eine Ansicht mit d...

Grafisches Beispiel für die Verwaltung von Datenträgerkontingenten unter Linux

Das Datenträgerkontingent ist die Speichergrenze ...

Detaillierter Prozess der Bereitstellung von Docker für WSL2 in IDEA

Die lokale Umgebung ist Windows 10 + WSL2 (Ubuntu...