Eu tenho uma tabela para usuários em um site de rede social. Eu quero que seja eficiente desde o início. Se eu colocar os campos mencionados na tabela, terei que atualizar a tabela do usuário a cada alteração. Devo ter outra tabela para campos como esses que mudam com frequência? Devo me preocupar com a fragmentação?
Existe alguma abordagem melhor que eu desconheço?
Certamente causará fragmentação, mas você deve compará-la com a normalização.
FRAGMENTAÇÃO
A fragmentação é introduzida em um ambiente de gravação pesada.
Outros links sobre a fragmentação do InnoDB e como eliminá-la dos dados do InnoDB e do tablespace do sistema
NORMALIZAÇÃO
Qualquer coluna que você tenha em uma tabela de usuário que seja imutável (ou seja, nunca sofrerá alterações) deve atuar como a tabela principal. Coisas como
produzirá muito pouca fragmentação, pois mudanças desse tipo são raras.
Qualquer informação que registre alterações frequentes nas informações do usuário deve ir para uma
userinfo
tabela. Isso separará os problemas de fragmentação dos dados imutáveis do usuário. Você pode facilmente desfragmentar umauserinfo
tabela InnoDB com um dos seguintesCONCLUSÃO
Você deve dividir os dados do usuário em tabelas
user
e .userinfo
Um simples INNER JOIN irá combiná-los conforme necessário.Sugiro que siga as regras de normalização. Isso minimizará o processamento de gravação e atualização (e erros) e simplificará a codificação da lógica das rotinas de gravação e atualização. Você pode ajustar as leituras de várias maneiras. Você pode usar exibições materializadas ou exibições indexadas para acompanhar as contagens sem consultar os registros um por um. Não sacrifique a normalização sem motivos óbvios.