Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Übergeben Sie den Index von der regulären Tabelle an die temporäre Tabelle?

Sie könnten CREATE TEMPORARY TABLE temp_table LIKE regular_table verwenden , aber das wird alle erstellen die Indizes, wenn Sie also INSERT INTO temp_table SELECT * FROM regular_table ausführen , werden die Indizes neu erstellt - was sehr lange dauern kann.

Oder Sie können die Tabelle erstellen und den Index nachträglich hinzufügen:

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

aber der Index wird wieder bei jeder Einfügung aktualisiert.

Der wahrscheinlich effizienteste Weg wäre, die temporäre Tabelle zu erstellen, alles einzufügen und danach den Index zu erstellen:

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

Auch hier müssen Sie warten, bis der Index erstellt ist, außer dass dies in einem Stück mit der letzten ALTER-Anweisung geschieht.