Tabelas Temporárias MySQL: Como Funcionam, Benefícios e Melhores Práticas

目次

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.

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)

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 TABLE e 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.

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

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 users no banco de dados, você pode criar uma tabela temporária chamada users.
  • 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ária InnoDB.
  • 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 usar InnoDB.

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 MEMORY pode ser rápido, mas InnoDB costuma 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 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

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

  1. Crie uma tabela temporária com CREATE TEMPORARY TABLE
  2. Operar em seus dados enquanto a sessão está ativa
  3. 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 TABLE conforme 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 EXISTS para evitar o erro
    DROP 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 EXISTS antes
    DROP 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

  1. Exclua-as explicitamente quando não precisar mais delas
  • Execute DROP TEMPORARY TABLE conforme necessário para liberar tabelas desnecessárias.
  1. Use IF EXISTS para evitar erros
  • DROP TEMPORARY TABLE IF EXISTS evita erros ao excluir uma tabela que não existe.
  1. 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.
  1. 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 EXISTS ajuda 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 sales conté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 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;

-- 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 KEY ou INDEX em CREATE 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

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

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?

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. 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 MEMORY tem limites de tamanho; além disso, os dados podem ser trocados para InnoDB , o que pode reduzir o desempenho .
  • Mitigação: Se você espera exceder os limites do MEMORY, crie a tabela com InnoDB desde o início.
  • Quando índices apropriados não estão definidos
  • Tabelas criadas com CREATE TEMPORARY TABLE ... SELECT nã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 TABLES para criá-las
  • Se os dados se tornarem muito grandes, o MySQL pode alternar de MEMORY para InnoDB, o que pode reduzir o desempenho
  • Adicionar índices adequados pode acelerar as consultas
  • É recomendado descartar tabelas temporárias com DROP TEMPORARY TABLE quando 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.