sql >> Databasteknik >  >> RDS >> Mysql

Bygg om index på InnoDB

Har du gjort SHOW TABLE STATUS före och efter din drop+rebuild? Ändras Index_length mycket? Förmodligen inte ens med en faktor två.

Jag rekommenderar nästan aldrig att bygga om något i InnoDB. Det är inte värt det. Ett påfallande undantag har att göra med FULLTEXT index.

Ja dummyn ALTER kommer att bygga om indexen. Så kommer OPTIMIZE TABLE . Båda kommer att "defragmentera" (i viss utsträckning) det sekundära indexet BTrees och huvud-BTree (som innehåller data och PRIMARY KEY ).

Statistiken kan vara mycket billigare uppdaterad med bara ANALYZE TABLE . Även det behövs inte ofta. 5.6 har ett mycket bättre sätt att underhålla statistiken.

Om du inte redan använder innodb_file_per_table=ON , jag föreslår att du ställer in det (SET GLOBAL ... ) och gör ALTER TABLE tbl ENGINE=InnoDB; en sista gång.

Onlineändring

För att ändra ft_* måste du bygga om indexet. Detta innebär en ALTER (eller OPTIMIZE , som implementeras som ALTER ). Nyare versioner av MySQL har ALGORITHM=INPLACE vilket gör ALTER har liten eller ingen inverkan på körsystemet. Men det finns begränsningar. Kontrollera manualen.

Ett alternativ till en icke-INPLACE ALTER är pt-query-digest eller gh-ost . Se om någon av dem fungerar för ditt fall.

Förutom att "bygga om tabellen" kan du DROP INDEX ... och ADD INDEX ... . Återigen, jag vet inte om dessa fungerar för FT-index "inplace". Hur som helst, du skulle förlora användningen av det indexet under processen.




  1. Lagring av SqlServers raiserror-meddelande i C#

  2. Försöker förstå varför du skulle använda den här typen av databasinstallation

  3. Grundläggande om tabelluttryck, del 3 – Härledda tabeller, optimeringsöverväganden

  4. Uppdatera flera rader med olika värden i en enda fråga - MySQL