Mysql
 sql >> Database >  >> RDS >> Mysql

Passa l'indice alla tabella temporanea dalla tabella normale?

Puoi usare CREATE TEMPORARY TABLE temp_table LIKE regular_table , ma ciò creerà tutti gli indici, quindi quando fai INSERT INTO temp_table SELECT * FROM regular_table , gli indici verranno ricostruiti, il che potrebbe essere lungo.

Oppure puoi creare la tabella e aggiungere l'indice in seguito:

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

ma l'indice sarà, ancora una volta, aggiornato ad ogni inserto.

Probabilmente il modo più efficiente sarebbe creare la tabella temporanea, inserire tutto, creare l'indice in seguito:

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

Ancora una volta, dovrai attendere che l'indice venga compilato, tranne per il fatto che accadrà in un blocco, con l'ultima istruzione ALTER.