Sintaxe de OPTIMIZE TABLE
OPTIMIZE TABLE
deve ser usado se você apagou uma grande parte de uma tabela ou se você fez várias alterações à uma tabela com registros de tamanho variável (tabelas que tenham campos do tipo VARCHAR
, BLOB
ou TEXT
). Registros apagados são mantidos em uma lista de ligações e operações INSERT
subsequentes reutilizam posições de registros antigos. Você pode utilizar OPTIMIZE TABLE
para reclamar o espaço inutilizado e para desfragmentar o arquivo de dados.
Na maioria da configurações você não tem que executar OPTIMIZE TABLE
. Mesmo se você fizer diversas atualizações para registros de tamanhos variáveis não é desejável que você precise fazer isto mais que uma vez por mês/semana e apenas em determinadas tabelas.
No momento OPTIMIZE TABLE
só funciona em tabelas MyISAM e BDB
. Para tabelas BDB
, OPTIMIZE TABLE
é atualmente mapeado para ANALIZE TABLE
. Leia "Sintaxe de ANALYZE TABLE
".
Você pode ter a otimização de tabelas trabalhando em outros tipos de tabelas iniciando o mysqld
com --skip-new
ou --safe-mode
, mas neste caso, OPTIMIZE TABLE
é mapeado apenas para ALTER TABLE
.
OPTIMIZE TABLE
funciona da seguinte forma:
- Se a tabela tem registros excluídos ou dividos, repara a tabela.
- Se as páginas de índice não estão ordenas, ordene-as.
- Se as estatísticas não estão atualizadas (e o reparo não pode ser feito ordenando o índice), atualize-as.
Perceba que a tabela estará bloqueada durante o tempo em que OPTIMIZE TABLE
estiver executando.
Antes do MariaDB, o OPTIMIZE
comnado não gravava no log binário. Desde o MariaDB eles são escritos no log binário a menos que a palavra chave opcional NO_WRITE_TO_BINLOG
(ou se alias LOCAL
) seja usada.