Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que e quando devo usar SPARSE COLUMN? (SQL SERVER 2008)


Uma coluna esparsa não usa 4x a quantidade de espaço para armazenar um valor, ele usa um 4 bytes extras (fixo) por valor não nulo. (Como você já afirmou, um NULL ocupa 0 espaço.)

  • Portanto, um valor não nulo armazenado em um bit coluna seria 1 bit + 4 bytes =4,125 bytes. Mas se 99% deles forem NULOS, ainda é uma economia líquida.

  • Um valor não nulo armazenado em um GUID (UniqueIdentifier) coluna é 16 bytes + 4 bytes =20 bytes. Portanto, se apenas 50% deles forem NULOS, ainda será uma economia líquida.

Portanto, a "economia esperada" depende muito do tipo da coluna de que estamos falando e sua estimativa de qual proporção será nula versus não nula. Colunas de largura variável (varchars) são provavelmente um pouco mais difíceis de prever com precisão.

Esta página de livros on-line tem uma tabela mostrando qual porcentagem de diferentes tipos de dados precisariam ser nulos para que você acabasse com um benefício.

Então quando você deve usar uma coluna esparsa? Quando você espera que uma porcentagem significativa das linhas tenha um valor NULL. Alguns exemplos que me vêm à mente:
  • Uma "Data de devolução do pedido " em uma tabela de pedidos. Você espera que uma porcentagem muito pequena das vendas resulte em produtos devolvidos.
  • Um "4º endereço " em uma tabela de endereços. A maioria dos endereços de correspondência, mesmo que você precise de um nome de departamento e um "Cuidado de", provavelmente não precisa de 4 linhas separadas.
  • Um "sufixo " em uma tabela de clientes. Uma porcentagem bastante baixa de pessoas tem um "Jr." ou "III" ou "Esquire" após o nome.