sql >> Databáze >  >> RDS >> Mysql

Znovu sestavit index na InnoDB

Prováděli jste SHOW TABLE STATUS před a po vašem pádu+přestavbě? Mění se hodně index_length? Pravděpodobně ani dvakrát.

Téměř nikdy nedoporučuji nic přestavět v InnoDB. Nestojí to za to. Jasná výjimka souvisí s FULLTEXT indexy.

Ano, figurína ALTER přestaví indexy. Stejně tak bude OPTIMIZE TABLE . Oba "defragmentují" (do určité míry) sekundární index BTrees a hlavní BTree (který obsahuje data a PRIMARY KEY ).

Statistik může být hodně levněji aktualizovat pomocí pouhého ANALYZE TABLE . Ani to není často potřeba. 5.6 má mnohem lepší způsob udržování statistik.

Pokud ještě nepoužíváte innodb_file_per_table=ON , navrhuji, abyste to nastavili (SET GLOBAL ... ) a proveďte ALTER TABLE tbl ENGINE=InnoDB; naposledy.

Online změna

Chcete-li změnit ft_* , musíte znovu sestavit index. To znamená ALTER (nebo OPTIMIZE , který je implementován jako ALTER ). Novější verze MySQL mají ALGORITHM=INPLACE což dělá ALTER mají malý nebo žádný dopad na běžící systém. Existují však omezení. Podívejte se do manuálu.

Alternativa k neINPLACE ALTER je pt-query-digest nebo gh-ost . Podívejte se, zda některý z nich bude ve vašem případě fungovat.

Krátce než „přestavba tabulky“, můžete DROP INDEX ... a ADD INDEX ... . Znovu, nevím, jestli tyto fungují pro FT indexy "na místě". Každopádně byste během procesu ztratili použití tohoto indexu.




  1. Jak optimalizovat ORDER BY pro vypočítaný sloupec v MASSIVE MySQL tabulce

  2. Ovlivňuje pořadí polí v klauzuli WHERE výkon v MySQL?

  3. Dotaz, abyste zkontrolovali, zda pole existuje, a poté vraťte sadu výsledků

  4. Která syntaxe spojení je lepší?