- 1 1. Introdução
- 2 2. Conceitos Básicos de Tabela Temporária
- 3 3. Como Criar Tabelas Temporárias
- 4 4. Como Usar Tabelas Temporárias
- 5 5. Managing and Dropping Temporary Tables
- 6 6. Casos de Uso Práticos para Tabelas Temporárias
- 7 7. Alternatives and Limitations of Temporary Tables
- 7.1 Main limitations of temporary tables
- 7.2 Alternativas às tabelas temporárias
- 7.3 Resumo
- 8 8. FAQ
- 8.1 1. As tabelas temporárias podem ser referenciadas por outras sessões?
- 8.2 2. Quais privilégios são necessários para criar tabelas temporárias?
- 8.3 3. As tabelas temporárias afetam o uso de disco?
- 8.4 4. Qual é a diferença entre uma tabela temporária e uma tabela temporária interna?
- 8.5 5. As tabelas temporárias podem ser compartilhadas entre threads?
- 8.6 6. As tabelas temporárias podem reduzir o desempenho?
- 8.7 7. Como posso melhorar o desempenho de tabelas temporárias?
- 8.8 Resumo
1. Introdução
Quando se trabalha com MySQL, uma “tabela temporária” é uma forma útil de armazenar e processar dados temporariamente. Ao usar tabelas temporárias, você pode manter dados temporariamente para reduzir a carga de consultas complexas e melhorar a eficiência do processamento em lote.
Neste artigo, explicaremos o que são as tabelas temporárias do MySQL, juntamente com seus casos de uso e benefícios em detalhes.
O que é uma Tabela Temporária?
Uma tabela temporária é uma tabela que é válida apenas dentro de uma sessão.
Ao contrário das tabelas regulares, ela não é armazenada permanentemente no banco de dados, e é removida automaticamente quando a sessão termina.
As principais características das tabelas temporárias são as seguintes:
- Elas existem por sessão (não acessíveis a outras conexões)
- São removidas automaticamente quando a sessão termina
- Podem ser usadas sem interferir mesmo que exista uma tabela regular com o mesmo nome
- São frequentemente usadas para melhorar o desempenho
As tabelas temporárias são adequadas para análise de dados e processamento temporário de dados, e são comumente usadas como suporte para processamento em lote e tarefas de agregação.
Benefícios de Usar Tabelas Temporárias
Usar tabelas temporárias pode tornar o processamento de dados mais eficiente. Aqui estão três principais benefícios.
1. Melhorar o desempenho das consultas
Ao lidar com grandes volumes de dados, usar múltiplos JOINs e subconsultas pode tornar o processamento complexo e aumentar a carga do banco de dados. Com tabelas temporárias, você pode filtrar e armazenar dados antecipadamente, acelerando a execução da consulta.
2. Ideal para armazenamento temporário de dados
No processamento em lote ou na transformação de dados, pode ser necessário armazenar dados temporariamente e executar as operações necessárias. As tabelas temporárias permitem armazenar dados temporariamente e possibilitam processamento rápido em memória.
3. Manter os dados existentes seguros
Manipular diretamente os dados de produção é arriscado. Ao usar tabelas temporárias, você pode processar dados sem alterar os dados de produção e reduzir o risco de erros.
Resumo
As tabelas temporárias do MySQL são uma ferramenta conveniente para armazenamento e processamento temporário de dados.
- Elas são limitadas à sessão e removidas quando a sessão termina
- São úteis para melhorias de desempenho e processamento em lote
- Permitem operações seguras sem alterar os dados de produção
2. Conceitos Básicos de Tabela Temporária
As tabelas temporárias do MySQL são usadas para armazenar dados temporariamente, ao contrário das tabelas regulares. Nesta seção, explicaremos os conceitos básicos das tabelas temporárias em detalhes, incluindo “diferenças em relação às tabelas regulares” e “diferenças em relação às tabelas temporárias internas.”
Diferenças entre Tabelas Temporárias e Tabelas Regulares
Tabelas temporárias e tabelas regulares diferem significativamente em retenção de dados e comportamento de acesso. A tabela abaixo resume as principais diferenças.
| 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) |
Pontos principais
- As tabelas temporárias são isoladas por sessão e não são visíveis para outros usuários.
- Você pode criá‑las sem erro mesmo que exista uma tabela regular com o mesmo nome.
- Elas são criadas explicitamente usando
CREATE TEMPORARY TABLEe são removidas automaticamente quando a sessão termina .
Diferenças entre Tabelas Temporárias e Tabelas Temporárias Internas
Além das tabelas temporárias criadas pelo usuário, o MySQL também cria tabelas temporárias internas automaticamente. Elas podem parecer semelhantes, mas seus propósitos e gerenciamento diferem.
| 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 |
O que é uma tabela temporária interna?
- O MySQL pode criar internamente tabelas temporárias para otimizar certas consultas (como
GROUP BY,ORDER BY,DISTINCT). - Os usuários finais não podem gerenciá‑las diretamente (não é possível criá‑las explicitamente como
CREATE TEMPORARY TABLE). - Elas são criadas conforme necessário durante a execução da consulta e são removidas automaticamente quando a consulta é concluída .
Exemplo que pode disparar tabelas temporárias internas
Quando você executa uma consulta como a seguinte, o MySQL pode criar uma tabela temporária interna para processá‑la.
SELECT category, COUNT(*)
FROM products
GROUP BY category
ORDER BY COUNT(*) DESC;
Neste caso, o MySQL pode criar uma tabela temporária interna para armazenar temporariamente os resultados do GROUP BY,
e então usá‑la para calcular a saída final.
Resumo
- Uma tabela temporária é uma tabela temporária criada pelo usuário que é descartada automaticamente quando a sessão termina.
- Ao contrário das tabelas regulares, ela não pode ser acessada por outras sessões .
- Uma tabela temporária interna é criada e descartada automaticamente pelo MySQL, e os usuários não podem controlá‑la diretamente.

3. Como Criar Tabelas Temporárias
Você pode criar uma tabela temporária no MySQL usando a instrução CREATE TEMPORARY TABLE. Nesta seção, explicamos tudo, desde a criação básica até a criação baseada em uma tabela existente.
Forma básica de criar uma tabela temporária
No MySQL, você usa CREATE TEMPORARY TABLE para criar uma tabela temporária.
Sintaxe básica
CREATE TEMPORARY TABLE table_name (
column_name data_type constraints,
column_name data_type constraints,
...
);
Código de exemplo
O SQL a seguir cria uma tabela temporária chamada users_temp com três colunas: id (inteiro), name (texto) e email (texto).
CREATE TEMPORARY TABLE users_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
Como esta tabela é descartada automaticamente quando a sessão termina, ela não afeta o banco de dados persistente.
Criar uma tabela temporária baseada em uma tabela existente
Em vez de criar uma tabela temporária do zero, você também pode copiar a estrutura de uma tabela existente para criar uma.
Usando CREATE TEMPORARY TABLE ... SELECT
No MySQL, você pode criar uma tabela temporária baseada no resultado de uma instrução SELECT.
Sintaxe básica
CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;
Código de exemplo
Por exemplo, para copiar a estrutura de dados da tabela users e criar uma nova tabela temporária users_temp, você pode escrever:
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;
Com este método, a estrutura de colunas de users é transferida para users_temp, mas restrições como PRIMARY KEY e INDEX não são copiadas.
Se você quiser copiar apenas a estrutura da tabela sem incluir os dados, adicione WHERE 1=0.
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;
Com este SQL, as definições de coluna de users são copiadas, mas nenhum dado é incluído.
Observações ao criar tabelas temporárias
1. Tabelas temporárias são limitadas à sessão
- Uma tabela temporária é válida somente dentro da sessão em que foi criada.
- Ela não pode ser acessada por outras conexões ou por outros usuários.
2. Você pode criá‑la mesmo que exista uma tabela regular com o mesmo nome
- Por exemplo, mesmo que exista uma tabela regular chamada
usersno banco de dados, você pode criar uma tabela temporária chamadausers. - Nessa sessão, a tabela temporária tem precedência e a tabela regular fica oculta.
3. Impacto do mecanismo de armazenamento
- Por padrão, tabelas temporárias usam o mecanismo
MEMORY, mas se o tamanho dos dados for grande, elas podem ser armazenadas em uma área temporáriaInnoDB. - Se quiser especificar explicitamente o mecanismo
MEMORY, escreva assim:CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY; - O mecanismo
MEMORYé rápido, mas tem limites de tamanho de dados. Para conjuntos de dados grandes, considere usarInnoDB.
Resumo
- Crie tabelas temporárias usando
CREATE TEMPORARY TABLE. - Você também pode criar uma a partir de uma tabela existente (
SELECT * FROM). - O mecanismo
MEMORYpode ser rápido, masInnoDBcostuma ser melhor para grandes volumes de dados. - Tabelas temporárias são gerenciadas por sessão e são descartadas automaticamente quando a sessão termina.
4. Como Usar Tabelas Temporárias
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 exemplo, para excluir uma tabela temporária chamada users_temp, execute:
DROP TEMPORARY TABLE users_temp;
Depois de executar este SQL, a tabela users_temp é removida e não pode mais ser usada na sessão.
Exclusão automática quando a sessão termina
Uma tabela temporária é excluída automaticamente quando a sessão termina.
Como funciona a exclusão automática
- Crie uma tabela temporária com
CREATE TEMPORARY TABLE - Operar em seus dados enquanto a sessão está ativa
- Quando a sessão (conexão) é fechada, a tabela temporária é excluída automaticamente
No entanto, tenha cuidado nos seguintes casos:
- Quando as sessões permanecem abertas por muito tempo → Tabelas temporárias desnecessárias podem consumir memória, portanto é recomendado executar
DROP TEMPORARY TABLEconforme necessário. - Ao lidar com grandes volumes de dados → Para evitar pressão de armazenamento, é importante excluir as tabelas adequadamente.
Usando DROP TEMPORARY TABLE IF EXISTS
Para evitar erros ao excluir uma tabela que pode não existir, você pode usar IF EXISTS.
Sintaxe básica
DROP TEMPORARY TABLE IF EXISTS table_name;
Código de exemplo
DROP TEMPORARY TABLE IF EXISTS users_temp;
Este SQL exclui users_temp se ela existir; se não existir, não gerará um erro.
Erros comuns e correções
Erro 1: “Tabela não encontrada”
Quando ocorre:
- Quando você tenta excluir uma tabela que não existe usando
DROP TEMPORARY TABLE - Como as tabelas temporárias são limitadas à sessão, você não pode excluí‑las de uma sessão diferente
Correção:
- Adicione
IF EXISTSpara evitar o erroDROP TEMPORARY TABLE IF EXISTS users_temp;
- Exclua-a na sessão correta
Erro 2: “Tabela já existe”
Quando ocorre:
- Quando você tenta criar uma tabela temporária com um nome que já existe
Correção:
- Execute
DROP TEMPORARY TABLE IF EXISTSantesDROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
Melhores práticas para gerenciar tabelas temporárias
- Exclua-as explicitamente quando não precisar mais delas
- Execute
DROP TEMPORARY TABLEconforme necessário para liberar tabelas desnecessárias.
- Use
IF EXISTSpara evitar erros
DROP TEMPORARY TABLE IF EXISTSevita erros ao excluir uma tabela que não existe.
- Esteja atento ao gerenciamento de sessões
- Sessões de longa duração podem fazer com que tabelas temporárias consumam memória, portanto exclua‑as conforme apropriado.
- Entenda o impacto do mecanismo de armazenamento
- O mecanismo
MEMORYé rápido, mas tem limites de tamanho de dados. - Se você usar
InnoDB, precisa considerar o uso de espaço em disco.
Resumo
- Você pode excluir explicitamente tabelas temporárias usando
DROP TEMPORARY TABLE. - Elas são excluídas automaticamente quando a sessão termina, mas para sessões de longa duração, recomenda‑se a limpeza manual.
DROP TEMPORARY TABLE IF EXISTSajuda a prevenir erros ao excluir.- É útil saber como lidar com os erros “Tabela não encontrada” e “Tabela já existe”.
6. Casos de Uso Práticos para Tabelas Temporárias
As tabelas temporárias do MySQL são usadas para tornar o armazenamento e o processamento de dados temporários mais eficientes. Nesta seção, apresentamos cenários comuns onde tabelas temporárias são úteis e explicamos detalhes de implementação.
1. Usando como tabela intermediária para agregação
Na análise de dados e geração de relatórios, processar grandes conjuntos de dados diretamente pode desacelerar a execução da consulta. Ao usar uma tabela temporária, você pode organizar os dados primeiro e depois processá‑los, melhorando o desempenho.
Cenário
- A tabela
salescontém um ano de dados de vendas. - Você deseja calcular as vendas totais mensais e realizar análises adicionais.
Implementação de exemplo
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 a transação
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 você não especificar
PRIMARY KEYouINDEXemCREATE TEMPORARY TABLE, eles não são criados automaticamente. - Se precisar de índices em uma tabela temporária, você deve criá‑los manualmente.
4. O mecanismo de armazenamento padrão é MEMORY
- Com o mecanismo
MEMORY, tamanhos grandes de dados podem causar troca para o disco e reduzir o desempenho. - Se você especificar
InnoDB, ele pode lidar com dados maiores, mas o uso de disco aumenta.
5. Não afetado por transações
- Tabelas temporárias não são afetadas por
ROLLBACK. - Portanto, elas não são adequadas para processos que exigem consistência transacional estrita.
Alternativas às tabelas temporárias
Para evitar essas limitações, você pode usar visualizações ou subconsultas em vez de tabelas temporárias para um manuseio de dados mais flexível.
1. Use uma visualização
Uma visualização pode ser usada de forma semelhante às tabelas temporárias para referenciar dados temporários. Uma visualização funciona como uma tabela virtual e não requer armazenamento de dados temporários, o que ajuda a evitar restrições de armazenamento.
Criar uma visualização
CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;
Usar a visualização
SELECT * FROM active_users;
Vantagens de usar uma visualização
✅ Sem uso de armazenamento (os dados são referenciados diretamente, sem necessidade de armazená‑los temporariamente)
✅ Não depende da sessão (disponível para outros usuários e conexões)
✅ O esquema pode ser mantido (você pode revisar a definição com SHOW CREATE VIEW)
Desvantagens de usar uma visualização
❌ Difícil de atualizar (INSERT ou UPDATE direto em uma visualização é restrito)
❌ O desempenho pode degradar em conjuntos de dados grandes
2. Use uma subconsulta
Você também pode usar uma subconsulta para processar dados temporários sem criar uma tabela temporária.
Usando uma tabela temporária
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 uma subconsulta
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Vantagens de usar uma subconsulta
✅ Melhor desempenho porque você não cria uma tabela temporária
✅ Sem uso de armazenamento
✅ Não depende da sessão e pode ser executada a qualquer momento
Desvantagens de usar uma subconsulta
❌ A legibilidade pode sofrer em consultas complexas
❌ Difícil reutilizar dados (você pode precisar referenciar os mesmos dados repetidamente)
3. Use um CTE (cláusula WITH)
No MySQL 8.0 e posteriores, você pode usar um CTE (Common Table Expression) para manipular dados temporariamente sem criar uma tabela temporária.
Exemplo 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;
Vantagens de usar um CTE
✅ Melhora a legibilidade (geralmente mais fácil de ler que subconsultas)
✅ Pode otimizar o desempenho (processamento estilo temporário sem criar uma tabela temporária)
Desvantagens de usar um CTE
❌ Não está disponível no MySQL 5.x (suportado apenas no MySQL 8.0 e posteriores)
Resumo
| 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
Aqui estão perguntas frequentes sobre tabelas temporárias do MySQL. Esperamos que isso ajude a esclarecer como elas se comportam e quais limitações possuem.
1. As tabelas temporárias podem ser referenciadas por outras sessões?
Não, não podem.
Uma tabela temporária está disponível apenas na sessão em que foi criada. Outras sessões não podem acessá‑la. Mesmo que outro usuário crie uma tabela temporária com o mesmo nome, cada sessão a trata como uma tabela independente.
2. Quais privilégios são necessários para criar tabelas temporárias?
Para criar tabelas temporárias, você precisa do privilégio CREATE TEMPORARY TABLES no banco de dados.
Para conceder o privilégio a um usuário, execute o seguinte SQL:
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';
Você também pode verificar os privilégios atuais usando SHOW GRANTS.
SHOW GRANTS FOR 'user_name'@'host';
3. As tabelas temporárias afetam o uso de disco?
Sim, elas podem.
Por padrão, as tabelas temporárias do MySQL usam o engine MEMORY, mas quando o tamanho dos dados excede um certo limite, elas são armazenadas em uma área temporária InnoDB.
Ao lidar com grandes conjuntos de dados, as tabelas temporárias podem consumir espaço em disco. Portanto, é recomendado descartá-las explicitamente quando não forem mais necessárias.
DROP TEMPORARY TABLE IF EXISTS table_name;
Para minimizar o impacto no disco, se você espera grandes volumes de dados, considere criar a tabela temporária com InnoDB em vez de MEMORY.
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type
) ENGINE=InnoDB;
4. Qual é a diferença entre uma tabela temporária e uma tabela temporária 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. As tabelas temporárias podem ser compartilhadas entre threads?
Não, elas não podem.
Uma tabela temporária é válida apenas dentro da thread (sessão) onde foi criada, e não pode ser acessada de outras threads ou processos.
Se você precisar compartilhar dados entre sessões/threads, deve criar uma tabela regular em vez disso.
CREATE TABLE shared_temp_table (
id INT PRIMARY KEY,
data VARCHAR(255)
);
6. As tabelas temporárias podem reduzir o desempenho?
Sim, em alguns casos.
Em particular, tenha cuidado nas seguintes situações:
- Quando o volume de dados é muito grande
- O engine
MEMORYtem limites de tamanho; além disso, os dados podem ser trocados paraInnoDB, o que pode reduzir o desempenho . - Mitigação: Se você espera exceder os limites do
MEMORY, crie a tabela comInnoDBdesde o início. - Quando índices apropriados não estão definidos
- Tabelas criadas com
CREATE TEMPORARY TABLE ... SELECTnão copiam índices , então as buscas podem se tornar mais lentas. - Mitigação: Adicione índices conforme necessário usando
ALTER TABLE.ALTER TABLE temp_table_name ADD INDEX (column_name);
7. Como posso melhorar o desempenho de tabelas temporárias?
Para melhorar o desempenho de tabelas temporárias, as seguintes abordagens são eficazes:
✅ Use o engine MEMORY (rápido para pequenos conjuntos de dados)
CREATE TEMPORARY TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
✅ Selecione apenas as colunas necessárias (omita colunas desnecessárias)
CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;
✅ Adicione índices apropriados (acelere as buscas)
ALTER TABLE users_temp ADD INDEX (name);
✅ Descartá-la assim que não precisar mais (libere memória)
DROP TEMPORARY TABLE IF EXISTS users_temp;
Resumo
- As tabelas temporárias não podem ser referenciadas de outras sessões ou threads
- Você precisa do privilégio
CREATE TEMPORARY TABLESpara criá-las - Se os dados se tornarem muito grandes, o MySQL pode alternar de
MEMORYparaInnoDB, o que pode reduzir o desempenho - Adicionar índices adequados pode acelerar as consultas
- É recomendado descartar tabelas temporárias com
DROP TEMPORARY TABLEquando não forem mais necessárias
Esta é uma explicação detalhada das tabelas temporárias do MySQL, desde conceitos básicos até casos de uso, limitações, alternativas e FAQs.
Ao usar tabelas temporárias de forma apropriada, você pode melhorar significativamente a eficiência do processamento de dados.


