- 1 1. Introduzione
- 2 2. Nozioni di base sulle tabelle temporanee
- 3 3. Come creare tabelle temporanee
- 4 4. Come utilizzare le tabelle temporanee
- 5 5. Gestione ed Eliminazione delle Tabelle Temporanee
- 6 6. Casi d’uso pratici per le tabelle temporanee
- 7 7. Alternatives and Limitations of Temporary Tables
- 7.1 Main limitations of temporary tables
- 7.2 Alternative alle tabelle temporanee
- 7.3 Riepilogo
- 8 8. FAQ
- 8.1 1. Le tabelle temporanee possono essere referenziate da altre sessioni?
- 8.2 2. Quali privilegi sono necessari per creare tabelle temporanee?
- 8.3 3. Le tabelle temporanee influenzano l’utilizzo del disco?
- 8.4 4. Qual è la differenza tra una tabella temporanea e una tabella temporanea interna?
- 8.5 5. Le tabelle temporanee possono essere condivise tra thread?
- 8.6 6. Le tabelle temporanee possono ridurre le prestazioni?
- 8.7 7. Come posso migliorare le prestazioni delle tabelle temporanee?
- 8.8 Riepilogo
1. Introduzione
Quando si lavora con MySQL, una “tabella temporanea” è un modo utile per memorizzare e elaborare i dati temporaneamente. Utilizzando le tabelle temporanee, è possibile tenere i dati in sospeso per ridurre il carico di query complesse e migliorare l’efficienza dell’elaborazione batch.
In questo articolo spiegheremo cosa sono le tabelle temporanee di MySQL, insieme ai loro casi d’uso e ai vantaggi in dettaglio.
Che cos’è una tabella temporanea?
Una tabella temporanea è una tabella valida solo all’interno di una sessione.
A differenza delle tabelle regolari, non è memorizzata in modo permanente nel database e viene eliminata automaticamente al termine della sessione.
Le caratteristiche principali delle tabelle temporanee sono le seguenti:
- Esistono per sessione (non accessibili da altre connessioni)
- Vengono eliminate automaticamente al termine della sessione
- Possono essere usate senza interferire anche se esiste una tabella regolare con lo stesso nome
- Sono spesso utilizzate per migliorare le prestazioni
Le tabelle temporanee sono adatte per l’analisi dei dati e l’elaborazione temporanea, e sono comunemente usate come supporto per l’elaborazione batch e le attività di aggregazione.
Vantaggi dell’uso delle tabelle temporanee
L’uso delle tabelle temporanee può rendere l’elaborazione dei dati più efficiente. Ecco tre vantaggi principali.
1. Migliorare le prestazioni delle query
Quando si gestiscono grandi quantità di dati, l’uso di più JOIN e sottoquery può rendere l’elaborazione complessa e aumentare il carico del database. Con le tabelle temporanee è possibile filtrare e memorizzare i dati in anticipo, accelerando l’esecuzione delle query.
2. Ideale per l’archiviazione temporanea dei dati
Nell’elaborazione batch o nella trasformazione dei dati, può essere necessario memorizzare i dati temporaneamente ed eseguire le operazioni necessarie. Le tabelle temporanee consentono di conservare i dati temporaneamente e permettono un’elaborazione veloce in memoria.
3. Mantenere al sicuro i dati esistenti
Manipolare direttamente i dati di produzione è rischioso. Utilizzando le tabelle temporanee, è possibile elaborare i dati senza modificare quelli di produzione e ridurre il rischio di errori.
Riepilogo
Le tabelle temporanee di MySQL sono uno strumento comodo per l’archiviazione e l’elaborazione temporanea dei dati.
- Sono limitate alla sessione e vengono eliminate al termine della sessione
- Sono utili per migliorare le prestazioni e per l’elaborazione batch
- Permettono operazioni sicure senza modificare i dati di produzione
2. Nozioni di base sulle tabelle temporanee
Le tabelle temporanee di MySQL sono usate per memorizzare i dati temporaneamente, a differenza delle tabelle regolari. In questa sezione spiegheremo i concetti di base delle tabelle temporanee in dettaglio, includendo le “differenze rispetto alle tabelle regolari” e le “differenze rispetto alle tabelle temporanee interne”.
Differenze tra tabelle temporanee e tabelle regolari
Le tabelle temporanee e le tabelle regolari differiscono notevolmente in riguardo alla conservazione dei dati e al comportamento di accesso. La tabella seguente riassume le principali differenze.
| 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) |
Punti chiave
- Le tabelle temporanee sono isolati per sessione e non sono visibili ad altri utenti.
- È possibile crearle senza errori anche se esiste una tabella regolare con lo stesso nome.
- Vengono create esplicitamente usando
CREATE TEMPORARY TABLEe sono eliminate automaticamente al termine della sessione.
Differenze tra tabelle temporanee e tabelle temporanee interne
Oltre alle tabelle temporanee create dall’utente, MySQL crea anche tabelle temporanee interne in modo automatico. Possono sembrare simili, ma i loro scopi e la loro gestione differiscono.
| 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 |
Che cos’è una tabella temporanea interna?
- MySQL può creare internamente tabelle temporanee per ottimizzare alcune query (come
GROUP BY,ORDER BY,DISTINCT). - Gli utenti finali non possono gestirle direttamente (non è possibile crearle esplicitamente con
CREATE TEMPORARY TABLE). - Vengono create secondo necessità durante l’esecuzione della query e sono eliminate automaticamente al completamento della query.
Esempio che può generare tabelle temporanee interne
Quando esegui una query come la seguente, MySQL può creare una tabella temporanea interna per elaborarla.
SELECT category, COUNT(*)
FROM products
GROUP BY category
ORDER BY COUNT(*) DESC;
In questo caso, MySQL può creare una tabella temporanea interna per memorizzare temporaneamente i risultati del GROUP BY,
e poi usarla per calcolare l’output finale.
Riepilogo
- Una tabella temporanea è una tabella temporanea creata dall’utente che viene eliminata automaticamente al termine della sessione.
- A differenza delle tabelle regolari, non può essere accessibile da altre sessioni .
- Una tabella temporanea interna è creata ed eliminata automaticamente da MySQL , e gli utenti non possono controllarla direttamente.

3. Come creare tabelle temporanee
È possibile creare una tabella temporanea MySQL utilizzando l’istruzione CREATE TEMPORARY TABLE. In questa sezione, spieghiamo tutto, dalla creazione di base alla creazione di una tabella basata su una tabella esistente.
Metodo base per creare una tabella temporanea
In MySQL, si utilizza CREATE TEMPORARY TABLE per creare una tabella temporanea.
Sintassi di base
CREATE TEMPORARY TABLE table_name (
column_name data_type constraints,
column_name data_type constraints,
...
);
Esempio di codice
Il seguente SQL crea una tabella temporanea chiamata users_temp con tre colonne: id (intero), name (stringa) e email (stringa).
CREATE TEMPORARY TABLE users_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
Poiché questa tabella viene eliminata automaticamente al termine della sessione, non influisce sul database persistente.
Creare una tabella temporanea basata su una tabella esistente
Invece di creare una tabella temporanea da zero, è anche possibile copiare la struttura di una tabella esistente per crearne una.
Utilizzando CREATE TEMPORARY TABLE ... SELECT
In MySQL, è possibile creare una tabella temporanea basata sul risultato di un’istruzione SELECT.
Sintassi di base
CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;
Esempio di codice
Ad esempio, per copiare la struttura dei dati della tabella users e creare una nuova tabella temporanea users_temp, è possibile scrivere:
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;
Con questo metodo, la struttura delle colonne di users viene trasferita a users_temp, ma vincoli come PRIMARY KEY e INDEX non vengono copiati.
Se si desidera copiare solo la struttura della tabella senza includere i dati, aggiungere WHERE 1=0.
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;
Con questo SQL, le definizioni delle colonne di users vengono copiate, ma non vengono inclusi dati.
Note sulla creazione di tabelle temporanee
1. Le tabelle temporanee sono limitate alla sessione
- Una tabella temporanea è valida solo all’interno della sessione in cui è stata creata.
- Non può essere accessibile da altre connessioni o da altri utenti.
2. È possibile crearla anche se esiste una tabella regolare con lo stesso nome
- Ad esempio, anche se nel database esiste una tabella regolare chiamata
users, è possibile creare una tabella temporanea chiamatausers. - In quella sessione, la tabella temporanea ha la precedenza e la tabella regolare diventa nascosta.
3. Impatto del motore di archiviazione
- Per impostazione predefinita, le tabelle temporanee utilizzano il motore
MEMORY, ma se la dimensione dei dati è grande, possono essere memorizzate in un’area temporaneaInnoDB. - Se si desidera specificare esplicitamente il motore
MEMORY, scriverlo così:CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY; - Il motore
MEMORYè veloce ma ha limiti di dimensione dei dati. Per grandi set di dati, considerare l’uso diInnoDB.
Riepilogo
- Creare tabelle temporanee usando
CREATE TEMPORARY TABLE. - È anche possibile crearne una copiando una tabella esistente (
SELECT * FROM). - Il motore
MEMORYpuò essere veloce, maInnoDBè spesso migliore per grandi set di dati. - Le tabelle temporanee sono gestite per sessione e sono eliminate automaticamente al termine della sessione.
4. Come utilizzare le tabelle temporanee
Le tabelle temporanee di MySQL possono essere utilizzate come tabelle normali, includendo INSERT, UPDATE, DELETE e SELECT. In questa sezione spieghiamo ogni operazione in dettaglio.
Inserimento di dati
Per aggiungere dati a una tabella temporanea, utilizza l’istruzione regolare INSERT INTO.
Sintassi di base
INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Esempio di codice
Il seguente SQL inserisce dati in una tabella temporanea denominata users_temp.
INSERT INTO users_temp (id, name, email)
VALUES (1, 'Taro Yamada', 'taro@example.com');
Puoi anche copiare e inserire dati da una tabella esistente.
INSERT INTO users_temp (id, name, email)
SELECT id, name, email FROM users WHERE age >= 18;
Questo SQL inserisce dati per utenti di età pari o superiore a 18 anni dalla tabella users nella tabella temporanea.
Aggiornamento di dati
Per modificare i dati in una tabella temporanea, utilizza l’istruzione regolare UPDATE.
Sintassi di base
UPDATE temp_table_name
SET column_name = new_value
WHERE condition;
Esempio di codice
Ad esempio, per cambiare il nome dell’utente con id=1 nella tabella users_temp:
UPDATE users_temp
SET name = 'Ichiro Sato'
WHERE id = 1;
Eliminazione di dati
Per eliminare dati non necessari, utilizza l’istruzione DELETE.
Sintassi di base
DELETE FROM temp_table_name WHERE condition;
Esempio di codice
Ad esempio, per eliminare la riga con id=1 da users_temp:
DELETE FROM users_temp WHERE id = 1;
Per eliminare tutti i dati nella tabella, ometti la clausola WHERE.
DELETE FROM users_temp;
Nota che l’uso di DELETE non elimina la tabella stessa; elimina solo i dati.
Selezione di dati
Per recuperare i dati memorizzati in una tabella temporanea, utilizza l’istruzione SELECT.
Sintassi di base
SELECT column_name FROM temp_table_name WHERE condition;
Esempio di codice
Ad esempio, per recuperare tutti i dati da users_temp:
SELECT * FROM users_temp;
Per recuperare dati che corrispondono a una condizione specifica, utilizza la clausola WHERE.
SELECT * FROM users_temp WHERE email LIKE '%@example.com';
Questo SQL recupera solo le righe in cui l’indirizzo email contiene @example.com.
Note sull’uso delle tabelle temporanee
1. I dati vengono rimossi al termine della sessione
- Le tabelle temporanee sono gestite per sessione, e i loro dati vengono anch’essi rimossi al termine della sessione.
- Per processi a lunga durata, è consigliato eseguire backup periodici dei dati.
2. Creare una tabella temporanea con lo stesso nome genera un errore
- Se provi a creare una tabella temporanea con lo stesso nome usando
CREATE TEMPORARY TABLE, si verifica un errore. - Come approccio per evitare errori, esegui prima
DROP TEMPORARY TABLE IF EXISTS.DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);
3. Vincoli del motore di archiviazione
- Le tabelle temporanee usano di default il motore
MEMORY, ma set di dati di grandi dimensioni possono essere automaticamente memorizzati in un’area temporaneaInnoDB. - Per set di dati di grandi dimensioni, è consigliato utilizzare una tabella temporanea
InnoDB.
Riepilogo
- Le tabelle temporanee possono eseguire INSERT, UPDATE, DELETE e SELECT proprio come le tabelle normali.
- Quando la sessione termina, i dati nella tabella temporanea vengono anch’essi rimossi automaticamente.
- Eseguire
DROP TEMPORARY TABLE IF EXISTSin anticipo aiuta a evitare errori di conflitto di nome. - Per set di dati di grandi dimensioni, è consigliato utilizzare una tabella temporanea
InnoDB.
5. Gestione ed Eliminazione delle Tabelle Temporanee
Le tabelle temporanee di MySQL vengono eliminate automaticamente al termine della sessione. Tuttavia, in alcuni casi potresti doverle eliminare esplicitamente. In questa sezione spieghiamo come gestire ed eliminare le tabelle temporanee.
Come eliminare una tabella temporanea
Per eliminare esplicitamente una tabella temporanea, utilizza l’istruzione DROP TEMPORARY TABLE.
Sintassi di base
DROP TEMPORARY TABLE table_name;
Esempio di codice
Ad esempio, per eliminare una tabella temporanea chiamata users_temp, esegui:
DROP TEMPORARY TABLE users_temp;
Dopo aver eseguito questo SQL, la tabella users_temp viene rimossa e non può più essere utilizzata nella sessione.
Eliminazione automatica alla fine della sessione
Una tabella temporanea viene eliminata automaticamente quando termina la sessione.
Come funziona l’eliminazione automatica
- Crea una tabella temporanea con
CREATE TEMPORARY TABLE - Opera sui suoi dati mentre la sessione è attiva
- Quando la sessione (connessione) viene chiusa, la tabella temporanea viene eliminata automaticamente
Tuttavia, fai attenzione nei seguenti casi:
- Quando le sessioni rimangono aperte per un lungo periodo → Le tabelle temporanee non necessarie possono consumare memoria, quindi è consigliato eseguire
DROP TEMPORARY TABLEquando necessario. - Quando si gestiscono grandi quantità di dati → Per evitare pressione sullo storage, è importante eliminare le tabelle in modo appropriato.
Utilizzo di DROP TEMPORARY TABLE IF EXISTS
Per evitare errori quando si elimina una tabella che potrebbe non esistere, è possibile utilizzare IF EXISTS.
Sintassi di base
DROP TEMPORARY TABLE IF EXISTS table_name;
Codice di esempio
DROP TEMPORARY TABLE IF EXISTS users_temp;
Questo SQL elimina users_temp se esiste; se non esiste, non genererà un errore.
Errori comuni e soluzioni
Errore 1: “Tabella non trovata”
Quando si verifica:
- Quando si tenta di eliminare una tabella che non esiste utilizzando
DROP TEMPORARY TABLE - Poiché le tabelle temporanee sono limitate alla sessione, non è possibile eliminarle da una sessione diversa
Soluzione:
- Aggiungi
IF EXISTSper evitare l’erroreDROP TEMPORARY TABLE IF EXISTS users_temp;
- Elimina all’interno della sessione corretta
Errore 2: “Tabella già esistente”
Quando si verifica:
- Quando si tenta di creare una tabella temporanea con un nome che esiste già
Soluzione:
- Esegui
DROP TEMPORARY TABLE IF EXISTSin anticipoDROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
Migliori pratiche per la gestione delle tabelle temporanee
- Eliminale esplicitamente quando non ne hai più bisogno
- Esegui
DROP TEMPORARY TABLEquando necessario per liberare tabelle non necessarie.
- Utilizza
IF EXISTSper evitare errori
DROP TEMPORARY TABLE IF EXISTSpreviene errori quando si elimina una tabella che non esiste.
- Sii consapevole della gestione delle sessioni
- Le sessioni a lunga durata possono causare il consumo di memoria da parte delle tabelle temporanee, quindi eliminale in modo appropriato.
- Comprendi l’impatto del motore di storage
- Il motore
MEMORYè veloce ma ha limiti sulla dimensione dei dati. - Se utilizzi
InnoDB, devi considerare l’utilizzo dello spazio su disco.
Riepilogo
- È possibile eliminare esplicitamente le tabelle temporanee utilizzando
DROP TEMPORARY TABLE. - Vengono eliminate automaticamente quando termina la sessione, ma per sessioni a lunga durata è consigliata una pulizia manuale.
DROP TEMPORARY TABLE IF EXISTSaiuta a prevenire errori durante l’eliminazione.- È utile sapere come gestire gli errori “Tabella non trovata” e “Tabella già esistente”.
6. Casi d’uso pratici per le tabelle temporanee
Le tabelle temporanee di MySQL vengono utilizzate per rendere più efficiente l’archiviazione e l’elaborazione temporanea dei dati. In questa sezione, introduciamo scenari comuni in cui le tabelle temporanee sono utili e spieghiamo i dettagli di implementazione.
1. Utilizzo come tabella intermedia per l’aggregazione
Nell’analisi dei dati e nella generazione di report, l’elaborazione diretta di grandi dataset può rallentare l’esecuzione delle query. Utilizzando una tabella temporanea, puoi organizzare prima i dati e poi elaborarli, migliorando le prestazioni.
Scenario
- La tabella
salescontiene un anno di dati di vendita. - Vuoi calcolare il totale delle vendite mensili e eseguire ulteriori analisi.
Esempio di implementazione
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;
-- Conferma la transazione
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
- Se non specifichi
PRIMARY KEYoINDEXinCREATE TEMPORARY TABLE, non vengono creati automaticamente. - Se hai bisogno di indici su una tabella temporanea, devi crearli manualmente.
4. Il motore di archiviazione predefinito è MEMORY
- Con il motore
MEMORY, grandi dimensioni dei dati possono causare lo swapping su disco e ridurre le prestazioni. - Se specifichi
InnoDB, può gestire dati più grandi, ma l’uso del disco aumenta.
5. Non influenzato dalle transazioni
- Le tabelle temporanee non sono influenzate da
ROLLBACK. - Pertanto, non sono adatte a elaborazioni che richiedono una coerenza transazionale rigorosa.
Alternative alle tabelle temporanee
Per evitare queste limitazioni, puoi utilizzare viste o sottoquery al posto delle tabelle temporanee per una gestione dei dati più flessibile.
1. Usa una vista
Una vista può essere usata in modo simile alle tabelle temporanee per riferire dati temporanei. Una vista agisce come una tabella virtuale e non richiede l’archiviazione temporanea dei dati, il che aiuta a evitare vincoli di spazio.
Crea una vista
CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;
Usa la vista
SELECT * FROM active_users;
Pro dell’utilizzo di una vista
✅ Nessun utilizzo di spazio (i dati sono referenziati direttamente, non è necessario archiviarli temporaneamente)
✅ Non dipendente dalla sessione (disponibile per altri utenti e connessioni)
✅ Lo schema può essere conservato (puoi rivedere la definizione con SHOW CREATE VIEW)
Contro dell’utilizzo di una vista
❌ Difficile da aggiornare (l’INSERT o l’UPDATE diretto su una vista è limitato)
❌ Le prestazioni possono degradarsi con dataset di grandi dimensioni
2. Usa una sottoquery
Puoi anche usare una sottoquery per elaborare dati temporanei senza creare una tabella temporanea.
Utilizzo di una tabella temporanea
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;
Utilizzo di una sottoquery
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Pro dell’utilizzo di una sottoquery
✅ Migliori prestazioni perché non crei una tabella temporanea
✅ Nessun utilizzo di spazio
✅ Non dipendente dalla sessione e può essere eseguita in qualsiasi momento
Contro dell’utilizzo di una sottoquery
❌ La leggibilità può risentire con query complesse
❌ Difficile riutilizzare i dati (potresti dover referenziare gli stessi dati più volte)
3. Usa una CTE (clausola WITH)
In MySQL 8.0 e versioni successive, puoi usare una CTE (Common Table Expression) per gestire i dati temporaneamente senza creare una tabella temporanea.
Esempio di 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;
Pro dell’utilizzo di una CTE
✅ Migliora la leggibilità (spesso più facile da leggere rispetto alle sottoquery)
✅ Può ottimizzare le prestazioni (elaborazione in stile temporaneo senza creare una tabella temporanea)
Contro dell’utilizzo di una CTE
❌ Non disponibile in MySQL 5.x (supportata solo in MySQL 8.0 e versioni successive)
Riepilogo
| 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
Ecco le domande frequenti sulle tabelle temporanee MySQL. Speriamo che questo aiuti a chiarire come si comportano e quali limitazioni hanno.
1. Le tabelle temporanee possono essere referenziate da altre sessioni?
No, non possono.
Una tabella temporanea è disponibile solo nella sessione in cui è stata creata. Altre sessioni non possono accedervi. Anche se un altro utente crea una tabella temporanea con lo stesso nome, ogni sessione la tratta come una tabella indipendente.
2. Quali privilegi sono necessari per creare tabelle temporanee?
Per creare tabelle temporanee, è necessario il privilegio CREATE TEMPORARY TABLES sul database.
Per concedere il privilegio a un utente, eseguire il seguente SQL:
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';
È possibile controllare anche i privilegi correnti utilizzando SHOW GRANTS.
SHOW GRANTS FOR 'user_name'@'host';
3. Le tabelle temporanee influenzano l’utilizzo del disco?
Sì, possono.
Per impostazione predefinita, le tabelle temporanee di MySQL utilizzano il motore MEMORY, ma quando la dimensione dei dati supera una certa soglia, vengono memorizzate in un’area temporanea InnoDB.
Quando si lavora con grandi set di dati, le tabelle temporanee possono consumare spazio su disco. Pertanto, si consiglia di eliminarle esplicitamente quando non sono più necessarie.
DROP TEMPORARY TABLE IF EXISTS table_name;
Per minimizzare l’impatto sul disco, se si prevedono grandi volumi di dati, considerare la creazione della tabella temporanea con InnoDB invece di MEMORY.
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type
) ENGINE=InnoDB;
4. Qual è la differenza tra una tabella temporanea e una tabella temporanea interna?
| 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. Le tabelle temporanee possono essere condivise tra thread?
No, non possono.
Una tabella temporanea è valida solo all’interno del thread (sessione) in cui è stata creata e non può essere accessibile da altri thread o processi.
Se è necessario condividere dati tra sessioni/thread, è necessario creare una tabella regolare invece.
CREATE TABLE shared_temp_table (
id INT PRIMARY KEY,
data VARCHAR(255)
);
6. Le tabelle temporanee possono ridurre le prestazioni?
Sì, in alcuni casi.
In particolare, prestare attenzione nelle seguenti situazioni:
- Quando il volume di dati è troppo grande
- Il motore
MEMORYha limiti di dimensione; oltre a ciò, i dati possono passare aInnoDB, il che può ridurre le prestazioni . - Mitigazione: Se si prevede di superare i limiti
MEMORY, creare la tabella conInnoDBfin dall’inizio. - Quando non sono impostati indici appropriati
- Le tabelle create con
CREATE TEMPORARY TABLE ... SELECTnon copiano gli indici , quindi le ricerche possono diventare più lente. - Mitigazione: Aggiungere indici se necessario utilizzando
ALTER TABLE.ALTER TABLE temp_table_name ADD INDEX (column_name);
7. Come posso migliorare le prestazioni delle tabelle temporanee?
Per migliorare le prestazioni delle tabelle temporanee, i seguenti approcci sono efficaci:
✅ Utilizzare il motore MEMORY (veloce per piccoli set di dati)
CREATE TEMPORARY TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
✅ Selezionare solo le colonne richieste (omettere colonne non necessarie)
CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;
✅ Aggiungere indici appropriati (accelerare le ricerche)
ALTER TABLE users_temp ADD INDEX (name);
✅ Eliminare il prima possibile quando non è più necessario (liberare memoria)
DROP TEMPORARY TABLE IF EXISTS users_temp;
Riepilogo
- Le tabelle temporanee non possono essere referenziate da altre sessioni o thread
- È necessario il privilegio
CREATE TEMPORARY TABLESper crearle - Se i dati diventano troppo grandi, MySQL può passare da
MEMORYaInnoDB, il che può ridurre le prestazioni - Aggiungere indici appropriati può accelerare le query
- Eliminare le tabelle temporanee con
DROP TEMPORARY TABLEè raccomandato quando non sono più necessarie
Questo completa una spiegazione dettagliata delle tabelle temporanee di MySQL, dai concetti base ai casi d’uso, limitazioni, alternative e FAQ.
Utilizzando appropriatamente le tabelle temporanee, è possibile migliorare significativamente l’efficienza dell’elaborazione dei dati.


