O comando Optimize Table do MySQL

O comando MySQL Optimize table irá efetivamente desfragmentar a sua tabela e deve ser usado por tabelas que são frequentemente atualizadas e/ou deletadas registros.

Ex.: Nós temos uma tabela chamada articles que tem muitos registros de linhas que são frequentemente inseridos, atualizados e deletados. Nós podes ver na descrição da tabela abaixo contém tipos de dados de colunas de comprimento variável:

mysql> desc articles;

+----------------+--------------+------+-----+---------+----------------+
| Field		 | Type		| Null | Key | Default | Extra		|
+----------------+--------------+------+-----+---------+----------------+
| id		 | int(11)	| NO   | PRI | NULL    | auto_increment |
| content        | text         | NO   |     | NULL    |                |
| author_id      | int(11)      | YES  |     | NULL    |                |
| article_title  | varchar(120) | YES  |     | NULL    |                |
| article_hash   | int(11)      | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

6 rows in set (0.00 sec)

Se nós formos olhar o tamanho da tabela no disco, iremos ver que está por volta de 190MB. Se nós efetuarmos uma query na tabela em uma coluna que é indexada nós teremos uma média de tempo do resultado da query: e.g.

mysql> select count(*) from articles where article_title like 'The%';

+----------+
| count(*) |
+----------+
|    15830 |
+----------+
1 row in set (0.63 sec)

Se nós agora optimizarmos a tabela com o seguinte comando:

mysql> optimize table articles;
+-----------------------+----------+----------+----------+
| Table                 | Op       | Msg_type | Msg_text |
+-----------------------+----------+----------+----------+
| books.articles        | optimize | status   | OK       |
+-----------------------+----------+----------+----------+
1 row in set (6.27 sec)

Isso irá desfragmentar a tabela reduzindo o tamanho da tabela para 105MB. E também tem mais um ponto positivo que afeta diretamente na performance, reduzindo o tempo de resposta da query de 0.63s para 0.39s. Obs. O mysql query cache foi deixado como off para a demonstração.

mysql> select count(*) from articles where article_title like 'The%';
+----------+
| count(*) |
+----------+
|    15830 |
+----------+
1 row in set (0.39 sec)

Para maiores informações sobre o comando OPTIMIZE TABLE:

Fonte: dbtuna

%name O comando Optimize Table do MySQL

Autor: Rafael Stoever

Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).