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.