Todos los productos
Search
Centro de documentos

PolarDB:Crear tablas temporales personalizadas en nodos de solo lectura

Última actualización: Sep 05, 2026

Cuando se habilita la separación de lectura y escritura, crear tablas temporales y ejecutar instrucciones del lenguaje de manipulación de datos (DML) en el nodo primario aumenta su carga de trabajo. PolarDB for MySQL le permite crear y consultar tablas temporales directamente en los nodos de solo lectura. De esta manera, el nodo primario queda libre para las operaciones intensivas de escritura. Para obtener una descripción general de los nodos de solo lectura, consulte Global read-only node.

Cómo funciona

Las tablas temporales almacenan resultados intermedios de consultas dentro de una sesión. Esto reduce los escaneos repetitivos de datos y mantiene los datos aislados entre sesiones simultáneas. Cuando la sesión termina, la tabla y sus datos se eliminan automáticamente.

PolarProxy no enruta automáticamente la creación de tablas temporales ni las operaciones DML posteriores al mismo nodo. Por lo tanto, debe incluir un hint de SQL (/*force_node='pi-bpxxxxxxxx'*/) en cada instrucción que interactúe con la tabla temporal. Sin este hint, la instrucción se enruta al nodo primario y cualquier instrucción posterior en un nodo distinto falla con el siguiente mensaje:

Table 'test.new_tbl' doesn't exist

Versiones compatibles

Su clúster debe ejecutar una de a continuación versiones:

  • PolarDB for MySQL 5.7, versión de revisión 5.7.1.0.35 o posterior

  • PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.28 o posterior

  • PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.2.5 o posterior

Limitaciones

Restricción

Detalle

Motores compatibles en nodos de solo lectura

Solo MEMORY o MyISAM; InnoDB no es compatible.

Motores compatibles en el nodo primario

MEMORY o InnoDB

Ciclo de vida de la tabla

Nivel de sesión: la tabla y sus datos se eliminan automáticamente cuando la sesión termina.

Enrutamiento

PolarProxy no fija una sesión a un nodo específico. Incluya el hint /*force_node='...'*/ en cada instrucción que cree o acceda a la tabla temporal.

Requisitos previos

Antes de empezar, compruebe que cuenta con lo siguiente:

Crear una tabla temporal en un nodo de solo lectura

Incluya el hint /*force_node='pi-bpxxxxxxxx'*/ en cada instrucción que cree o acceda a la tabla temporal. Reemplace pi-bpxxxxxxxx con el identificador de su nodo de solo lectura.

-- 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 comprobar que la tabla temporal es accesible desde el nodo de solo lectura, conéctese al endpoint del clúster y ejecute a continuación consultas:

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

Salida esperada:

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

Salida 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)

Crear tablas temporales mediante procedimientos almacenados (recomendado)

Para operaciones por lotes, utilice un procedimiento almacenado. Esta práctica centraliza toda la lógica de la tabla temporal en una sola unidad invocable y reduce la cantidad de instrucciones con hints en el código de su aplicación.

  1. Cree el procedimiento almacenado mediante el endpoint del clúster o el nodo primario.

    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. Ejecute el procedimiento almacenado en el nodo de solo lectura de destino.

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

Temas relacionados