- 1 1. Introducción
- 2 2. Conceptos básicos de tablas temporales
- 3 3. Cómo crear tablas temporales
- 4 4. Cómo usar tablas temporales
- 5 5. Managing and Dropping Temporary Tables
- 6 6. Casos de uso prácticos de tablas temporales
- 7 7. Alternatives and Limitations of Temporary Tables
- 8 8. Preguntas frecuentes
- 8.1 1. ¿Se pueden referenciar las tablas temporales desde otras sesiones?
- 8.2 2. ¿Qué privilegios se requieren para crear tablas temporales?
- 8.3 3. ¿Afectan las tablas temporales al uso de disco?
- 8.4 4. ¿Cuál es la diferencia entre una tabla temporal y una tabla temporal interna?
- 8.5 5. ¿Pueden compartirse las tablas temporales entre hilos?
- 8.6 6. ¿Pueden las tablas temporales reducir el rendimiento?
- 8.7 7. ¿Cómo puedo mejorar el rendimiento de las tablas temporales?
- 8.8 Resumen
1. Introducción
Al trabajar con MySQL, una “tabla temporal” es una forma útil de almacenar y procesar datos de manera temporal. Al usar tablas temporales, puedes retener datos temporalmente para reducir la carga de consultas complejas y mejorar la eficiencia del procesamiento por lotes.
En este artículo explicaremos qué son las tablas temporales de MySQL, así como sus casos de uso y beneficios en detalle.
¿Qué es una tabla temporal?
Una tabla temporal es una tabla que solo es válida dentro de una sesión.
A diferencia de las tablas normales, no se almacena permanentemente en la base de datos y se elimina automáticamente cuando la sesión termina.
Las características clave de las tablas temporales son las siguientes:
- Existen por sesión (no son accesibles desde otras conexiones)
- Se eliminan automáticamente cuando la sesión termina
- Pueden usarse sin interferir aunque exista una tabla normal con el mismo nombre
- Se utilizan frecuentemente para mejorar el rendimiento
Las tablas temporales son idóneas para el análisis de datos y el procesamiento temporal de información, y se usan comúnmente como soporte para tareas de procesamiento por lotes y agregación.
Beneficios de usar tablas temporales
El uso de tablas temporales puede hacer que el procesamiento de datos sea más eficiente. Aquí tienes tres beneficios principales.
1. Mejorar el rendimiento de las consultas
Al manejar grandes volúmenes de datos, usar múltiples JOINs y subconsultas puede complicar el procesamiento y aumentar la carga de la base de datos. Con tablas temporales, puedes filtrar y almacenar datos con antelación, acelerando la ejecución de la consulta.
2. Ideal para el almacenamiento temporal de datos
En el procesamiento por lotes o la transformación de datos, puede ser necesario almacenar datos temporalmente y realizar operaciones necesarias. Las tablas temporales permiten almacenar datos de forma temporal y habilitan un procesamiento rápido en memoria.
3. Mantener seguros los datos existentes
Manipular directamente los datos de producción es arriesgado. Al usar tablas temporales, puedes procesar datos sin modificar los datos de producción y reducir el riesgo de errores.
Resumen
Las tablas temporales de MySQL son una herramienta práctica para el almacenamiento y procesamiento temporal de datos.
- Tienen alcance de sesión y se eliminan cuando la sesión termina
- Son útiles para mejoras de rendimiento y procesamiento por lotes
- Permiten operaciones seguras sin cambiar los datos de producción
2. Conceptos básicos de tablas temporales
Las tablas temporales de MySQL se utilizan para almacenar datos de forma temporal, a diferencia de las tablas normales. En esta sección explicaremos los conceptos básicos de las tablas temporales en detalle, incluyendo “diferencias con las tablas normales” y “diferencias con las tablas temporales internas”.
Diferencias entre tablas temporales y tablas normales
Las tablas temporales y las tablas normales difieren significativamente en retención de datos y comportamiento de acceso. La tabla a continuación resume las principales diferencias.
| 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) |
Puntos clave
- Las tablas temporales están aisladas por sesión y no son visibles para otros usuarios.
- Puedes crearlas sin error aunque exista una tabla normal con el mismo nombre.
- Se crean explícitamente mediante
CREATE TEMPORARY TABLEy se eliminan automáticamente cuando la sesión termina.
Diferencias entre tablas temporales y tablas temporales internas
Además de las tablas temporales creadas por el usuario, MySQL también crea tablas temporales internas de forma automática. Pueden sonar similares, pero sus propósitos y gestión difieren.
| 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 |
¿Qué es una tabla temporal interna?
- MySQL puede crear internamente tablas temporales para optimizar ciertas consultas (como
GROUP BY,ORDER BY,DISTINCT). - Los usuarios finales no pueden gestionarlas directamente (no puedes crear explícitamente una tabla interna como
CREATE TEMPORARY TABLE). - Se crean según sea necesario durante la ejecución de la consulta y se eliminan automáticamente cuando la consulta finaliza.
Ejemplo que puede generar tablas temporales internas
Cuando ejecutas una consulta como la siguiente, MySQL puede crear una tabla temporal interna para procesarla.
SELECT category, COUNT(*)
FROM products
GROUP BY category
ORDER BY COUNT(*) DESC;
En este caso, MySQL puede crear una tabla temporal interna para almacenar temporalmente los resultados de GROUP BY,
y luego usarla para calcular la salida final.
Resumen
- Una tabla temporal es una tabla temporal creada por el usuario que se elimina automáticamente cuando finaliza la sesión.
- A diferencia de las tablas regulares, no puede ser accedida desde otras sesiones .
- Una tabla temporal interna es creada y eliminada automáticamente por MySQL, y los usuarios no pueden controlarla directamente.

3. Cómo crear tablas temporales
Puedes crear una tabla temporal en MySQL usando la sentencia CREATE TEMPORARY TABLE. En esta sección, explicamos todo desde la creación básica hasta crear una basada en una tabla existente.
Forma básica de crear una tabla temporal
En MySQL, utilizas CREATE TEMPORARY TABLE para crear una tabla temporal.
Sintaxis básica
CREATE TEMPORARY TABLE table_name (
column_name data_type constraints,
column_name data_type constraints,
...
);
Código de ejemplo
El siguiente SQL crea una tabla temporal llamada users_temp con tres columnas: id (entero), name (cadena) y email (cadena).
CREATE TEMPORARY TABLE users_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
Debido a que esta tabla se elimina automáticamente cuando finaliza la sesión, no afecta a la base de datos persistente.
Crear una tabla temporal basada en una tabla existente
En lugar de crear una tabla temporal desde cero, también puedes copiar la estructura de una tabla existente para crear una.
Usando CREATE TEMPORARY TABLE ... SELECT
En MySQL, puedes crear una tabla temporal basada en el resultado de una sentencia SELECT.
Sintaxis básica
CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;
Código de ejemplo
Por ejemplo, para copiar la estructura de datos de la tabla users y crear una nueva tabla temporal users_temp, puedes escribir:
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;
Con este método, la estructura de columnas de users se traslada a users_temp, pero las restricciones como PRIMARY KEY e INDEX no se copian.
Si deseas copiar solo la estructura de la tabla sin incluir datos, agrega WHERE 1=0.
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;
Con este SQL, se copian las definiciones de columnas de users, pero no se incluyen datos.
Notas al crear tablas temporales
1. Las tablas temporales están limitadas a la sesión
- Una tabla temporal es válida solo dentro de la sesión en la que se creó.
- No puede ser accedida desde otras conexiones o por otros usuarios.
2. Puedes crearla incluso si ya existe una tabla regular con el mismo nombre
- Por ejemplo, aunque exista una tabla regular llamada
usersen la base de datos, puedes crear una tabla temporal llamadausers. - En esa sesión, la tabla temporal tiene prioridad y la tabla regular queda oculta.
3. Impacto del motor de almacenamiento
- Por defecto, las tablas temporales usan el motor
MEMORY, pero si el tamaño de los datos es grande, pueden almacenarse en un área temporalInnoDB. - Si deseas especificar explícitamente el motor
MEMORY, escríbelo así:CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY; - El motor
MEMORYes rápido pero tiene límites de tamaño de datos. Para conjuntos de datos grandes, considera usarInnoDB.
Resumen
- Crea tablas temporales usando
CREATE TEMPORARY TABLE. - También puedes crear una copiando una tabla existente (
SELECT * FROM). - El motor
MEMORYpuede ser rápido, peroInnoDBsuele ser mejor para conjuntos de datos grandes. - Las tablas temporales se gestionan por sesión y se eliminan automáticamente cuando la sesión finaliza.
4. Cómo usar tablas temporales
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 EXISTSbeforehand.DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);
3. Storage engine constraints
- Temporary tables default to the
MEMORYengine, but large datasets may be automatically stored in anInnoDBtemporary area. - For large datasets, using an
InnoDBtemporary 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 EXISTSbeforehand helps avoid name‑conflict errors. - For large datasets, using an
InnoDBtemporary 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
Por ejemplo, para eliminar una tabla temporal llamada users_temp, ejecute:
DROP TEMPORARY TABLE users_temp;
Después de ejecutar este SQL, la tabla users_temp se elimina y ya no puede ser utilizada en la sesión.
Eliminación automática al finalizar la sesión
Una tabla temporal se elimina automáticamente cuando la sesión termina.
Cómo funciona la eliminación automática
- Cree una tabla temporal con
CREATE TEMPORARY TABLE - Trabaje con sus datos mientras la sesión está activa
- Cuando la sesión (conexión) se cierra, la tabla temporal se elimina automáticamente
Sin embargo, tenga cuidado en los siguientes casos:
- Cuando las sesiones permanecen abiertas durante mucho tiempo → Las tablas temporales innecesarias pueden consumir memoria, por lo que se recomienda ejecutar
DROP TEMPORARY TABLEsegún sea necesario. - Al manejar grandes cantidades de datos → Para evitar presión de almacenamiento, es importante eliminar las tablas de forma adecuada.
Uso de DROP TEMPORARY TABLE IF EXISTS
Para evitar errores al eliminar una tabla que podría no existir, puede usar IF EXISTS.
Sintaxis básica
DROP TEMPORARY TABLE IF EXISTS table_name;
Código de ejemplo
DROP TEMPORARY TABLE IF EXISTS users_temp;
Este SQL elimina users_temp si existe; si no existe, no generará un error.
Errores comunes y soluciones
Error 1: “Tabla no encontrada”
Cuando ocurre:
- Cuando intentas eliminar una tabla que no existe usando
DROP TEMPORARY TABLE - Debido a que las tablas temporales están limitadas a la sesión, no puedes eliminarlas desde una sesión diferente
Solución:
- Añade
IF EXISTSpara evitar el errorDROP TEMPORARY TABLE IF EXISTS users_temp;
- Elimínala dentro de la sesión correcta
Error 2: “La tabla ya existe”
Cuando ocurre:
- Cuando intentas crear una tabla temporal con un nombre que ya existe
Solución:
- Ejecuta
DROP TEMPORARY TABLE IF EXISTSpreviamenteDROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
Mejores prácticas para gestionar tablas temporales
- Elimínalas explícitamente cuando ya no las necesites * Ejecuta
DROP TEMPORARY TABLEsegún sea necesario para liberar tablas innecesarias. - Usa
IF EXISTSpara evitar errores *DROP TEMPORARY TABLE IF EXISTSevita errores al eliminar una tabla que no existe. - Ten en cuenta la gestión de sesiones * Las sesiones de larga duración pueden hacer que las tablas temporales consuman memoria, por lo que debes eliminarlas según corresponda.
- Comprende el impacto del motor de almacenamiento * El motor
MEMORYes rápido pero tiene límites de tamaño de datos. * Si utilizasInnoDB, debes considerar el uso de espacio en disco.
Resumen
- Puedes eliminar explícitamente tablas temporales usando
DROP TEMPORARY TABLE. - Se eliminan automáticamente cuando la sesión termina, pero para sesiones de larga duración se recomienda una limpieza manual.
DROP TEMPORARY TABLE IF EXISTSayuda a prevenir errores al eliminar.- Es útil saber cómo manejar los errores “Tabla no encontrada” y “La tabla ya existe”.
6. Casos de uso prácticos de tablas temporales
Las tablas temporales de MySQL se utilizan para hacer que el almacenamiento y procesamiento de datos temporales sea más eficiente. En esta sección, presentamos escenarios comunes donde las tablas temporales son útiles y explicamos los detalles de implementación.
1. Uso como tabla intermedia para agregación
En el análisis de datos y la generación de informes, procesar conjuntos de datos grandes directamente puede ralentizar la ejecución de consultas. Al usar una tabla temporal, puedes organizar los datos primero y luego procesarlos, mejorando el rendimiento.
Escenario
- La tabla
salescontiene un año de datos de ventas. - Quieres calcular las ventas totales mensuales y realizar un análisis adicional.
Implementación de ejemplo
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;
-- Confirmar la transacción
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 no especificas
PRIMARY KEYoINDEXenCREATE TEMPORARY TABLE, no se crean automáticamente. - Si necesitas índices en una tabla temporal, debes crearlos manualmente.
4. El motor de almacenamiento predeterminado es MEMORY
- Con el motor
MEMORY, los tamaños de datos grandes pueden provocar intercambio a disco y reducir el rendimiento. - Si especificas
InnoDB, puede manejar datos más grandes, pero el uso de disco aumenta.
5. No afecta a las transacciones
- Las tablas temporales no se ven afectadas por
ROLLBACK. - Por lo tanto, no son adecuadas para procesos que requieren una consistencia transaccional estricta.
Alternativas a las tablas temporales
Para evitar estas limitaciones, puedes usar vistas o subconsultas en lugar de tablas temporales para un manejo de datos más flexible.
1. Usar una vista
Una vista puede usarse de manera similar a las tablas temporales para referenciar datos temporales. Una vista actúa como una tabla virtual y no requiere almacenamiento de datos temporales, lo que ayuda a evitar restricciones de almacenamiento.
Crear una vista
CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;
Usar la vista
SELECT * FROM active_users;
Ventajas de usar una vista
✅ Sin uso de almacenamiento (los datos se referencian directamente, sin necesidad de almacenarlos temporalmente)
✅ No depende de la sesión (disponible para otros usuarios y conexiones)
✅ El esquema puede conservarse (puedes revisar la definición con SHOW CREATE VIEW)
Desventajas de usar una vista
❌ Difícil de actualizar (el INSERT o UPDATE directo en una vista está restringido)
❌ El rendimiento puede degradarse con conjuntos de datos grandes
2. Usar una subconsulta
También puedes usar una subconsulta para procesar datos temporales sin crear una tabla temporal.
Usando una tabla temporal
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;
Usando una subconsulta
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Ventajas de usar una subconsulta
✅ Mejor rendimiento porque no creas una tabla temporal
✅ Sin uso de almacenamiento
✅ No depende de la sesión y puede ejecutarse en cualquier momento
Desventajas de usar una subconsulta
❌ La legibilidad puede verse afectada en consultas complejas
❌ Difícil de reutilizar datos (puede que necesites referenciar los mismos datos repetidamente)
3. Usar un CTE (cláusula WITH)
En MySQL 8.0 y posteriores, puedes usar un CTE (Expresión de Tabla Común) para manejar datos temporalmente sin crear una tabla temporal.
Ejemplo 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;
Ventajas de usar un CTE
✅ Mejora la legibilidad (a menudo más fácil de leer que las subconsultas)
✅ Puede optimizar el rendimiento (procesamiento estilo temporal sin crear una tabla temporal)
Desventajas de usar un CTE
❌ No disponible en MySQL 5.x (solo compatible con MySQL 8.0 y posteriores)
Resumen
| 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. Preguntas frecuentes
A continuación se presentan preguntas frecuentes sobre las tablas temporales de MySQL. Esperamos que esto ayude a aclarar su comportamiento y sus limitaciones.
1. ¿Se pueden referenciar las tablas temporales desde otras sesiones?
No, no pueden.
Una tabla temporal está disponible solo dentro de la sesión en la que se creó. Otras sesiones no pueden acceder a ella. Incluso si otro usuario crea una tabla temporal con el mismo nombre, cada sesión la trata como una tabla independiente.
2. ¿Qué privilegios se requieren para crear tablas temporales?
Para crear tablas temporales, necesitas el privilegio CREATE TEMPORARY TABLES en la base de datos.
Para otorgar el privilegio a un usuario, ejecuta el siguiente SQL:
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';
También puedes comprobar los privilegios actuales usando SHOW GRANTS.
SHOW GRANTS FOR 'user_name'@'host';
3. ¿Afectan las tablas temporales al uso de disco?
Sí, pueden hacerlo.
Por defecto, las tablas temporales de MySQL utilizan el motor MEMORY, pero cuando el tamaño de los datos supera un umbral determinado, se almacenan en un área temporal InnoDB.
Cuando se trabaja con conjuntos de datos grandes, las tablas temporales pueden consumir espacio en disco. Por lo tanto, se recomienda eliminarlas explícitamente cuando ya no se necesiten.
DROP TEMPORARY TABLE IF EXISTS table_name;
Para minimizar el impacto en disco, si esperas volúmenes de datos grandes, considera crear la tabla temporal con InnoDB en lugar de MEMORY.
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type
) ENGINE=InnoDB;
4. ¿Cuál es la diferencia entre una tabla temporal y una tabla temporal 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. ¿Pueden compartirse las tablas temporales entre hilos?
No, no pueden.
Una tabla temporal es válida solo dentro del hilo (sesión) donde se creó, y no puede ser accedida desde otros hilos o procesos.
Si necesitas compartir datos entre sesiones/hilos, debes crear una tabla regular en su lugar.
CREATE TABLE shared_temp_table (
id INT PRIMARY KEY,
data VARCHAR(255)
);
6. ¿Pueden las tablas temporales reducir el rendimiento?
Sí, en algunos casos.
En particular, ten cuidado en las siguientes situaciones:
- Cuando el volumen de datos es demasiado grande
- El motor
MEMORYtiene límites de tamaño; más allá de eso, los datos pueden pasar aInnoDB, lo que puede reducir el rendimiento. - Mitigación: Si esperas superar los límites de
MEMORY, crea la tabla conInnoDBdesde el principio. - Cuando no se establecen índices adecuados
- Las tablas creadas con
CREATE TEMPORARY TABLE ... SELECTno copian índices, por lo que las búsquedas pueden volverse más lentas. - Mitigación: Añade índices según sea necesario usando
ALTER TABLE.ALTER TABLE temp_table_name ADD INDEX (column_name);
7. ¿Cómo puedo mejorar el rendimiento de las tablas temporales?
Para mejorar el rendimiento de las tablas temporales, son efectivas las siguientes prácticas:
✅ Utiliza el motor MEMORY (rápido para conjuntos de datos pequeños)
CREATE TEMPORARY TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
✅ Selecciona solo las columnas requeridas (omitiendo columnas innecesarias)
CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;
✅ Añade índices apropiados (acelera las búsquedas)
ALTER TABLE users_temp ADD INDEX (name);
✅ Elimínala tan pronto como ya no la necesites (libera memoria)
DROP TEMPORARY TABLE IF EXISTS users_temp;
Resumen
- Las tablas temporales no pueden ser referenciadas desde otras sesiones o hilos
- Necesitas el privilegio
CREATE TEMPORARY TABLESpara crearlas - Si los datos se vuelven demasiado grandes, MySQL puede cambiar de
MEMORYaInnoDB, lo que puede reducir el rendimiento - Agregar índices adecuados puede acelerar las consultas
- Se recomienda eliminar las tablas temporales con
DROP TEMPORARY TABLEcuando ya no se necesiten
Esto completa una explicación detallada de las tablas temporales de MySQL, desde conceptos básicos hasta casos de uso, limitaciones, alternativas y preguntas frecuentes.
Al usar las tablas temporales de manera adecuada, puedes mejorar significativamente la eficiencia del procesamiento de datos.


