Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Reconstruir índice no InnoDB


Você está fazendo SHOW TABLE STATUS antes e depois do seu drop+rebuild? O Index_length muda muito? Provavelmente nem por um fator de dois.

Eu quase nunca recomendo reconstruir nada no InnoDB. Não vale a pena. Uma exceção gritante tem a ver com FULLTEXT índices.

Sim, o ALTER fictício irá reconstruir os índices. Assim como OPTIMIZE TABLE . Ambos irão "desfragmentar" (até certo ponto) o índice secundário BTrees e o BTree principal (que contém os dados e a PRIMARY KEY ).

As estatísticas podem ser muito atualizado mais barato usando apenas ANALYZE TABLE . Mesmo isso nem sempre é necessário. 5.6 tem uma maneira muito melhor de manter as estatísticas.

Se você ainda não estiver usando innodb_file_per_table=ON , sugiro que você defina isso (SET GLOBAL ... ) e faça ALTER TABLE tbl ENGINE=InnoDB; uma última vez.

Alteração on-line

Para alterar ft_* , você precisa reconstruir o índice. Isso implica um ALTER (ou OPTIMIZE , que é implementado como ALTER ). Versões mais recentes do MySQL têm ALGORITHM=INPLACE o que torna ALTER têm pouco ou nenhum impacto no sistema em execução. Mas, existem limitações. Verifique o manual.

Uma alternativa para um ALTER não INPLACE é pt-query-digest ou gh-ost . Veja se algum deles funcionará para o seu caso.

Além de "reconstruir a tabela", você pode DROP INDEX ... e ADD INDEX ... . Novamente, não sei se eles funcionam para índices FT "inplace". De qualquer forma, você perderia o uso desse índice durante o processo.