- 1 1. Einführung
- 2 2. Grundlagen temporärer Tabellen
- 3 3. How to Create Temporary Tables
- 4 4. How to Use Temporary Tables
- 5 5. Verwalten und Löschen von Temporärtabellen
- 6 6. Praktische Anwendungsfälle für temporäre Tabellen
- 7 7. Alternatives and Limitations of Temporary Tables
- 7.1 Main limitations of temporary tables
- 7.2 Alternativen zu temporären Tabellen
- 7.3 Zusammenfassung
- 8 8. FAQ
- 8.1 1. Können temporäre Tabellen von anderen Sitzungen referenziert werden?
- 8.2 2. Welche Berechtigungen sind zum Erstellen temporärer Tabellen erforderlich?
- 8.3 3. Beeinflussen temporäre Tabellen die Festplattennutzung?
- 8.4 4. Was ist der Unterschied zwischen einer temporären Tabelle und einer internen temporären Tabelle?
- 8.5 5. Können temporäre Tabellen über Threads hinweg geteilt werden?
- 8.6 6. Können temporäre Tabellen die Leistung mindern?
- 8.7 7. Wie kann ich die Leistung temporärer Tabellen verbessern?
- 8.8 Zusammenfassung
1. Einführung
Beim Arbeiten mit MySQL ist eine „temporäre Tabelle“ ein nützliches Mittel, um Daten vorübergehend zu speichern und zu verarbeiten. Durch die Verwendung temporärer Tabellen können Sie Daten temporär halten, um die Last komplexer Abfragen zu reduzieren und die Effizienz der Batch‑Verarbeitung zu steigern.
In diesem Artikel erklären wir, was MySQL‑temporäre Tabellen sind, sowie ihre Anwendungsfälle und Vorteile im Detail.
Was ist eine temporäre Tabelle?
Eine temporäre Tabelle ist eine Tabelle, die nur innerhalb einer Sitzung gültig ist.
Im Gegensatz zu regulären Tabellen wird sie nicht dauerhaft in der Datenbank gespeichert und wird automatisch gelöscht, wenn die Sitzung endet.
Die wichtigsten Merkmale temporärer Tabellen sind folgende:
- Sie existieren pro Sitzung (nicht von anderen Verbindungen aus zugänglich)
- Sie werden automatisch gelöscht, wenn die Sitzung endet
- Sie können verwendet werden, ohne zu stören, selbst wenn eine reguläre Tabelle mit demselben Namen existiert
- Sie werden häufig eingesetzt, um die Performance zu verbessern
Temporäre Tabellen eignen sich gut für Datenanalyse und temporäre Datenverarbeitung und werden häufig als Unterstützung für Batch‑Verarbeitung und Aggregationsaufgaben verwendet.
Vorteile der Verwendung temporärer Tabellen
Der Einsatz temporärer Tabellen kann die Datenverarbeitung effizienter machen. Hier sind drei Hauptvorteile.
1. Verbesserung der Abfrage‑Performance
Bei der Verarbeitung großer Datenmengen können mehrere JOINs und Unterabfragen die Verarbeitung komplex machen und die Datenbanklast erhöhen. Mit temporären Tabellen können Sie Daten im Voraus filtern und speichern, wodurch die Ausführung von Abfragen beschleunigt wird.
2. Ideal für temporäre Datenspeicherung
In Batch‑Verarbeitung oder Datenumwandlung müssen Sie Daten möglicherweise vorübergehend speichern und notwendige Operationen ausführen. Temporäre Tabellen ermöglichen das temporäre Speichern von Daten und unterstützen schnelle In‑Memory‑Verarbeitung.
3. Vorhandene Daten sicher schützen
Direktes Manipulieren von Produktionsdaten ist riskant. Durch die Verwendung temporärer Tabellen können Sie Daten verarbeiten, ohne Produktionsdaten zu ändern, und das Fehlerrisiko reduzieren.
Zusammenfassung
MySQL‑temporäre Tabellen sind ein praktisches Werkzeug für die temporäre Datenspeicherung und -verarbeitung.
- Sie sind sitzungsbezogen und werden gelöscht, wenn die Sitzung endet
- Sie sind nützlich für Performance‑Verbesserungen und Batch‑Verarbeitung
- Sie ermöglichen sichere Operationen, ohne Produktionsdaten zu ändern
2. Grundlagen temporärer Tabellen
MySQL‑temporäre Tabellen werden verwendet, um Daten vorübergehend zu speichern, im Gegensatz zu regulären Tabellen. In diesem Abschnitt erklären wir die Grundkonzepte temporärer Tabellen im Detail, einschließlich „Unterschiede zu regulären Tabellen“ und „Unterschiede zu internen temporären Tabellen“.
Unterschiede zwischen temporären Tabellen und regulären Tabellen
Temporäre Tabellen und reguläre Tabellen unterscheiden sich erheblich in Datenaufbewahrung und Zugriffsverhalten. Die nachstehende Tabelle fasst die wichtigsten Unterschiede zusammen.
| Item | Temporary Table | Regular Table |
|---|---|---|
| Lifetime | Dropped when the session ends | Exists until explicitly dropped |
| Access | Available only within the session (not visible to other connections) | Shareable across all sessions |
| Conflicts | Can be used even if a regular table with the same name exists | Cannot create another table with the same name |
| Storage location | MEMORY (default) or an InnoDB temporary area | Stored in the database storage |
| Persistence | None (dropped when the session ends) | Yes (retained by the database) |
Wesentliche Punkte
- Temporäre Tabellen sind pro Sitzung isoliert und für andere Benutzer nicht sichtbar.
- Sie können sie ohne Fehlermeldung erstellen, selbst wenn eine reguläre Tabelle mit demselben Namen existiert.
- Sie werden explizit mit
CREATE TEMPORARY TABLEerstellt und automatisch gelöscht, wenn die Sitzung endet.
Unterschiede zwischen temporären Tabellen und internen temporären Tabellen
Zusätzlich zu vom Benutzer erstellten temporären Tabellen erzeugt MySQL automatisch interne temporäre Tabellen. Sie klingen ähnlich, haben jedoch unterschiedliche Zwecke und Verwaltungsweisen.
| Item | Temporary Table | Internal Temporary Table |
|---|---|---|
| Creation method | Explicitly created using CREATE TEMPORARY TABLE | Automatically created by MySQL |
| Purpose | Created by the user for specific processing | Created by MySQL to process complex queries (GROUP BY, ORDER BY) |
| Scope | Available only within the session | Valid only while the query is executing |
| Deletion | Dropped when the session ends | Automatically dropped after the query completes |
Was ist eine interne temporäre Tabelle?
- MySQL kann intern temporäre Tabellen erzeugen, um bestimmte Abfragen zu optimieren (z. B.
GROUP BY,ORDER BY,DISTINCT). - Endbenutzer können sie nicht direkt verwalten (sie können nicht explizit mit
CREATE TEMPORARY TABLEerstellt werden). - Sie werden bei Bedarf während der Abfrageausführung erzeugt und automatisch gelöscht, wenn die Abfrage abgeschlossen ist.
Beispiel, das interne temporäre Tabellen auslösen kann
Wenn Sie eine Abfrage wie die folgende ausführen, kann MySQL eine interne temporäre Tabelle erstellen, um sie zu verarbeiten.
SELECT category, COUNT(*)
FROM products
GROUP BY category
ORDER BY COUNT(*) DESC;
In diesem Fall kann MySQL eine interne temporäre Tabelle erstellen, um vorübergehend die GROUP BY‑Ergebnisse zu speichern,
und sie dann verwenden, um die endgültige Ausgabe zu berechnen.
Summary
- Eine temporäre Tabelle ist eine vom Benutzer erstellte temporäre Tabelle, die automatisch gelöscht wird, wenn die Sitzung endet.
- Im Gegensatz zu regulären Tabellen kann sie nicht von anderen Sitzungen aus zugegriffen werden.
- Eine interne temporäre Tabelle wird von MySQL automatisch erstellt und gelöscht, und Benutzer können sie nicht direkt steuern.

3. How to Create Temporary Tables
Sie können eine MySQL‑temporäre Tabelle mit dem Befehl CREATE TEMPORARY TABLE erstellen. In diesem Abschnitt erklären wir alles von der grundlegenden Erstellung bis hin zur Erstellung einer Tabelle basierend auf einer bestehenden Tabelle.
Basic way to create a temporary table
In MySQL verwenden Sie CREATE TEMPORARY TABLE, um eine temporäre Tabelle zu erstellen.
Basic syntax
CREATE TEMPORARY TABLE table_name (
column_name data_type constraints,
column_name data_type constraints,
...
);
Sample code
Das folgende SQL erstellt eine temporäre Tabelle namens users_temp mit drei Spalten: id (Integer), name (String) und email (String).
CREATE TEMPORARY TABLE users_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
Da diese Tabelle automatisch gelöscht wird, wenn die Sitzung endet, beeinflusst sie die permanente Datenbank nicht.
Create a temporary table based on an existing table
Anstatt eine temporäre Tabelle von Grund auf neu zu erstellen, können Sie auch die Struktur einer bestehenden Tabelle kopieren, um eine zu erstellen.
Using CREATE TEMPORARY TABLE ... SELECT
In MySQL können Sie eine temporäre Tabelle basierend auf dem Ergebnis einer SELECT‑Anweisung erstellen.
Basic syntax
CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;
Sample code
Zum Beispiel, um die Datenstruktur der Tabelle users zu kopieren und eine neue temporäre Tabelle users_temp zu erstellen, können Sie schreiben:
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;
Mit dieser Methode wird die Spaltenstruktur von users auf users_temp übertragen, jedoch werden Einschränkungen wie PRIMARY KEY und INDEX nicht kopiert.
Wenn Sie nur die Tabellenstruktur ohne Daten kopieren möchten, fügen Sie WHERE 1=0 hinzu.
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;
Mit diesem SQL werden die Spaltendefinitionen von users kopiert, aber es werden keine Daten übernommen.
Notes when creating temporary tables
1. Temporary tables are session-scoped
- Eine temporäre Tabelle ist nur innerhalb der Sitzung gültig, in der sie erstellt wurde.
- Sie kann von anderen Verbindungen oder anderen Benutzern nicht zugegriffen werden.
2. You can create it even if a regular table with the same name exists
- Zum Beispiel können Sie, selbst wenn es in der Datenbank eine reguläre Tabelle namens
usersgibt, eine temporäre Tabelle namensuserserstellen. - In dieser Sitzung hat die temporäre Tabelle Vorrang und die reguläre Tabelle wird verborgen.
3. Storage engine impact
- Standardmäßig verwenden temporäre Tabellen die
MEMORY‑Engine, aber bei großen Datenmengen können sie in einem temporärenInnoDB‑Bereich gespeichert werden. - Wenn Sie die
MEMORY‑Engine explizit angeben möchten, schreiben Sie es so:CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY; - Die
MEMORY‑Engine ist schnell, hat jedoch Beschränkungen hinsichtlich der Datenmenge. Für große Datensätze sollten SieInnoDBin Betracht ziehen.
Summary
- Erstellen Sie temporäre Tabellen mit
CREATE TEMPORARY TABLE. - Sie können auch eine erstellen, indem Sie eine bestehende Tabelle kopieren (
SELECT * FROM). - Die
MEMORY‑Engine kann schnell sein, aberInnoDBist oft besser für große Datensätze. - Temporäre Tabellen werden pro Sitzung verwaltet und werden automatisch gelöscht, wenn die Sitzung endet.
4. How to Use Temporary Tables
MySQL-Temporärtabellen können wie reguläre Tabellen verwendet werden, einschließlich INSERT, UPDATE, DELETE und SELECT. In diesem Abschnitt erklären wir jede Operation im Detail.
Einfügen von Daten
Um Daten zu einer Temporärtabelle hinzuzufügen, verwenden Sie die reguläre INSERT INTO‑Anweisung.
Grundsyntax
INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Beispielcode
Das folgende SQL fügt Daten in eine Temporärtabelle namens users_temp ein.
INSERT INTO users_temp (id, name, email)
VALUES (1, 'Taro Yamada', 'taro@example.com');
Sie können auch Daten aus einer bestehenden Tabelle kopieren und einfügen.
INSERT INTO users_temp (id, name, email)
SELECT id, name, email FROM users WHERE age >= 18;
Dieses SQL fügt Daten für Benutzer im Alter von 18 Jahren oder älter aus der users‑Tabelle in die Temporärtabelle ein.
Aktualisieren von Daten
Um Daten in einer Temporärtabelle zu ändern, verwenden Sie die reguläre UPDATE‑Anweisung.
Grundsyntax
UPDATE temp_table_name
SET column_name = new_value
WHERE condition;
Beispielcode
Zum Beispiel, um den Namen des Benutzers mit id=1 in der users_temp‑Tabelle zu ändern:
UPDATE users_temp
SET name = 'Ichiro Sato'
WHERE id = 1;
Löschen von Daten
Um unnötige Daten zu löschen, verwenden Sie die DELETE‑Anweisung.
Grundsyntax
DELETE FROM temp_table_name WHERE condition;
Beispielcode
Zum Beispiel, um die Zeile mit id=1 aus users_temp zu löschen:
DELETE FROM users_temp WHERE id = 1;
Um alle Daten in der Tabelle zu löschen, lassen Sie die WHERE‑Klausel weg.
DELETE FROM users_temp;
Beachten Sie, dass die Verwendung von DELETE die Tabelle selbst nicht löscht; sie löscht nur die Daten.
Auswählen von Daten
Um in einer Temporärtabelle gespeicherte Daten abzurufen, verwenden Sie die SELECT‑Anweisung.
Grundsyntax
SELECT column_name FROM temp_table_name WHERE condition;
Beispielcode
Zum Beispiel, um alle Daten aus users_temp abzurufen:
SELECT * FROM users_temp;
Um Daten abzurufen, die einer bestimmten Bedingung entsprechen, verwenden Sie die WHERE‑Klausel.
SELECT * FROM users_temp WHERE email LIKE '%@example.com';
Dieses SQL ruft nur Zeilen ab, bei denen die E‑Mail-Adresse @example.com enthält.
Hinweise zur Verwendung von Temporärtabellen
1. Daten werden entfernt, wenn die Sitzung endet
- Temporärtabellen werden pro Sitzung verwaltet, und ihre Daten werden ebenfalls entfernt, wenn die Sitzung endet.
- Für langlaufende Prozesse wird empfohlen, die Daten regelmäßig zu sichern.
2. Das Erstellen einer Temporärtabelle mit demselben Namen führt zu einem Fehler
- Wenn Sie versuchen, mit
CREATE TEMPORARY TABLEeine Temporärtabelle mit demselben Namen zu erstellen, tritt ein Fehler auf. - Als Fehlervermeidungsmaßnahme führen Sie vorher
DROP TEMPORARY TABLE IF EXISTSaus.DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);
3. Einschränkungen des Speicher‑Engines
- Temporärtabellen verwenden standardmäßig die
MEMORY‑Engine, aber große Datensätze können automatisch in einem temporärenInnoDB‑Bereich gespeichert werden. - Für große Datensätze wird die Verwendung einer
InnoDB‑Temporärtabelle empfohlen.
Zusammenfassung
- Temporärtabellen können INSERT, UPDATE, DELETE und SELECT genauso wie reguläre Tabellen ausführen.
- Wenn die Sitzung endet, werden die Daten in der Temporärtabelle ebenfalls automatisch entfernt.
- Das vorherige Ausführen von
DROP TEMPORARY TABLE IF EXISTShilft, Namenskonflikt‑Fehler zu vermeiden. - Für große Datensätze wird die Verwendung einer
InnoDB‑Temporärtabelle empfohlen.
5. Verwalten und Löschen von Temporärtabellen
MySQL-Temporärtabellen werden automatisch gelöscht, wenn die Sitzung endet. In einigen Fällen müssen Sie sie jedoch explizit löschen. In diesem Abschnitt erklären wir, wie man Temporärtabellen verwaltet und löscht.
Wie man eine Temporärtabelle löscht
Um eine Temporärtabelle explizit zu löschen, verwenden Sie die Anweisung DROP TEMPORARY TABLE.
Grundsyntax
DROP TEMPORARY TABLE table_name;
Beispielcode
Zum Beispiel, um eine temporäre Tabelle namens users_temp zu löschen, führen Sie aus:
DROP TEMPORARY TABLE users_temp;
Nach der Ausführung dieses SQL wird die Tabelle users_temp entfernt und kann in der Sitzung nicht mehr verwendet werden.
Automatisches Löschen beim Beenden der Sitzung
Eine temporäre Tabelle wird automatisch gelöscht, wenn die Sitzung endet.
Wie das automatische Löschen funktioniert
- Erstellen Sie eine temporäre Tabelle mit
CREATE TEMPORARY TABLE - Arbeiten Sie mit ihren Daten, während die Sitzung aktiv ist
- Wenn die Sitzung (Verbindung) geschlossen wird, wird die temporäre Tabelle automatisch gelöscht
Seien Sie jedoch in den folgenden Fällen vorsichtig:
- Wenn Sitzungen lange offen bleiben → Unnötige temporäre Tabellen können Speicher verbrauchen, daher wird empfohlen,
DROP TEMPORARY TABLEbei Bedarf auszuführen. - Beim Umgang mit großen Datenmengen → Um Speicherdruck zu vermeiden, ist es wichtig, Tabellen angemessen zu löschen.
Verwendung von DROP TEMPORARY TABLE IF EXISTS
Um Fehler zu vermeiden, wenn eine möglicherweise nicht existierende Tabelle gelöscht wird, können Sie IF EXISTS verwenden.
Grundlegende Syntax
DROP TEMPORARY TABLE IF EXISTS table_name;
Beispielcode
DROP TEMPORARY TABLE IF EXISTS users_temp;
Dieses SQL löscht users_temp, falls es existiert; falls es nicht existiert, wird kein Fehler ausgelöst.
Häufige Fehler und Lösungen
Fehler 1: „Tabelle nicht gefunden“
Wann es auftritt:
- Wenn Sie versuchen, eine nicht existierende Tabelle mit
DROP TEMPORARY TABLEzu löschen - Da temporäre Tabellen sitzungsbezogen sind, können Sie sie nicht aus einer anderen Sitzung löschen
Lösung:
- Fügen Sie
IF EXISTShinzu, um den Fehler zu vermeidenDROP TEMPORARY TABLE IF EXISTS users_temp;
- Löschen Sie sie in der richtigen Sitzung
Fehler 2: „Tabelle existiert bereits“
Wann es auftritt:
- Wenn Sie versuchen, eine temporäre Tabelle mit einem bereits existierenden Namen zu erstellen
Lösung:
- Führen Sie vorher
DROP TEMPORARY TABLE IF EXISTSausDROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
Best Practices für das Verwalten temporärer Tabellen
- Löschen Sie sie explizit, wenn Sie sie nicht mehr benötigen
- Führen Sie
DROP TEMPORARY TABLEbei Bedarf aus, um unnötige Tabellen freizugeben.
- Verwenden Sie
IF EXISTS, um Fehler zu vermeiden
DROP TEMPORARY TABLE IF EXISTSverhindert Fehler beim Löschen einer nicht existierenden Tabelle.
- Achten Sie auf das Sitzungsmanagement
- Langlebige Sitzungen können dazu führen, dass temporäre Tabellen Speicher verbrauchen, daher löschen Sie sie angemessen.
- Verstehen Sie den Einfluss des Speicher-Engines
- Der
MEMORY-Engine ist schnell, hat aber Grenzen bei der Datengröße. - Wenn Sie
InnoDBverwenden, müssen Sie den Festplattenspeicherbedarf berücksichtigen.
Zusammenfassung
- Sie können temporäre Tabellen explizit mit
DROP TEMPORARY TABLElöschen. - Sie werden automatisch gelöscht, wenn die Sitzung endet, aber bei langlebigen Sitzungen wird eine manuelle Bereinigung empfohlen.
DROP TEMPORARY TABLE IF EXISTShilft, Fehler beim Löschen zu verhindern.- Es ist nützlich zu wissen, wie man „Tabelle nicht gefunden“- und „Tabelle existiert bereits“-Fehler handhabt.
6. Praktische Anwendungsfälle für temporäre Tabellen
MySQL-Temporäre Tabellen werden verwendet, um die temporäre Datenspeicherung und -verarbeitung effizienter zu gestalten. In diesem Abschnitt stellen wir gängige Szenarien vor, in denen temporäre Tabellen nützlich sind, und erklären Implementierungsdetails.
1. Verwendung als Zwischentabelle für Aggregation
In der Datenanalyse und Berichtserstellung kann die direkte Verarbeitung großer Datensätze die Abfrageausführung verlangsamen. Durch die Verwendung einer temporären Tabelle können Sie die Daten zuerst organisieren und dann verarbeiten, um die Leistung zu verbessern.
Szenario
- Die Tabelle
salesenthält ein Jahr Verkaufsdaten. - Sie möchten den monatlichen Gesamtumsatz berechnen und weitere Analysen durchführen.
Beispielimplementierung
CREATE TEMPORARY TABLE monthly_sales (
month_year DATE,
total_sales DECIMAL(10,2)
);
INSERT INTO monthly_sales (month_year, total_sales)
SELECT DATE_FORMAT(sale_date, '%Y-%m-01') AS month_year, SUM(amount)
FROM sales
GROUP BY month_year;
SELECT * FROM monthly_sales;
2. Keeping temporary data for batch processing
Temporary tables are also useful for batch processing (bulk operations). For example, you can filter data by certain conditions and store only the target data in a temporary table to operate efficiently.
Scenario
- From the
userstable, you want to email only users who have logged in within the last year . - You store the target data in a temporary table first, then process it sequentially.
Example implementation
CREATE TEMPORARY TABLE active_users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255)
);
INSERT INTO active_users
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;
SELECT * FROM active_users;
3. Simplifying complex queries
Running complex queries directly can reduce performance and hurt readability. By using temporary tables, you can reduce subqueries and keep SQL simpler.
Scenario
- You want to get the top 10 best-selling products from the
orderstable. - You want to avoid using subqueries by leveraging a temporary table.
Example implementation
CREATE TEMPORARY TABLE top_products AS
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
SELECT * FROM top_products;
4. Temporary operations without needing rollback
Temporary tables are managed per session and are not affected by transactions. This makes them suitable for managing temporary data where rollback is not desired.
Scenario
- During a transaction, you want to keep temporary calculation results .
- But you want to avoid temporary data being rolled back on errors.
Example implementation
START TRANSACTION;
CREATE TEMPORARY TABLE temp_results (
user_id INT,
score INT
);
INSERT INTO temp_results
SELECT user_id, SUM(points) FROM game_scores GROUP BY user_id;
-- Die Transaktion committen
COMMIT;
SELECT * FROM temp_results;
Summary
- Temporary tables can be used for aggregation, batch processing, and simplifying queries across many scenarios.
- Using them as an intermediate table can improve performance and help organize data.
- For batch processing , pre-extracting only target data helps avoid unnecessary work.
- For simplifying complex queries , reducing subqueries improves readability.
- Because they are not affected by transactions , they can be used for temporary data where rollback is not needed.
7. Alternatives and Limitations of Temporary Tables
MySQL temporary tables are useful, but they have some limitations. In some cases, using alternatives such as views or subqueries can provide more efficient data processing. In this section, we explain the main limitations of temporary tables and alternative approaches to work around them.
Main limitations of temporary tables
Temporary tables have several limitations that regular tables do not. Understanding these helps you choose appropriate use cases.
1. Session-scoped
- A temporary table is valid only within the session where it was created, and cannot be accessed by other connections or users .
- Even if a regular table with the same name exists, the temporary table takes precedence within the session (the regular table is not accessible).
2. The schema is not retained
- Regular tables can be inspected with
SHOW CREATE TABLE, but a temporary table disappears when the session ends , so its schema is not retained.
3. Index limitations
- Wenn Sie
PRIMARY KEYoderINDEXnicht inCREATE TEMPORARY TABLEangeben, werden sie nicht automatisch erstellt. - Wenn Sie Indizes für eine temporäre Tabelle benötigen, müssen Sie diese manuell erstellen.
4. Standard‑Speicher‑Engine ist MEMORY
- Mit der
MEMORY‑Engine kann große Datenmengen zu einem Swapping auf die Festplatte führen und die Leistung verringern. - Wenn Sie
InnoDBangeben, kann sie größere Daten verarbeiten, jedoch steigt die Plattenbelegung.
5. Nicht von Transaktionen betroffen
- Temporäre Tabellen sind nicht von
ROLLBACKbetroffen. - Daher eignen sie sich nicht für Vorgänge, die strenge transaktionale Konsistenz erfordern.
Alternativen zu temporären Tabellen
Um diese Einschränkungen zu umgehen, können Sie Views oder Unterabfragen anstelle von temporären Tabellen verwenden, um flexibler mit Daten zu arbeiten.
1. Einen View verwenden
Ein View kann ähnlich wie temporäre Tabellen für die Referenzierung temporärer Daten verwendet werden. Ein View fungiert als virtuelle Tabelle und erfordert keine temporäre Datenspeicherung, was hilft, Speicherbeschränkungen zu vermeiden.
Einen View erstellen
CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;
Den View verwenden
SELECT * FROM active_users;
Vorteile der Verwendung eines Views
✅ Kein Speicherverbrauch (Daten werden direkt referenziert, es muss nichts temporär gespeichert werden)
✅ Nicht sitzungsabhängig (für andere Benutzer und Verbindungen verfügbar)
✅ Schema kann beibehalten werden (Sie können die Definition mit SHOW CREATE VIEW prüfen)
Nachteile der Verwendung eines Views
❌ Schwer zu aktualisieren (direktes INSERT oder UPDATE auf einem View ist eingeschränkt)
❌ Leistung kann bei großen Datensätzen abnehmen
2. Eine Unterabfrage verwenden
Sie können auch eine Unterabfrage verwenden, um temporäre Daten zu verarbeiten, ohne eine temporäre Tabelle zu erstellen.
Verwendung einer temporären Tabelle
CREATE TEMPORARY TABLE top_products AS
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
SELECT * FROM top_products;
Verwendung einer Unterabfrage
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Vorteile der Verwendung einer Unterabfrage
✅ Bessere Leistung, weil Sie keine temporäre Tabelle erstellen
✅ Kein Speicherverbrauch
✅ Nicht sitzungsabhängig und kann jederzeit ausgeführt werden
Nachteile der Verwendung einer Unterabfrage
❌ Die Lesbarkeit kann bei komplexen Abfragen leiden
❌ Schwer wiederzuverwenden (Sie müssen möglicherweise dieselben Daten mehrfach referenzieren)
3. Einen CTE (WITH‑Klausel) verwenden
In MySQL 8.0 und höher können Sie einen CTE (Common Table Expression) verwenden, um Daten temporär zu verarbeiten, ohne eine temporäre Tabelle zu erstellen.
CTE‑Beispiel
WITH top_products AS (
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10
)
SELECT * FROM top_products;
Vorteile der Verwendung eines CTE
✅ Verbessert die Lesbarkeit (oft leichter zu lesen als Unterabfragen)
✅ Kann die Leistung optimieren (temporäre Verarbeitung ohne Erstellung einer temporären Tabelle)
Nachteile der Verwendung eines CTE
❌ Nicht verfügbar in MySQL 5.x (nur in MySQL 8.0 und höher unterstützt)
Zusammenfassung
| Method | Pros | Cons |
|---|---|---|
| Temporary table | Good for session-scoped data processing | Consumes storage and disappears when the session ends |
| View | No storage usage, not session-dependent | Hard to update, possible performance degradation |
| Subquery | No storage usage, simple | Hard to reuse, reduced readability |
| CTE (WITH) | Better readability, performance optimization | Available only in MySQL 8.0+ |
8. FAQ
Hier finden Sie häufig gestellte Fragen zu MySQL‑temporären Tabellen. Wir hoffen, dass dies hilft, ihr Verhalten und ihre Einschränkungen zu verstehen.
1. Können temporäre Tabellen von anderen Sitzungen referenziert werden?
Nein, das können sie nicht. Eine temporäre Tabelle ist nur innerhalb der Sitzung verfügbar, in der sie erstellt wurde. Andere Sitzungen können nicht darauf zugreifen. Selbst wenn ein anderer Benutzer eine temporäre Tabelle mit demselben Namen erstellt, behandelt jede Sitzung sie als unabhängige Tabelle.
2. Welche Berechtigungen sind zum Erstellen temporärer Tabellen erforderlich?
Um temporäre Tabellen zu erstellen, benötigen Sie das Privileg CREATE TEMPORARY TABLES für die Datenbank.
Um das Privileg einem Benutzer zu gewähren, führen Sie den folgenden SQL-Befehl aus:
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';
Sie können die aktuellen Privilegien auch mit SHOW GRANTS überprüfen.
SHOW GRANTS FOR 'user_name'@'host';
3. Beeinflussen temporäre Tabellen die Festplattennutzung?
Ja, das können sie.
Standardmäßig verwenden MySQL-temporäre Tabellen den MEMORY-Engine, aber wenn die Datengröße eine bestimmte Schwelle überschreitet, werden sie in einem InnoDB-temporären Bereich gespeichert.
Beim Umgang mit großen Datensätzen können temporäre Tabellen Festplattenspeicher verbrauchen. Daher wird empfohlen, sie explizit zu löschen, wenn sie nicht mehr benötigt werden.
DROP TEMPORARY TABLE IF EXISTS table_name;
Um den Einfluss auf die Festplatte zu minimieren, erstellen Sie die temporäre Tabelle bei erwarteten großen Datenmengen mit InnoDB anstelle von MEMORY.
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type
) ENGINE=InnoDB;
4. Was ist der Unterschied zwischen einer temporären Tabelle und einer internen temporären Tabelle?
| Item | Temporary table | Internal temporary table |
|---|---|---|
| Creation method | Created by the user with CREATE TEMPORARY TABLE | Automatically created by MySQL during processing such as GROUP BY |
| Scope | Only within the creating session | Only during query execution |
| Deletion | Explicitly dropped with DROP TEMPORARY TABLE | Automatically dropped when the query completes |
5. Können temporäre Tabellen über Threads hinweg geteilt werden?
Nein, das können sie nicht.
Eine temporäre Tabelle ist nur innerhalb des Threads (Sitzung) gültig, in dem sie erstellt wurde, und sie kann nicht von anderen Threads oder Prozessen aus zugänglich gemacht werden.
Wenn Sie Daten über Sitzungen/Threads hinweg teilen müssen, erstellen Sie stattdessen eine reguläre Tabelle.
CREATE TABLE shared_temp_table (
id INT PRIMARY KEY,
data VARCHAR(255)
);
6. Können temporäre Tabellen die Leistung mindern?
Ja, in einigen Fällen.
Seien Sie insbesondere in den folgenden Situationen vorsichtig:
- Wenn das Datenvolumen zu groß ist
- Der
MEMORY-Engine hat Größenbeschränkungen; darüber hinaus können Daten zuInnoDBwechseln, was die Leistung mindern kann. - Abhilfe: Wenn Sie erwarten, die
MEMORY-Grenzen zu überschreiten, erstellen Sie die Tabelle von Anfang an mitInnoDB. - Wenn geeignete Indizes nicht gesetzt sind
- Tabellen, die mit
CREATE TEMPORARY TABLE ... SELECTerstellt werden, kopieren keine Indizes, sodass Suchen langsamer werden können. - Abhilfe: Fügen Sie bei Bedarf Indizes mit
ALTER TABLEhinzu.ALTER TABLE temp_table_name ADD INDEX (column_name);
7. Wie kann ich die Leistung temporärer Tabellen verbessern?
Um die Leistung temporärer Tabellen zu verbessern, sind die folgenden Ansätze wirksam:
✅ Verwenden Sie den MEMORY-Engine (schnell für kleine Datensätze)
CREATE TEMPORARY TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
✅ Wählen Sie nur die erforderlichen Spalten aus (lassen Sie unnötige Spalten weg)
CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;
✅ Fügen Sie geeignete Indizes hinzu (beschleunigen Sie Suchen)
ALTER TABLE users_temp ADD INDEX (name);
✅ Löschen Sie sie, sobald Sie sie nicht mehr benötigen (befreien Sie Speicher)
DROP TEMPORARY TABLE IF EXISTS users_temp;
Zusammenfassung
- Temporäre Tabellen können nicht von anderen Sitzungen oder Threads referenziert werden
- Sie benötigen das
CREATE TEMPORARY TABLES-Privileg, um sie zu erstellen - Wenn die Daten zu groß werden, kann MySQL von
MEMORYzuInnoDBwechseln, was die Leistung mindern kann - Das Hinzufügen geeigneter Indizes kann Abfragen beschleunigen
- Das Löschen temporärer Tabellen mit
DROP TEMPORARY TABLEwird empfohlen, wenn sie nicht mehr benötigt werden
Dies schließt eine detaillierte Erklärung von MySQL-temporären Tabellen ab, von grundlegenden Konzepten bis zu Anwendungsfällen, Einschränkungen, Alternativen und FAQs.
Durch den angemessenen Einsatz temporärer Tabellen können Sie die Effizienz der Datenverarbeitung erheblich verbessern.


