Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Passar o índice para a tabela temporária da tabela regular?


Você pode usar CREATE TEMPORARY TABLE temp_table LIKE regular_table , mas isso criará todos os índices, então quando você faz INSERT INTO temp_table SELECT * FROM regular_table , os índices serão reconstruídos - o que pode ser demorado.

Ou você pode criar a tabela e adicionar o índice depois:
CREATE TEMPORARY TABLE temp_table
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz)
INSERT INTO temp_table SELECT * FROM regular_table

mas o índice será, novamente, atualizado a cada inserção.

Provavelmente a maneira mais eficiente seria criar a tabela temporária, inserir tudo, construir o índice depois:
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

Novamente, você terá que esperar a construção do índice, exceto que isso acontecerá em um pedaço, com a última instrução ALTER.