Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Odbuduj indeks w InnoDB

Czy robisz SHOW TABLE STATUS? przed i po upuszczeniu i odbudowie? Czy Index_length bardzo się zmienia? Prawdopodobnie nie dwa razy.

Prawie nigdy nie polecam przebudowy niczego w InnoDB. To nie jest tego warte. Rażący wyjątek ma związek z FULLTEXT indeksy.

Tak, atrapa ALTER odbuduje indeksy. Tak samo OPTIMIZE TABLE . Oba "defragmentują" (do pewnego stopnia) indeks dodatkowy BTrees i główny BTree (zawierający dane i PRIMARY KEY ).

Statystyki mogą być dużo taniej aktualizowane przy użyciu tylko ANALYZE TABLE . Nawet to nie jest często potrzebne. 5.6 ma znacznie lepszy sposób na utrzymanie statystyk.

Jeśli jeszcze nie używasz innodb_file_per_table=ON , proponuję ustawić to (SET GLOBAL ... ) i wykonaj ALTER TABLE tbl ENGINE=InnoDB; ostatni raz.

Zmiana online

Aby zmienić ft_* , musisz odbudować indeks. Oznacza to ALTER (lub OPTIMIZE , który jest zaimplementowany jako ALTER ). Nowsze wersje MySQL mają ALGORITHM=INPLACE co sprawia, że ​​ALTER mają niewielki lub żaden wpływ na działający system. Ale są ograniczenia. Sprawdź instrukcję.

Alternatywa dla nie INPLACE ALTER to pt-query-digest lub gh-ost . Sprawdź, czy któryś z nich sprawdzi się w Twojej sprawie.

Krótko mówiąc "odbudowa tabeli", możesz DROP INDEX ... i ADD INDEX ... . Znowu nie wiem, czy działają one dla indeksów FT „w miejscu”. W każdym razie stracisz możliwość korzystania z tego indeksu podczas procesu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql:aktualizacja z podzapytaniem,

  2. Korzystanie z IF EXISTS w MySQL

  3. Google wykresy ciągłą oś X z tablicy php

  4. uzyskaj odpowiedź o powodzeniu/porażce od mysqli_query

  5. C# Entity Framework:słowo kluczowe nie jest obsługiwane:„port”