partir - Cree una tabla temporal en MySQL con un índice de una selección
create temporary table mysql (3)
Tengo una función almacenada donde uso tablas temporales. Por razones de rendimiento, necesito un índice en esa tabla. Lamentablemente, no puedo usar ALTER TABLE
porque esto provoca una confirmación implícita.
Por lo tanto, estoy buscando la sintaxis para agregar el INDEX
de tempid
durante la creación. ¿Alguien puede ser de ayuda?
CREATE TEMPORARY TABLE tmpLivecheck
(
tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
)
SELECT *
FROM tblLivecheck_copy
WHERE tblLivecheck_copy.devId = did;
Encontré la respuesta por mi cuenta. Mi problema era que utilizo dos tablas temporales para una unión y creo la segunda 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...
Luché bastante tiempo 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:
CREATE TABLE SELECT y CREATE TABLE .
A veces puede ser desalentador interpretar la especificación. Como la mayoría de las personas aprenden mejor de los ejemplos, compartiré cómo he creado una declaración de trabajo y cómo puede modificarla para que funcione para usted.
Agregar múltiples índices
Esta instrucción muestra cómo agregar múltiples í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 principal :
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
Crear columnas adicionales
Puede crear una nueva tabla con más columnas de las especificadas en la instrucción SELECT. Especifique la columna adicional en la definición de la tabla. Las columnas especificadas en la definición de tabla y no encontradas en select serán las primeras columnas en 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
Redefinir tipos de datos para las columnas de SELECT
Puede redefinir el tipo de datos de una columna SELECCIONADA. En el siguiente ejemplo, la etiqueta de columna es una 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
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;