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

Genopbyg indeks på InnoDB

Har du lavet SHOW TABLE STATUS før og efter din drop+rebuild? Ændres Index_length meget? Sandsynligvis ikke engang med en faktor to.

Jeg anbefaler næsten aldrig at genopbygge noget i InnoDB. Det er ikke det værd. En iøjnefaldende undtagelse har at gøre med FULLTEXT indekser.

Ja dummyen ALTER vil genopbygge indekserne. Det samme vil OPTIMIZE TABLE . Begge vil "defragmentere" (til en vis grad) det sekundære indeks BTrees og det primære BTree (som indeholder dataene og PRIMARY KEY ).

Statistikken kan være meget billigere opdateret ved kun at bruge ANALYZE TABLE . Selv det er ikke ofte nødvendigt. 5.6 har en meget bedre måde at vedligeholde statistikken på.

Hvis du ikke allerede bruger innodb_file_per_table=ON , jeg foreslår, at du indstiller det (SET GLOBAL ... ) og gør ALTER TABLE tbl ENGINE=InnoDB; en sidste gang.

Online ændring

For at ændre ft_* , skal du genopbygge indekset. Dette indebærer en ALTER (eller OPTIMIZE , som er implementeret som ALTER ). Nyere versioner af MySQL har ALGORITHM=INPLACE hvilket gør ALTER har ringe eller ingen indflydelse på det kørende system. Men der er begrænsninger. Tjek manualen.

Et alternativ til en ikke-INPLACE ALTER er pt-query-digest eller gh-ost . Se, om en af ​​dem vil fungere for din sag.

Ud over at "genopbygge tabellen", kan du DROP INDEX ... og ADD INDEX ... . Igen, jeg ved ikke, om disse virker for FT-indekser "inplace". Uanset hvad, ville du miste brugen af ​​det indeks under processen.




  1. MySQL returnerer første række i en sammenføjet tabel

  2. Django 1.7 lange migrationer slutter aldrig

  3. Sådan aktiverer du FEDERATED-motor i XAMPP

  4. UTF8-kodningsproblem - med gode eksempler