2010-07-19 19 views
5

Estoy creando una tabla temporal con una consulta como esta:¿Pasar el índice a la tabla temporal de la tabla normal?

CREATE TEMPORARY TABLE temp_table 
SELECT * FROM regular_table 
WHERE 1 

Pero regular_table tiene índice FULLTEXT en algunos de los campos. Intento hacer una búsqueda FULLTEXT en la nueva tabla temporal y aparece un mensaje de error que dice "No se puede encontrar el índice FULLTEXT que coincida con la lista de columnas". Así que obviamente el índice no está copiando a la nueva tabla. ¿Hay alguna manera de forzar esto?

Gracias.

Respuesta

10

usted podría utilizar CREATE TEMPORARY TABLE temp_table LIKE regular_table, sino que creará todos los índices, por lo que cuando lo hace INSERT INTO temp_table SELECT * FROM regular_table, los índices se reconstruirán - que podría ser largo.

O bien, puede crear la tabla y añadir el índice después:

CREATE TEMPORARY TABLE temp_table 
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz) 
INSERT INTO temp_table SELECT * FROM regular_table 

pero el índice será, de nuevo, actualizado en cada inserción.

Probablemente la forma más eficiente sería la creación de la tabla temporal, inserte todo, construir índice después:

CREATE TEMPORARY TABLE temp_table 
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz) 
ALTER TABLE temp_table DISABLE KEYS 
INSERT INTO temp_table SELECT * FROM regular_table 
ALTER TABLE temp_table ENABLE KEYS 

Una vez más, tendrá que esperar a que el índice de construir, excepto que va a pasar en una pedazo, con la última instrucción ALTER.

+0

¡Gracias! ... Este es probablemente un pequeño vistazo, pero creo que tienes que poner 'ALTER TABLE tablename' Obtuve un error con' ALTER tablename' .. ¡Gracias por la información! –

+0

@John Isaacks: de nada; gracias por la corrección - editado. – Piskvor

2

Una tabla temporal es exactamente la misma que en cualquier otra tabla, excepto que se eliminará al final de la sesión. La única forma de tener los mismos índices (desde dentro de la base de datos) es crearlos en la tabla como lo haría con cualquier otra tabla.

Ahora hay un poco de un truco. Puede copiar los archivos físicos en el disco a un nuevo nombre y tener un clon de la tabla que incluya índices, pero supongo que está haciendo esto dentro de una aplicación, por lo que podría no ser muy práctico.

+0

Nota: esto solo funciona para MyISAM (no para InnoDB u otros), y probablemente requiera privilegios de administrador. – Piskvor

Cuestiones relacionadas