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

Existe algum motivo para se preocupar com a ordem das colunas em uma tabela?


A ordem das colunas teve um grande impacto no desempenho de alguns dos bancos de dados que ajustei, abrangendo Sql Server, Oracle e MySQL. Esta postagem tem boas regras gerais :
  • Colunas de chave primária primeiro
  • Colunas de chave estrangeira em seguida.
  • Próximas colunas pesquisadas com frequência
  • Colunas atualizadas com frequência posteriormente
  • As colunas anuláveis ​​são as últimas.
  • Colunas anuláveis ​​menos usadas após colunas anuláveis ​​usadas com mais frequência

Um exemplo de diferença no desempenho é uma pesquisa de índice. O mecanismo de banco de dados encontra uma linha com base em algumas condições no índice e retorna um endereço de linha. Agora diga que você está procurando por SomeValue, e está nesta tabela:
 SomeId int,
 SomeString varchar(100),
 SomeValue int

O mecanismo precisa adivinhar onde SomeValue começa, porque SomeString tem um comprimento desconhecido. No entanto, se você alterar a ordem para:
 SomeId int,
 SomeValue int,
 SomeString varchar(100)

Agora o mecanismo sabe que SomeValue pode ser encontrado 4 bytes após o início da linha. Portanto, a ordem das colunas pode ter um impacto considerável no desempenho.

EDIT:Sql Server 2005 armazena campos de tamanho fixo no início da linha. E cada linha tem uma referência ao início de um varchar. Isso nega completamente o efeito que listei acima. Portanto, para bancos de dados recentes, a ordem das colunas não tem mais impacto.