Tables temporaires MySQL : fonctionnement, avantages et bonnes pratiques

目次

1. Introduction

Lorsque vous travaillez avec MySQL, une « table temporaire » est un moyen pratique de stocker et de traiter des données de façon temporaire. En utilisant des tables temporaires, vous pouvez retenir temporairement des données afin de réduire la charge des requêtes complexes et d’améliorer l’efficacité du traitement par lots.

Dans cet article, nous expliquerons ce que sont les tables temporaires MySQL, ainsi que leurs cas d’utilisation et leurs avantages en détail.

Qu’est‑ce qu’une table temporaire ?

Une table temporaire est une table qui n’est valide que pendant une session.
Contrairement aux tables ordinaires, elle n’est pas stockée de façon permanente dans la base de données, et elle est automatiquement supprimée à la fin de la session.

Les caractéristiques principales des tables temporaires sont les suivantes :

  • Elles existent par session (non accessibles depuis d’autres connexions)
  • Elles sont automatiquement supprimées à la fin de la session
  • Elles peuvent être utilisées sans interférer même si une table ordinaire du même nom existe
  • Elles sont souvent employées pour améliorer les performances

Les tables temporaires sont bien adaptées à l’analyse de données et au traitement temporaire, et elles sont couramment utilisées comme support pour le traitement par lots et les tâches d’agrégation.

Avantages de l’utilisation des tables temporaires

L’utilisation de tables temporaires peut rendre le traitement des données plus efficace. Voici trois avantages majeurs.

1. Améliorer les performances des requêtes

Lors du traitement de gros volumes de données, l’utilisation de multiples JOIN et sous‑requêtes peut rendre le traitement complexe et augmenter la charge de la base de données. Avec les tables temporaires, vous pouvez filtrer et stocker les données à l’avance, ce qui accélère l’exécution des requêtes.

2. Idéal pour le stockage temporaire de données

Dans le traitement par lots ou la transformation de données, il peut être nécessaire de stocker temporairement des données et d’effectuer les opérations requises. Les tables temporaires vous permettent de stocker les données temporairement et d’activer un traitement rapide en mémoire.

3. Protéger les données existantes

Manipuler directement les données de production est risqué. En utilisant des tables temporaires, vous pouvez traiter les données sans modifier les données de production et réduire le risque d’erreurs.

Résumé

Les tables temporaires MySQL sont un outil pratique pour le stockage et le traitement temporaire des données.

  • Elles sont limitées à la session et supprimées à la fin de celle‑ci
  • Elles sont utiles pour améliorer les performances et le traitement par lots
  • Elles permettent des opérations sûres sans modifier les données de production

2. Bases des tables temporaires

Les tables temporaires MySQL sont utilisées pour stocker des données temporairement, contrairement aux tables ordinaires. Dans cette section, nous expliquerons en détail les concepts de base des tables temporaires, y compris les « différences avec les tables ordinaires » et les « différences avec les tables temporaires internes ».

Différences entre les tables temporaires et les tables ordinaires

Les tables temporaires et les tables ordinaires diffèrent sensiblement en rétention des données et comportement d’accès. Le tableau ci‑dessous résume les principales différences.

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)

Points clés

  • Les tables temporaires sont isolées par session et ne sont pas visibles par les autres utilisateurs.
  • Vous pouvez les créer sans erreur même si une table ordinaire du même nom existe.
  • Elles sont créées explicitement avec CREATE TEMPORARY TABLE et sont automatiquement supprimées à la fin de la session.

Différences entre les tables temporaires et les tables temporaires internes

En plus des tables temporaires créées par l’utilisateur, MySQL crée également des tables temporaires internes automatiquement. Elles peuvent sembler similaires, mais leurs objectifs et leur gestion diffèrent.

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

Qu’est‑ce qu’une table temporaire interne ?

  • MySQL peut créer automatiquement des tables temporaires internes pour optimiser certaines requêtes (telles que GROUP BY, ORDER BY, DISTINCT).
  • Les utilisateurs finaux ne peuvent pas les gérer directement (vous ne pouvez pas les créer explicitement comme CREATE TEMPORARY TABLE).
  • Elles sont créées au besoin pendant l’exécution de la requête et sont automatiquement supprimées à la fin de la requête.

Exemple pouvant déclencher des tables temporaires internes

Lorsque vous exécutez une requête comme celle‑ci-dessous, MySQL peut créer une table temporaire interne pour la traiter.

SELECT category, COUNT(*) 
FROM products 
GROUP BY category
ORDER BY COUNT(*) DESC;

Dans ce cas, MySQL peut créer une table temporaire interne pour stocker temporairement les résultats du GROUP BY,
et l’utiliser ensuite pour calculer le résultat final.

Summary

  • Une table temporaire est une table temporaire créée par l’utilisateur qui est automatiquement supprimée à la fin de la session.
  • Contrairement aux tables normales, elle ne peut pas être accédée depuis d’autres sessions.
  • Une table temporaire interne est créée et supprimée automatiquement par MySQL, et les utilisateurs ne peuvent pas la contrôler directement.

3. How to Create Temporary Tables

Vous pouvez créer une table temporaire MySQL en utilisant l’instruction CREATE TEMPORARY TABLE. Dans cette section, nous expliquons tout, de la création de base à la création d’une table à partir d’une table existante.

Basic way to create a temporary table

Dans MySQL, vous utilisez CREATE TEMPORARY TABLE pour créer une table temporaire.

Basic syntax

CREATE TEMPORARY TABLE table_name (
    column_name data_type constraints,
    column_name data_type constraints,
    ...
);

Exemple de code

Le SQL suivant crée une table temporaire nommée users_temp avec trois colonnes : id (entier), name (chaîne), et email (chaîne).

CREATE TEMPORARY TABLE users_temp (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

Comme cette table est automatiquement supprimée à la fin de la session, elle n’affecte pas la base de données persistante.

Create a temporary table based on an existing table

Au lieu de créer une table temporaire à partir de zéro, vous pouvez également copier la structure d’une table existante pour en créer une.

Utilisation de CREATE TEMPORARY TABLE ... SELECT

Dans MySQL, vous pouvez créer une table temporaire à partir du résultat d’une instruction SELECT.

Basic syntax

CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;

Exemple de code

Par exemple, pour copier la structure de données de la table users et créer une nouvelle table temporaire users_temp, vous pouvez écrire :

CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;

Avec cette méthode, la structure des colonnes de users est transférée à users_temp, mais les contraintes telles que PRIMARY KEY et INDEX ne sont pas copiées.

Si vous souhaitez copier uniquement la structure de la table sans inclure les données, ajoutez WHERE 1=0.

CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;

Avec ce SQL, les définitions de colonnes de users sont copiées, mais aucune donnée n’est incluse.

Notes when creating temporary tables

1. Les tables temporaires sont limitées à la session

  • Une table temporaire n’est valide que dans la session où elle a été créée.
  • Elle ne peut pas être accédée depuis d’autres connexions ou par d’autres utilisateurs.

2. Vous pouvez la créer même si une table normale du même nom existe

  • Par exemple, même s’il existe une table normale nommée users dans la base de données, vous pouvez créer une table temporaire nommée users .
  • Dans cette session, la table temporaire a la priorité et la table normale devient masquée.

3. Impact du moteur de stockage

  • Par défaut, les tables temporaires utilisent le moteur MEMORY, mais si la taille des données est importante, elles peuvent être stockées dans une zone temporaire InnoDB.
  • Si vous souhaitez spécifier explicitement le moteur MEMORY, écrivez-le ainsi : CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY;
  • Le moteur MEMORY est rapide mais possède des limites de taille de données. Pour de grands ensembles de données, envisagez d’utiliser InnoDB.

Summary

  • Créez des tables temporaires en utilisant CREATE TEMPORARY TABLE .
  • Vous pouvez également en créer une en copiant une table existante (SELECT * FROM ).
  • Le moteur MEMORY peut être rapide, mais InnoDB est souvent meilleur pour les grands ensembles de données.
  • Les tables temporaires sont gérées par session et sont automatiquement supprimées à la fin de la session .

4. How to Use Temporary Tables

MySQL temporary tables can be operated like regular tables, including INSERT, UPDATE, DELETE, and SELECT. In this section, we explain each operation in detail.

Inserting data

To add data to a temporary table, use the regular INSERT INTO statement.

Basic syntax

INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);

Sample code

The following SQL inserts data into a temporary table named users_temp.

INSERT INTO users_temp (id, name, email)
VALUES (1, 'Taro Yamada', 'taro@example.com');

You can also copy and insert data from an existing table.

INSERT INTO users_temp (id, name, email)
SELECT id, name, email FROM users WHERE age >= 18;

This SQL inserts data for users aged 18 or older from the users table into the temporary table.

Updating data

To modify data in a temporary table, use the regular UPDATE statement.

Basic syntax

UPDATE temp_table_name
SET column_name = new_value
WHERE condition;

Sample code

For example, to change the name of the user with id=1 in the users_temp table:

UPDATE users_temp
SET name = 'Ichiro Sato'
WHERE id = 1;

Deleting data

To delete unnecessary data, use the DELETE statement.

Basic syntax

DELETE FROM temp_table_name WHERE condition;

Sample code

For example, to delete the row with id=1 from users_temp:

DELETE FROM users_temp WHERE id = 1;

To delete all data in the table, omit the WHERE clause.

DELETE FROM users_temp;

Note that using DELETE does not drop the table itself; it deletes only the data.

Selecting data

To retrieve data stored in a temporary table, use the SELECT statement.

Basic syntax

SELECT column_name FROM temp_table_name WHERE condition;

Sample code

For example, to retrieve all data from users_temp:

SELECT * FROM users_temp;

To retrieve data matching a specific condition, use the WHERE clause.

SELECT * FROM users_temp WHERE email LIKE '%@example.com';

This SQL retrieves only rows where the email address contains @example.com.

Notes when using temporary tables

1. Data is removed when the session ends

  • Temporary tables are managed per session, and their data is also removed when the session ends.
  • For long-running processing, it is recommended to back up data periodically.

2. Creating a temporary table with the same name causes an error

  • If you try to create a temporary table with the same name using CREATE TEMPORARY TABLE, an error occurs.
  • As an error avoidance approach, run DROP TEMPORARY TABLE IF EXISTS beforehand. DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);

3. Storage engine constraints

  • Temporary tables default to the MEMORY engine, but large datasets may be automatically stored in an InnoDB temporary area.
  • For large datasets, using an InnoDB temporary table is recommended.

Summary

  • Temporary tables can perform INSERT, UPDATE, DELETE, and SELECT just like regular tables.
  • When the session ends, data in the temporary table is also automatically removed.
  • Running DROP TEMPORARY TABLE IF EXISTS beforehand helps avoid name-conflict errors.
  • For large datasets, using an InnoDB temporary table is recommended.

5. Managing and Dropping Temporary Tables

MySQL temporary tables are automatically dropped when the session ends. However, in some cases you may need to drop them explicitly. In this section, we explain how to manage and drop temporary tables.

How to drop a temporary table

To explicitly drop a temporary table, use the DROP TEMPORARY TABLE statement.

Basic syntax

DROP TEMPORARY TABLE table_name;

Sample code

Par exemple, pour supprimer une table temporaire nommée users_temp, exécutez :

DROP TEMPORARY TABLE users_temp;

Après avoir exécuté ce SQL, la table users_temp est supprimée et ne peut plus être utilisée dans la session.

Suppression automatique à la fin de la session

Une table temporaire est automatiquement supprimée lorsque la session se termine.

Comment fonctionne la suppression automatique

  1. Créez une table temporaire avec CREATE TEMPORARY TABLE
  2. Manipulez ses données tant que la session est active
  3. Lorsque la session (connexion) est fermée, la table temporaire est automatiquement supprimée

Cependant, faites attention aux cas suivants :

  • Lorsque les sessions restent ouvertes longtemps → Les tables temporaires inutiles peuvent consommer de la mémoire, il est donc recommandé d’exécuter DROP TEMPORARY TABLE au besoin.
  • Lors du traitement de grandes quantités de données → Pour éviter la pression sur le stockage, il est important de supprimer les tables de manière appropriée.

Utilisation de DROP TEMPORARY TABLE IF EXISTS

Pour éviter les erreurs lors de la suppression d’une table qui pourrait ne pas exister, vous pouvez utiliser IF EXISTS.

Syntaxe de base

DROP TEMPORARY TABLE IF EXISTS table_name;

Exemple de code

DROP TEMPORARY TABLE IF EXISTS users_temp;

Ce SQL supprime users_temp si elle existe ; si elle n’existe pas, aucune erreur ne sera levée.

Erreurs courantes et solutions

Erreur 1 : « Table non trouvée »

Quand cela se produit :

  • Lorsque vous essayez de supprimer une table qui n’existe pas avec DROP TEMPORARY TABLE
  • Parce que les tables temporaires sont limitées à la session, vous ne pouvez pas les supprimer depuis une autre session

Solution :

  • Ajoutez IF EXISTS pour éviter l’erreur
    DROP TEMPORARY TABLE IF EXISTS users_temp;
    
  • Supprimez‑la dans la session correcte

Erreur 2 : « Table déjà existante »

Quand cela se produit :

  • Lorsque vous essayez de créer une table temporaire avec un nom déjà existant

Solution :

  • Exécutez DROP TEMPORARY TABLE IF EXISTS au préalable
    DROP TEMPORARY TABLE IF EXISTS users_temp;
    CREATE TEMPORARY TABLE users_temp (
        id INT PRIMARY KEY,
        name VARCHAR(50),
        email VARCHAR(100)
    );
    

Bonnes pratiques pour gérer les tables temporaires

  1. Supprimez‑les explicitement lorsque vous n’en avez plus besoin
  • Exécutez DROP TEMPORARY TABLE au besoin pour libérer les tables inutiles.
  1. Utilisez IF EXISTS pour éviter les erreurs
  • DROP TEMPORARY TABLE IF EXISTS empêche les erreurs lors de la suppression d’une table qui n’existe pas.
  1. Soyez attentif à la gestion des sessions
  • Les sessions de longue durée peuvent faire consommer de la mémoire aux tables temporaires, il faut donc les supprimer de façon appropriée.
  1. Comprendre l’impact du moteur de stockage
  • Le moteur MEMORY est rapide mais possède des limites de taille de données.
  • Si vous utilisez InnoDB, vous devez prendre en compte l’utilisation de l’espace disque.

Résumé

  • Vous pouvez supprimer explicitement les tables temporaires avec DROP TEMPORARY TABLE.
  • Elles sont automatiquement supprimées à la fin de la session, mais pour les sessions de longue durée, un nettoyage manuel est recommandé.
  • DROP TEMPORARY TABLE IF EXISTS aide à prévenir les erreurs lors de la suppression.
  • Il est utile de savoir comment gérer les erreurs « Table non trouvée » et « Table déjà existante ».

6. Cas d’utilisation pratiques des tables temporaires

Les tables temporaires MySQL sont utilisées pour rendre le stockage et le traitement de données temporaires plus efficaces. Dans cette section, nous présentons des scénarios courants où les tables temporaires sont utiles et expliquons les détails d’implémentation.

1. Utilisation comme table intermédiaire pour l’agrégation

Dans l’analyse de données et la génération de rapports, le traitement direct de grands ensembles de données peut ralentir l’exécution des requêtes. En utilisant une table temporaire, vous pouvez d’abord organiser les données puis les traiter, ce qui améliore les performances.

Scénario

  • La table sales contient un an de données de ventes.
  • Vous souhaitez calculer les ventes totales mensuelles et effectuer une analyse supplémentaire.

Exemple d’implémentation

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;

-- Valider la transaction
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

  • Si vous ne spécifiez pas PRIMARY KEY ou INDEX dans CREATE TEMPORARY TABLE, ils ne sont pas créés automatiquement.
  • Si vous avez besoin d’index sur une table temporaire, vous devez les créer manuellement.

4. Le moteur de stockage par défaut est MEMORY

  • Avec le moteur MEMORY, de grandes tailles de données peuvent entraîner un échange vers le disque et réduire les performances.
  • Si vous spécifiez InnoDB, il peut gérer des données plus volumineuses, mais l’utilisation du disque augmente.

5. Non affecté par les transactions

  • Les tables temporaires ne sont pas affectées par ROLLBACK.
  • Par conséquent, elles ne conviennent pas aux traitements qui nécessitent une cohérence transactionnelle stricte.

Alternatives aux tables temporaires

Pour éviter ces limitations, vous pouvez utiliser des vues ou des sous‑requêtes à la place des tables temporaires pour une gestion des données plus flexible.

1. Utiliser une vue

Une vue peut être utilisée de manière similaire aux tables temporaires pour référencer des données temporaires. Une vue agit comme une table virtuelle et ne nécessite pas de stockage de données temporaires, ce qui aide à éviter les contraintes de stockage.

Créer une vue

CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;

Utiliser la vue

SELECT * FROM active_users;
Avantages d’utiliser une vue

Pas d’utilisation de stockage (les données sont référencées directement, pas besoin de les stocker temporairement)
Pas dépendant de la session (disponible pour d’autres utilisateurs et connexions)
Le schéma peut être conservé (vous pouvez revoir la définition avec SHOW CREATE VIEW)

Inconvénients d’utiliser une vue

Difficile à mettre à jour (les INSERT ou UPDATE directs sur une vue sont restreints)
Les performances peuvent se dégrader pour de grands ensembles de données

2. Utiliser une sous‑requête

Vous pouvez également utiliser une sous‑requête pour traiter des données temporaires sans créer de table temporaire.

Utiliser une table temporaire

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;

Utiliser une sous‑requête

SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Avantages d’utiliser une sous‑requête

Meilleures performances car vous ne créez pas de table temporaire
Pas d’utilisation de stockage
Pas dépendant de la session et peut être exécuté à tout moment

Inconvénients d’utiliser une sous‑requête

La lisibilité peut en souffrir pour des requêtes complexes
Difficile de réutiliser les données (vous pourriez avoir besoin de référencer les mêmes données à plusieurs reprises)

3. Utiliser un CTE (clause WITH)

Dans MySQL 8.0 et versions ultérieures, vous pouvez utiliser un CTE (Common Table Expression) pour gérer les données temporairement sans créer de table temporaire.

Exemple de CTE

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;
Avantages d’utiliser un CTE

Améliore la lisibilité (souvent plus facile à lire que les sous‑requêtes)
Peut optimiser les performances (traitement de type temporaire sans créer de table temporaire)

Inconvénients d’utiliser un CTE

Non disponible dans MySQL 5.x (supporté uniquement dans MySQL 8.0 et versions ultérieures)

Résumé

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

Voici les questions fréquemment posées sur les tables temporaires MySQL. Nous espérons que cela aidera à clarifier leur comportement et leurs limitations.

1. Les tables temporaires peuvent-elles être référencées depuis d’autres sessions ?

Non, elles ne le peuvent pas.
Une table temporaire est disponible uniquement dans la session où elle a été créée. Les autres sessions ne peuvent pas y accéder. Même si un autre utilisateur crée une table temporaire avec le même nom, chaque session la considère comme une table indépendante.

2. Quels privilèges sont requis pour créer des tables temporaires ?

Pour créer des tables temporaires, vous avez besoin du privilège CREATE TEMPORARY TABLES sur la base de données.
Pour accorder ce privilège à un utilisateur, exécutez le SQL suivant :

GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';

Vous pouvez également vérifier les privilèges actuels en utilisant SHOW GRANTS.

SHOW GRANTS FOR 'user_name'@'host';

3. Les tables temporaires affectent-elles l’utilisation du disque ?

Oui, elles le peuvent.
Par défaut, les tables temporaires MySQL utilisent le moteur MEMORY, mais lorsque la taille des données dépasse un certain seuil, elles sont stockées dans une zone temporaire InnoDB.

Lors du traitement de grands ensembles de données, les tables temporaires peuvent consommer de l’espace disque. Par conséquent, il est recommandé de les supprimer explicitement lorsqu’elles ne sont plus nécessaires.

DROP TEMPORARY TABLE IF EXISTS table_name;

Pour minimiser l’impact sur le disque, si vous prévoyez de gros volumes de données, envisagez de créer la table temporaire avec InnoDB plutôt qu’avec MEMORY.

CREATE TEMPORARY TABLE table_name (
    column1 data_type,
    column2 data_type
) ENGINE=InnoDB;

4. Quelle est la différence entre une table temporaire et une table temporaire interne ?

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. Les tables temporaires peuvent-elles être partagées entre threads ?

Non, elles ne le peuvent pas.
Une table temporaire est valide uniquement dans le thread (session) où elle a été créée, et elle ne peut pas être accédée depuis d’autres threads ou processus.

Si vous devez partager des données entre sessions/threads, vous devez créer une table normale à la place.

CREATE TABLE shared_temp_table (
    id INT PRIMARY KEY,
    data VARCHAR(255)
);

6. Les tables temporaires peuvent-elles réduire les performances ?

Oui, dans certains cas.
En particulier, soyez prudent dans les situations suivantes :

  • Lorsque le volume de données est trop important
  • Le moteur MEMORY a des limites de taille ; au-delà, les données peuvent basculer vers InnoDB, ce qui peut réduire les performances.
  • Atténuation : Si vous prévoyez de dépasser les limites de MEMORY, créez la table avec InnoDB dès le départ.
  • Lorsque les index appropriés ne sont pas définis
  • Les tables créées avec CREATE TEMPORARY TABLE ... SELECT ne copient pas les index, ce qui peut ralentir les recherches.
  • Atténuation : Ajoutez des index au besoin en utilisant ALTER TABLE.
    ALTER TABLE temp_table_name ADD INDEX (column_name);
    

7. Comment améliorer les performances des tables temporaires ?

Pour améliorer les performances des tables temporaires, les approches suivantes sont efficaces :

Utilisez le moteur MEMORY (rapide pour les petits ensembles de données)

CREATE TEMPORARY TABLE table_name (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MEMORY;

Sélectionnez uniquement les colonnes requises (omettez les colonnes inutiles)

CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;

Ajoutez des index appropriés (accélèrent les recherches)

ALTER TABLE users_temp ADD INDEX (name);

Supprimez-la dès que vous n’en avez plus besoin (libère de la mémoire)

DROP TEMPORARY TABLE IF EXISTS users_temp;

Résumé

  • Les tables temporaires ne peuvent pas être référencées depuis d’autres sessions ou threads
  • Vous avez besoin du privilège CREATE TEMPORARY TABLES pour les créer
  • Si les données deviennent trop volumineuses, MySQL peut passer de MEMORY à InnoDB, ce qui peut réduire les performances
  • Ajouter des index appropriés peut accélérer les requêtes
  • Supprimer les tables temporaires avec DROP TEMPORARY TABLE est recommandé lorsqu’elles ne sont plus nécessaires

Ceci complète une explication détaillée des tables temporaires MySQL, des concepts de base aux cas d’utilisation, limitations, alternatives et FAQ.
En utilisant les tables temporaires de manière appropriée, vous pouvez améliorer considérablement l’efficacité du traitement des données.