sql >> Databasteknik >  >> RDS >> Mysql

Skicka index till temporär tabell från vanlig tabell?

Du kan använda CREATE TEMPORARY TABLE temp_table LIKE regular_table , men det skapar alla indexen, så när du gör INSERT INTO temp_table SELECT * FROM regular_table , kommer indexen att byggas om - vilket kan bli långdraget.

Eller så kan du skapa tabellen och lägga till indexet efteråt:

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

men indexet kommer återigen att uppdateras vid varje infogning.

Det mest effektiva sättet skulle förmodligen vara att skapa temptabellen, infoga alla, bygga index efteråt:

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

Återigen, du måste vänta på att indexet ska byggas, förutom att det kommer att ske i en bit, med den sista ALTER-satsen.



  1. Använda IN-satsen med en kommaavgränsad sträng från utdata från en replace() funktion i Oracle SQL

  2. Skapar du en loggningshanterare för att ansluta till Oracle?

  3. Installera pg gem; FEL:Det gick inte att bygga ädelstensinbyggt tillägg

  4. Gemensamma vänner sql med join (Mysql)