Todos os produtos
Search
Central de documentação

PolarDB:Criar tabelas temporárias personalizadas em nós somente leitura

Última atualização: Jun 28, 2026

Quando a separação de leitura/gravação está ativada, criar tabelas temporárias e executar instruções DML (Data Manipulation Language) no nó primário aumenta a sua carga de trabalho. O PolarDB for MySQL permite criar e consultar tabelas temporárias em nós somente leitura, liberando o nó primário para operações intensivas de gravação. Para uma visão geral dos nós somente leitura, consulte Nó somente leitura global.

Como funciona

As tabelas temporárias armazenam resultados de consulta intermediários dentro de uma sessão, reduzindo varreduras de dados repetitivas e mantendo os dados isolados entre sessões concorrentes. Ao encerrar a sessão, a tabela e seus dados são removidos automaticamente.

Como o PolarProxy não roteia automaticamente a criação de tabelas temporárias e as operações DML subsequentes para o mesmo nó, você deve incluir uma dica SQL (/*force_node='pi-bpxxxxxxxx'*/) em cada instrução que acessa a tabela temporária. Sem a dica, a instrução segue para o nó primário, e qualquer instrução subsequente em um nó diferente falha com:

Table 'test.new_tbl' doesn't exist

Versões suportadas

O cluster deve executar uma das seguintes versões:

  • PolarDB for MySQL 5.7, versão de revisão 5.7.1.0.35 ou posterior

  • PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.28 ou posterior

  • PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.2.5 ou posterior

Limitações

RestriçãoDetalhe
Mecanismos suportados nos nós somente leituraApenas MEMORY ou MyISAM — InnoDB não é suportado.
Mecanismos suportados no nó primárioMEMORY ou InnoDB
Ciclo de vida da tabelaNível de sessão: a tabela e seus dados são removidos automaticamente ao encerrar a sessão
RoteamentoO PolarProxy não vincula uma sessão a um nó — inclua a dica /*force_node='...'*/ em cada instrução que cria ou acessa a tabela temporária

Pré-requisitos

Antes de começar, verifique se você tem:

Criar uma tabela temporária em um nó somente leitura

Inclua a dica /*force_node='pi-bpxxxxxxxx'*/ em cada instrução que cria ou acessa a tabela temporária. Substitua pi-bpxxxxxxxx pelo ID do nó somente leitura.

-- Create using MEMORY engine
/*force_node='pi-bpxxxxxxxx'*/ CREATE TEMPORARY TABLE new_tbl (c1 int PRIMARY KEY, c2 varchar(100)) ENGINE=MEMORY;

-- Create using MyISAM engine
/*force_node='pi-bpxxxxxxxx'*/ CREATE TEMPORARY TABLE new_tbl (c1 int PRIMARY KEY, c2 varchar(100)) ENGINE=MYISAM;

-- Create from an existing table (copies structure only)
/*force_node='pi-bpxxxxxxxx'*/ CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;

-- Insert data
/*force_node='pi-bpxxxxxxxx'*/ INSERT INTO new_tbl VALUES(1, 'test_string');

-- Query
/*force_node='pi-bpxxxxxxxx'*/ SELECT * FROM new_tbl;

Para verificar se a tabela temporária está acessível no nó somente leitura, conecte-se ao endpoint do cluster e execute as seguintes consultas:

mysql -u <user> -h test-4.xxx.polardb.aliyuncs.com -P3306 -p<pwd>
SELECT * FROM new_tbl;

Saída esperada:

+----+-------------+
| c1 | c2          |
+----+-------------+
|  1 | test_string |
+----+-------------+
1 row in set (0.07 sec)
SHOW CREATE TABLE new_tbl;

Saída esperada:

+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                          |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| new_tbl | CREATE TEMPORARY TABLE `new_tbl` (
  `c1` int(11) NOT NULL,
  `c2` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`c1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.08 sec)

Criar tabelas temporárias usando stored procedures (recomendado)

Para operações em lote, use uma stored procedure. Isso concentra toda a lógica de tabela temporária em uma unidade chamável e reduz a quantidade de instruções com dicas no código da aplicação.

  1. Crie a stored procedure usando o endpoint do cluster ou o nó primário.

    CREATE TABLE t1 (c1 int PRIMARY KEY, c2 varchar(100));
    INSERT INTO t1 VALUES(1, 'test_string');
    
    DELIMITER //;
    CREATE  PROCEDURE tmp_p0()
    BEGIN
    
    CREATE TEMPORARY TABLE IF NOT EXISTS tmp_table engine = MYISAM AS
    SELECT * FROM t1 limit 10;
    SELECT * FROM tmp_table;
    
    DROP TABLE tmp_table;
    
    END //;
    
    DELIMITER ;
  2. Execute a stored procedure no nó somente leitura de destino.

    /*force_node='pi-bpxxxxxxxx'*/ call tmp_p0();

Tópicos relacionados