sql >> Base de Datos >  >> RDS >> Mysql

¿Pasar el índice a la tabla temporal desde la tabla normal?

Podrías usar CREATE TEMPORARY TABLE temp_table LIKE regular_table , pero eso creará todos los índices, así que cuando hagas INSERT INTO temp_table SELECT * FROM regular_table , los índices se reconstruirán, lo que podría llevar mucho tiempo.

O bien, puede crear la tabla y agregar 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 crear la tabla temporal, insertar todo, crear el í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 se genere el índice, excepto que sucederá en un solo fragmento, con la última instrucción ALTER.