Conhecendo as tabelas temporárias do MySQL (internas e externas)

Tabelas temporárias

Como o nome indica, uma tabela temporária é uma tabela usada temporariamente para armazenar dados. É uma tabela construída em uma pasta temporária do sistema. Se usada corretamente, pode realizar várias operações como tabelas comuns.

Freqüentemente, usamos tabelas temporárias para armazenar conjuntos de resultados intermediários. Se você precisar realizar uma consulta que consome muitos recursos ou manipular tabelas grandes várias vezes, pode colocar os resultados intermediários ou pequenos subconjuntos em uma tabela temporária e, em seguida, consultar essas tabelas para melhorar a eficiência da consulta. As tabelas temporárias são adequadas principalmente para alguns cenários em que os dados precisam ser salvos temporariamente.

Em circunstâncias normais, as tabelas temporárias são geralmente criadas dinamicamente no aplicativo ou criadas pelo MySQL conforme necessário. As tabelas temporárias podem ser divididas em tabelas temporárias internas e tabelas temporárias externas.

Tabela temporária externa

Uma tabela temporária externa também pode ser chamada de tabela temporária de sessão.Esta tabela temporária é visível apenas para o usuário atual, e seus dados e estrutura da tabela são armazenados na memória. Depois que a sessão atual for interrompida ou encerrada, os dados na tabela de dados serão perdidos e o MySQL excluirá automaticamente a tabela e liberará seu espaço ocupado.
1) Crie
uma tabela temporária. É fácil criar uma tabela temporária. Adicione a palavra-chave TEMPORARY à instrução CREATE TABLE, conforme mostrado abaixo:

CREATE TEMPORARY TABLE <表名>...

A tabela temporária pode ser nomeada com o mesmo nome da tabela não temporária, mas após o mesmo nome, a tabela não temporária ficará invisível para a sessão atual até que a tabela temporária seja excluída.
2) Consultar
a tabela temporária Após a criação da tabela temporária , a execução do comando SHOW TABLES não listará a tabela temporária e não há informações da tabela temporária no banco de dados INFORMATION_SCHEMA.Isso não é um bug, mas o design é assim.

Podemos usar o seguinte comando para visualizar a tabela temporária:

SHOW CREATE TABLE <表名>; 

3) Exclua a tabela temporária
Obviamente, também podemos destruir manualmente a tabela temporária na sessão atual. A instrução SQL é a seguinte:

DROP TABLE <表名>;

Exemplo 1 A
seguir, criamos a tabela tmp_table e operamos nela.

mysql> CREATE TEMPORARY TABLE tmp_table (
    -> id INT NOT NULL,
    -> name VARCHAR(10) NOT NULL);
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW TABLES;
+-------------------+
| Tables_in_test    |
+-------------------+
| product           |
| product_price     |
| score             |
| student           |
| student_comment   |
| tb_student        |
| tb_student_course |
| tb_students_info  |
| tb_students_score |
| tb_usertest       |
+-------------------+
10 rows in set (0.01 sec)

mysql> SHOW CREATE TABLE tmp_table \G
*************************** 1. row ***************************
       Table: tmp_table
Create Table: CREATE TEMPORARY TABLE `tmp_table` (
  `id` int(11) NOT NULL,
  `name` varchar(10) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
1 row in set (0.00 sec)

mysql> DROP TABLE tmp_table;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW CREATE TABLE tmp_table \G
ERROR 1146 (42S02): Table 'test.tmp_table' doesn't exist

Se você sair da sessão atual do MySQL antes de executar o comando DROP TABLE, e então usar o comando SHOW CREATE TABLE para ler a tabela tmp_table, você descobrirá que a tabela não existe no banco de dados, porque a tabela temporária foi destruída quando você saia da sessão.

Existem também algumas restrições às tabelas temporárias externas. Preste atenção aos seguintes pontos ao usá-las:
1. A conta do banco de dados usada precisa ter permissão para criar e usar tabelas temporárias.
2. A mesma tabela temporária não pode ser associada duas vezes no mesma instrução SQL.
3. Não pode ser usado. RENAME para renomear uma tabela temporária, você pode usar ALTER TABLE.

Mesa temporária interna

Uma tabela temporária interna é uma tabela temporária leve especial, que é diferente de uma tabela temporária manual, que é criada automaticamente pelo MySQL. As tabelas temporárias podem ser usadas para armazenar os resultados intermediários de certas operações durante a execução do SQL. Este processo é concluído automaticamente pelo MySQL, e os usuários não podem intervir manualmente, e tais tabelas internas são invisíveis para os usuários.

Podemos usar EXPLAIN ou SHOW STATUS para verificar se o MySQL usa tabelas temporárias internas para ajudar a completar uma operação.

As tabelas temporárias internas desempenham um papel muito importante na otimização das instruções SQL. Muitas operações no MySQL dependem de tabelas temporárias internas para otimização. No entanto, o uso de tabelas temporárias internas requer o custo de criação de tabelas e acesso a dados intermediários, portanto, os usuários devem evitar o uso de tabelas temporárias ao escrever instruções SQL.

A seguir estão várias possibilidades para gerar tabelas temporárias internas:
1. Nem todas as colunas que usam ORDER BY / GROUP BY vêm da primeira tabela da conexão de tabela
2. Distinto e ORDER BY são usados ​​em combinação
3. A conexão de várias tabelas precisa ser salva conjuntos de resultados intermediários

Existem dois tipos de tabelas temporárias internas. Uma é uma tabela temporária HEAP. Todos os dados desta tabela temporária serão armazenados na memória. A operação desta tabela não requer operações de E / S; a outra é uma tabela temporária OnDisk, como o nome indica , essas tabelas temporárias armazenam dados no disco. As tabelas temporárias OnDisk são usadas para lidar com operações com resultados intermediários relativamente grandes.

As seguintes situações podem impedir que o MySQL use tabelas temporárias HEAP e, em vez disso, use tabelas temporárias OnDisk:

1. A tabela de dados contém colunas de campo do tipo BLOB ou TEXT;

2. Qualquer condição de GROUP BY ou DISTINCT contém colunas que excedem 512 bytes;

3. Se UNION ou UNION ALL for usado, e a coluna SELECT contiver quaisquer colunas que excedam 512 bytes;

4. Se o tamanho da tabela temporária HEAP for maior que o valor da variável de sistema MAX_HEAP_TABLE_SIZE, a tabela temporária HEAP será automaticamente convertida em uma tabela temporária OnDisk.

MySQL 5.7 版本中,OnDisk 临时表可以通过 INTERNAL_TMP_DISK_STORAGE_ENGINE 系统变量选择使用 MyISAM 引擎或者 InnoDB 引擎。
Created_tmp_tables 和 Created_tmp_disk_tables 变量用来记录所用临时表的数目。

Acho que você gosta

Origin blog.csdn.net/qq_36551991/article/details/111145516
Recomendado
Clasificación