A informação que você tem na pergunta sobre o MyISAM está no alvo. No entanto, gostaria de responder às suas duas perguntas adicionais:
ÚLTIMA PERGUNTA
De acordo com o livro
Capítulo 10:"Motores de Armazenamento" Página 196 O parágrafo 7 diz
Com base nesse parágrafo, o registro antigo é substituído por dados de ligação somente se os novos dados a serem inseridos não couberem no bloco alocado anteriormente. Isso pode resultar em muitas linhas inchadas.
PERGUNTA ADICIONAL
Da minha resposta anterior, haveria muitos blocos que
- bloco de espaço
- a duração do registro
- o número de bytes não utilizados no bloco
- Sinalizadores de indicadores de valor NULL
- possivelmente um ponteiro para a continuação do registro se o registro não couber no espaço criado anteriormente e tiver que ser dividido
Esses links de registro começariam na frente de cada linha que tivesse dados superdimensionados sendo inseridos. Isso pode inchar as tabelas MyISAM
.MYD
arquivo muito rapidamente. SUGESTÕES
O formato de linha padrão de um MyISAM é Dinâmico. Quando uma tabela é dinâmica e experimenta muitos INSERTs, UPDATEs e DELETEs, essa tabela precisaria ser otimizada com
OPTIMIZE TABLE mytable;
Existe uma alternativa:mude o formato de linha da tabela para Fixo. Dessa forma, todas as linhas são do mesmo tamanho. É assim que você torna o formato de linha Fixo:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Mesmo com um Formato de Linha Fixo, deve-se levar tempo para localizar um registro disponível, mas o tempo seria O(1) tempo de pesquisa (em termos leigos, levaria a mesma quantidade de tempo para localizar um registro disponível, não importa quantas linhas a tabela tem ou quantas linhas deletadas existem). Você pode ignorar essa etapa ativando inserção_concorrente do seguinte modo:
Adicione isto ao meu.cnf
[mysqld]
concurrent_insert = 2
A reinicialização do MySQL não é necessária. Apenas corra
mysql> SET GLOBAL concurrent_insert = 2;
Isso faria com que todos os INSERTs fossem para o fundo da tabela sem procurar espaço livre.
Vantagem das tabelas de linhas fixas
- INSERTs, UPDATEs e DELETEs seriam um pouco mais rápidos
- SELECT são 20-25% mais rápidos
Aqui estão alguns dos meus posts sobre SELECT sendo mais rápido para formatos de linha sendo corrigidos
May 03, 2012
:O que é mais rápido, InnoDB ou MeuISAM?Sep 20, 2011
:O melhor de MyISAM e InnoDBMay 10, 2011
:Qual é o impacto no desempenho de usar CHAR vs VARCHAR em um campo de tamanho fixo?
Desvantagem das tabelas de linhas fixas
Na maioria dos casos, quando você executa
ALTER TABLE mytable ROW_FORMAT=Fixed;
, a tabela pode crescer 80-100%. O .MYI
arquivo (páginas de índice para a tabela MyISAM) também cresceria na mesma taxa. EPÍLOGO
Se você quer velocidade para tabelas MyISAM e pode conviver com tabelas maiores, minhas sugestões alternativas seriam necessárias. Se você quiser economizar espaço para cada tabela MyISAM, deixe o formato da linha como está (Dinâmico). Você terá que compactar a tabela com
OPTIMIZE TABLE mytable;
mais frequente com tabelas dinâmicas.