MySQL-Temporärtabellen: Funktionsweise, Vorteile und bewährte Methoden

目次

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.

ItemTemporary TableRegular Table
LifetimeDropped when the session endsExists until explicitly dropped
AccessAvailable only within the session (not visible to other connections)Shareable across all sessions
ConflictsCan be used even if a regular table with the same name existsCannot create another table with the same name
Storage locationMEMORY (default) or an InnoDB temporary areaStored in the database storage
PersistenceNone (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 TABLE erstellt 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.

ItemTemporary TableInternal Temporary Table
Creation methodExplicitly created using CREATE TEMPORARY TABLEAutomatically created by MySQL
PurposeCreated by the user for specific processingCreated by MySQL to process complex queries (GROUP BY, ORDER BY)
ScopeAvailable only within the sessionValid only while the query is executing
DeletionDropped when the session endsAutomatically 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 TABLE erstellt 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 users gibt, eine temporäre Tabelle namens users erstellen.
  • 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ären InnoDB‑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 Sie InnoDB in 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, aber InnoDB ist 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 TABLE eine Temporärtabelle mit demselben Namen zu erstellen, tritt ein Fehler auf.
  • Als Fehlervermeidungsmaßnahme führen Sie vorher DROP TEMPORARY TABLE IF EXISTS aus. 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ären InnoDB‑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 EXISTS hilft, 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

  1. Erstellen Sie eine temporäre Tabelle mit CREATE TEMPORARY TABLE
  2. Arbeiten Sie mit ihren Daten, während die Sitzung aktiv ist
  3. 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 TABLE bei 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 TABLE zu 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 EXISTS hinzu, um den Fehler zu vermeiden
    DROP 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 EXISTS aus
    DROP 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

  1. Löschen Sie sie explizit, wenn Sie sie nicht mehr benötigen
  • Führen Sie DROP TEMPORARY TABLE bei Bedarf aus, um unnötige Tabellen freizugeben.
  1. Verwenden Sie IF EXISTS, um Fehler zu vermeiden
  • DROP TEMPORARY TABLE IF EXISTS verhindert Fehler beim Löschen einer nicht existierenden Tabelle.
  1. Achten Sie auf das Sitzungsmanagement
  • Langlebige Sitzungen können dazu führen, dass temporäre Tabellen Speicher verbrauchen, daher löschen Sie sie angemessen.
  1. Verstehen Sie den Einfluss des Speicher-Engines
  • Der MEMORY-Engine ist schnell, hat aber Grenzen bei der Datengröße.
  • Wenn Sie InnoDB verwenden, müssen Sie den Festplattenspeicherbedarf berücksichtigen.

Zusammenfassung

  • Sie können temporäre Tabellen explizit mit DROP TEMPORARY TABLE löschen.
  • Sie werden automatisch gelöscht, wenn die Sitzung endet, aber bei langlebigen Sitzungen wird eine manuelle Bereinigung empfohlen.
  • DROP TEMPORARY TABLE IF EXISTS hilft, 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 sales enthä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 users table, 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 orders table.
  • 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 KEY oder INDEX nicht in CREATE TEMPORARY TABLE angeben, 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 InnoDB angeben, kann sie größere Daten verarbeiten, jedoch steigt die Plattenbelegung.

5. Nicht von Transaktionen betroffen

  • Temporäre Tabellen sind nicht von ROLLBACK betroffen.
  • 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

MethodProsCons
Temporary tableGood for session-scoped data processingConsumes storage and disappears when the session ends
ViewNo storage usage, not session-dependentHard to update, possible performance degradation
SubqueryNo storage usage, simpleHard to reuse, reduced readability
CTE (WITH)Better readability, performance optimizationAvailable 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?

ItemTemporary tableInternal temporary table
Creation methodCreated by the user with CREATE TEMPORARY TABLEAutomatically created by MySQL during processing such as GROUP BY
ScopeOnly within the creating sessionOnly during query execution
DeletionExplicitly dropped with DROP TEMPORARY TABLEAutomatically 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 zu InnoDB wechseln, was die Leistung mindern kann.
  • Abhilfe: Wenn Sie erwarten, die MEMORY-Grenzen zu überschreiten, erstellen Sie die Tabelle von Anfang an mit InnoDB.
  • Wenn geeignete Indizes nicht gesetzt sind
  • Tabellen, die mit CREATE TEMPORARY TABLE ... SELECT erstellt werden, kopieren keine Indizes, sodass Suchen langsamer werden können.
  • Abhilfe: Fügen Sie bei Bedarf Indizes mit ALTER TABLE hinzu.
    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 MEMORY zu InnoDB wechseln, was die Leistung mindern kann
  • Das Hinzufügen geeigneter Indizes kann Abfragen beschleunigen
  • Das Löschen temporärer Tabellen mit DROP TEMPORARY TABLE wird 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.