Mysql
 sql >> Base de données >  >> RDS >> Mysql

Passer l'index à la table temporaire à partir de la table normale ?

Vous pouvez utiliser CREATE TEMPORARY TABLE temp_table LIKE regular_table , mais cela créera tous les index, donc quand vous faites INSERT INTO temp_table SELECT * FROM regular_table , les index seront reconstruits - ce qui peut être long.

Ou, vous pouvez créer la table et ajouter l'index par la suite :

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

mais l'index sera, encore une fois, mis à jour à chaque insertion.

Le moyen le plus efficace serait probablement de créer la table temporaire, de tout insérer, puis de créer l'index :

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

Encore une fois, vous devrez attendre que l'index soit construit, sauf que cela se produira en un seul morceau, avec la dernière instruction ALTER.