Ao usar mysql, você pode perceber que, embora uma tabela apague muitos dados, os arquivos de dados e arquivos de índice da tabela são estranhamente pequenos. Isso porque o mysql deixa muitos buracos de dados ao excluir dados (especialmente Texto e BLOB), o que ocupa o espaço dos dados originais, então o tamanho do arquivo não muda. Esses furos podem ser reutilizados no futuro, quando os dados forem inseridos, e, claro, podem permanecer ali. Esse buraco não só aumenta o custo de armazenamento, mas também reduz a eficiência de varredura da tabela devido à fragmentação dos dados.
Cenários de Uso:Se você deletou uma grande parte da tabela, ou se fez muitas alterações em uma tabela com linhas de comprimento variável (uma com colunas VARCHAR, BLOB ou TEXT), deve usar OPTIMIZE TABLE. Registros deletados são mantidos na lista vinculada, e operações subsequentes de INSERT reutilizam a localização antiga do registro. Você pode usar o OPTIMIZE TABLE para reaproveitar o espaço não utilizado e organizar fragmentos de arquivos de dados. [Quando uma grande quantidade de dados é excluída da sua biblioteca, você pode perceber que o tamanho do arquivo de dados não diminuiu. Isso se deve à fragmentação deixada no arquivo de dados após a operação de exclusão.
Na maioria dos cenários, você não precisa rodar o OPTIMIZE TABLE. Mesmo que você faça muitas atualizações em linhas de comprimento variável, não precisa rodá-las com frequência, uma vez por semana ou uma vez por mês, apenas para tabelas específicas.
OPTIMIZE TABLE funciona apenas para tabelas MyISAM, BDB e InnoDB.
Para tabelas BDB, a OPTIMIZE TABLE está atualmente mapeada para a ANALYZE TABLE. Para tabelas InnoDB, a OPTIMIZE TABLE é mapeada para a ALTER TABLE, que reconstrói a tabela. Operações de reconstrução, atualizam estatísticas de índice e liberam espaço não utilizado em índices agrupados.
Nota: O MySQL bloqueia a tabela durante a execução da OPTIMIZE TABLE.
Para myisam, você pode usar diretamente a tabela de otimização table.name,Quando for o motor InnoDB, ele reporta "Table does not support optimize, doing recreate + analyze" em vez disso", e em circunstâncias normais, se você converter do myisam para o innodb, usará alter table table.name engine='innodb' para converter, e também pode usar isso para otimização.Portanto, quando é o motor InnoDB, podemos usar alter table table.name engine='innodb' em vez de otimizar para otimização。
Para visualizar os efeitos antes e depois, você pode usar o comando mostrar status da tabela, como mostrar status da tabela a partir de [banco de dados] como '[table_name]'; A data_free no resultado de retorno é o espaço de armazenamento ocupado pelo vazio.
O script shell que implementa o MySQL para revisão temporária de tabela de verificação e otimização de tabela é o seguinte:
Original:
O login do hiperlink está visível.
O login do hiperlink está visível.
|