sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué y cuándo debo usar SPARSE COLUMN? (SERVIDOR SQL 2008)

Una columna dispersa no usa 4 veces la cantidad de espacio para almacenar un valor, utiliza un (fijo) 4 bytes adicionales por valor no nulo. (Como ya ha dicho, un NULL ocupa 0 espacios).

  • Entonces, un valor no nulo almacenado en un bit columna sería 1 bit + 4 bytes =4.125 bytes. Pero si el 99 % de estos son NULL, sigue siendo un ahorro neto.

  • Un valor no nulo almacenado en un GUID (UniqueIdentifier) la columna es de 16 bytes + 4 bytes =20 bytes. Entonces, si solo el 50 % de estos son NULL, sigue siendo un ahorro neto.

Por lo tanto, los "ahorros esperados" dependen en gran medida del tipo de la columna de la que estamos hablando, y su estimación de qué relación será nula frente a no nula. Las columnas de ancho variable (varchars) son probablemente un poco más difíciles de predecir con precisión.

Esta página de Libros en línea tiene una tabla que muestra qué porcentaje de diferentes tipos de datos tendrían que ser nulos para que termines con un beneficio.

Así que cuando ¿Deberías usar una columna dispersa? Cuando espera que un porcentaje significativo de las filas tenga un valor NULL. Algunos ejemplos que me vienen a la mente:

  • Una "fecha de devolución del pedido " columna en una tabla de pedidos. Es de esperar que un porcentaje muy pequeño de las ventas resulte en productos devueltos.
  • Una "cuarta dirección " línea en una tabla de direcciones. La mayoría de las direcciones postales, incluso si necesita un nombre de departamento y un "Cuidado de", probablemente no necesiten 4 líneas separadas.
  • Un "sufijo " columna en una tabla de clientes. Un porcentaje bastante bajo de personas tiene un "Jr." o "III" o "Esquire" después de su nombre.