Luché bastante con la sintaxis adecuada para CREATE TEMPORARY TABLE SELECT. Habiendo descubierto algunas cosas, quería compartir las respuestas con el resto de la comunidad.
La información básica sobre la declaración está disponible en los siguientes enlaces de MySQL:
CREAR TABLA SELECCIONAR y CREAR TABLA .
A veces puede resultar abrumador interpretar la especificación. Dado que la mayoría de las personas aprenden mejor de los ejemplos, compartiré cómo he creado una declaración funcional y cómo puede modificarla para que funcione para usted.
Agregar varios índices
Esta declaración muestra cómo agregar varios índices (tenga en cuenta que los nombres de índice, en minúsculas, son opcionales):
CREATE TEMPORARY TABLE core.my_tmp_table
(INDEX my_index_name (tag, time), UNIQUE my_unique_index_name (order_number))
SELECT * FROM core.my_big_table
WHERE my_val = 1
Agregue una nueva clave primaria :
CREATE TEMPORARY TABLE core.my_tmp_table
(PRIMARY KEY my_pkey (order_number),
INDEX cmpd_key (user_id, time))
SELECT * FROM core.my_big_table
Crea columnas adicionales
Puede crear una nueva tabla con más columnas de las que se especifican en la instrucción SELECT. Especifique la columna adicional en la definición de la tabla. Las columnas especificadas en la definición de la tabla y que no se encuentran en select serán las primeras columnas de la nueva tabla, seguidas de las columnas insertadas por la instrucción SELECT.
CREATE TEMPORARY TABLE core.my_tmp_table
(my_new_id BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY my_pkey (my_new_id), INDEX my_unique_index_name (invoice_number))
SELECT * FROM core.my_big_table
Redefiniendo tipos de datos para las columnas de SELECT
Puede redefinir el tipo de datos de una columna que se selecciona. En el ejemplo siguiente, la etiqueta de columna es MEDIUMINT en core.my_big_table y la estoy redefiniendo a BIGINT en core.my_tmp_table.
CREATE TEMPORARY TABLE core.my_tmp_table
(tag BIGINT,
my_time DATETIME,
INDEX my_unique_index_name (tag) )
SELECT * FROM core.my_big_table
Definiciones de campo avanzadas durante la creación
Todas las definiciones de columna habituales están disponibles como cuando crea una tabla normal. Ejemplo:
CREATE TEMPORARY TABLE core.my_tmp_table
(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
value BIGINT UNSIGNED NOT NULL DEFAULT 0 UNIQUE,
location VARCHAR(20) DEFAULT "NEEDS TO BE SET",
country CHAR(2) DEFAULT "XX" COMMENT "Two-letter country code",
INDEX my_index_name (location))
ENGINE=MyISAM
SELECT * FROM core.my_big_table
Encontré la respuesta por mi cuenta. Mi problema fue que utilizo dos tablas temporales para una combinación y creo la segunda a partir de la primera. Pero el índice no se copió durante la creación ...
CREATE TEMPORARY TABLE tmpLivecheck (tmpid INTEGER NOT NULL AUTO_INCREMENT, PRIMARY KEY(tmpid), INDEX(tmpid)) SELECT * FROM tblLivecheck_copy WHERE tblLivecheck_copy.devId = did; CREATE TEMPORARY TABLE tmpLiveCheck2 (tmpid INTEGER NOT NULL, PRIMARY KEY(tmpid), INDEX(tmpid)) SELECT * FROM tmpLivecheck;
... resolvió mi problema.
Saludos...
fuente
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] select_statement
Ejemplo:
CREATE TEMPORARY TABLE IF NOT EXISTS mytable (id int(11) NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM; INSERT IGNORE INTO mytable SELECT id FROM table WHERE xyz;
fuente
PRIMARY KEY
siempre está indexado.