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

Formato de linha do MySQL:Diferença entre fixo e dinâmico?


A diferença realmente só importa para o MyISAM, outros mecanismos de armazenamento não se importam com a diferença.EDIT: Muitos usuários comentaram que o InnoDB se importa:link 1 by movido a vapor , link 2 por Kaan .

Com MyISAM com linhas de largura fixa, existem algumas vantagens:

  1. Sem fragmentação de linha:é possível com linhas de largura variável obter linhas únicas divididas em várias seções no arquivo de dados. Isso pode aumentar as buscas de disco e desacelerar as operações. É possível desfragmentá-lo com OPTIMIZE TABLE, mas isso nem sempre é prático.

  2. Tamanho do ponteiro de arquivo de dados:No MyISAM, existe um conceito de ponteiro de arquivo de dados que é usado quando ele precisa referenciar o arquivo de dados. Por exemplo, isso é usado em índices quando eles se referem a onde a linha realmente está presente. Com tamanhos de largura fixos, esse ponteiro é baseado no deslocamento da linha no arquivo (ou seja, as linhas são 1, 2, 3, independentemente de seu tamanho). Com largura variável, o ponteiro é baseado no deslocamento de byte (ou seja, as linhas podem ser 1, 57, 163). O resultado é que, com tabelas grandes, o ponteiro precisa ser maior, o que adiciona potencialmente muito mais sobrecarga à tabela.

  3. Mais fácil de corrigir em caso de corrupção. Como cada linha é do mesmo tamanho, se sua tabela MyISAM for corrompida, é muito mais fácil reparar, então você só perderá dados que estão realmente corrompidos. Com largura variável, em teoria, é possível que os ponteiros de largura variável fiquem confusos, o que pode resultar em dados incorretos.

Agora, a principal desvantagem da largura fixa é que ela desperdiça mais espaço. Por exemplo, você precisa usar campos CHAR em vez de campos VARCHAR, então você acaba com espaço extra ocupado.

Normalmente, você não terá muita escolha no formato, pois é ditado com base no esquema. No entanto, pode valer a pena se você tiver apenas alguns varchars ou um único blob/texto para tentar otimizar para isso. Por exemplo, considere trocar o único varchar em um char ou dividir o blob em sua própria tabela.

Você pode ler ainda mais sobre isso em:

http://dev.mysql.com/doc/refman /5.0/en/static-format.html

http://dev.mysql.com/doc/refman /5.0/en/dynamic-format.html