Skip to content

Almacenamiento de columnas con datos dispersos (sparse columns)

12/01/2014
SQLServerLogo

Las columnas de una tabla que poseen en su mayoría valores NULL se denominan columnas dispersas. Este tipo de columnas pueden aparecer con frecuencia en nuestras tablas y debemos entonces buscar una manera eficiente de implementarlas para no desperdiciar el espacio de almacenamiento que estas columnas generan.

A partir de SQL Server 2008 tenemos dos alternativas interesantes para almacenar de manera apropiada columnas con pocos valores distintos de NULL.

Columnas SPARSE

El uso de la propiedad SPARSE en la definición de una columna permite que el motor SQL Server almacene los valores correspondientes de forma eficiente, considerando que pocas filas van a contener valores distintos de NULL. Esto se hace a costa de un mayor tiempo de proceso para recuperar aquellas filas que si tienen un valor para la columna indicada. Por lo demás, el uso de este tipo de columnas es muy similar a las columnas normales de cualquier tabla.

Un ejemplo en la creación de una tabla con una columna dispersa es:

CREATE TABLE Comentarios
(IDProducto int,
ComentarioProducto varchar(200) SPARSE NULL ) ;

Para mayor información sobre esta propiedad les recomiendo el siguiente link: Use Sparse Columns

Column Sets

Otra forma de implementar el almacenamiento de columnas dispersas es la funcionalidad de Column Sets. Aquí las columnas también se declaran con la propiedad de SPARSE, pero el almacenamiento de estos valores se unifica en una única columna tipo XML adicional a las ya existentes en la tabla. Esta columna XML almacenará un elemento por cada columna dispersa con valor distinto de NULL. De esta forma podemos consultar tanto las columnas directamente por su nombre como procesar la columna XML y obtener todos los valores distintos de NULL combinados para esa fila.

Veamos como se crea una tabla con este almacenamiento de columnas:

CREATE TABLE Comentarios
(IDProducto int,
ComentarioProducto varchar(200) SPARSE NULL,
RatingProducto smallint SPARSE NULL,
ColumnasDispersas XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);

Al consultar esta tabla, podemos indicar cada columna en forma individual y al seleccionar las columnas dispersas se mostrará el valor apropiado. Lo que debemos tener en cuenta es que al agregar una columna del tipo Column Set para el almacenamiento, se modifica el comportamiento de la operación SELECT * sobre esta tabla. En este caso la operación devolverá los datos de las columnas dispersas en su formato XML.

En este link encontraran más detalles sobre como implementar estos conjuntos de columnas: Use Column Sets

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: