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

Send indeks til midlertidig tabel fra almindelig tabel?

Du kunne bruge CREATE TEMPORARY TABLE temp_table LIKE regular_table , men det vil skabe alle indekserne, så når du gør INSERT INTO temp_table SELECT * FROM regular_table , vil indekserne blive genopbygget - hvilket kan blive langvarigt.

Eller du kan oprette tabellen og tilføje indekset bagefter:

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

men indekset vil igen blive opdateret ved hver indsættelse.

Den mest effektive måde ville nok være at oprette temp-tabellen, indsætte alle, bygge indeks bagefter:

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

Igen bliver du nødt til at vente på, at indekset opbygges, bortset fra at det vil ske i én del med den sidste ALTER-sætning.



  1. MySQL #1093 - Du kan ikke angive måltabellen 'giveaways' til opdatering i FROM-klausulen

  2. Implementering af en tilpasset sortering

  3. Hvad er @@SERVICENAME i SQL Server?

  4. Kør MySQLDump uden at låse tabeller