Las columnas sparse (Columnas Dispersas) son introducidas en SQL Server 2008.
Las columnas sparse son columnas normales que disponen de un almacenamiento optimizado para los valores NULL. Este tipo de columnas reducen los requisitos de espacio de los valores NULL a costa de una mayor sobrecarga a la hora de recuperar valores no NULL. Considere la posibilidad de utilizar columnas sparse si el ahorro de espacio se sitúa entre el 20 y el 40 por ciento.
A continuación, algunas restricciones de uso de los columnas sparse:
- Deben aceptar valores NULL y no pueden tener las propiedades ROWGUIDCOL ni IDENTITY.
- No pueden adoptar los tipos de datos siguientes: text, ntext, image, timestamp, tipo de datos definido por el usuario, geometry ni geography; ni tener el atributo FILESTREAM.
- No pueden tener un valor predeterminado.
- No se pueden enlazar a una regla.
- Las columnas dispersas son incompatibles con la compresión de datos. Por consiguiente, las columnas dispersas no se pueden agregar a las tablas comprimidas, ni se puede comprimir ninguna tabla que las contenga.
Mas información haciendo clic en la imagen:
USE tempdb
GO
–prueba 1 sin sparse
CREATE TABLE Documento_Sin_Sparse(
Codigo INT IDENTITY(1,1) PRIMARY KEY,
CodigoDocumento int NOT NULL,
Titulo varchar(200) NOT NULL,
Epecificacion char(500) NULL,
Ubicacion smallint NULL,
Grupo char(500) NULL);
GO
–Insertamos 100 registros con todos los campos llenos
INSERT Documento_Sin_Sparse (CodigoDocumento,Titulo,Epecificacion,Ubicacion, Grupo)
VALUES (1,‘Tire Spec 1’,‘AXZZ217’,27,‘Men 25 – 35’)
GO 100
–Insertamos 10000 registros con los campos que no permiten valores nulos
INSERT Documento_Sin_Sparse (CodigoDocumento,Titulo)
VALUES (2,‘Survey 2142’)
GO10000
Revisamos los datos
SELECT * FROM Documento_Sin_Sparse
–Creamos un indice
CREATE INDEX ix_title ON Documento_Sin_Sparse (Titulo)
–ver espacio utilizado por la tabla
sp_spaceused Documento_Sin_Sparse
–prueba 2 usando sparse
CREATE TABLE Documento_Con_Sparse (
Codigo INT IDENTITY(1,1) PRIMARY KEY,
CodigoDocumento int NOT NULL,
Titulo varchar(200) NOT NULL,
Epecificacion char(500) SPARSE NULL,
Ubicacion smallint SPARSE NULL,
Grupo char(500) SPARSE NULL);
GO
–Insertamos 100 registros con todos los campos llenos
INSERT Documento_Con_Sparse (CodigoDocumento,Titulo,Epecificacion,Ubicacion, Grupo)
VALUES(1,‘Tire Spec 1’,‘AXZZ217’,27,‘Men 25 – 35’)
GO 100
–Insertamos 10000 registros con los campos que no permiten valores nulos
INSERT Documento_Con_Sparse(CodigoDocumento,Titulo)
VALUES (2,‘Survey 2142’)
GO 10000
Revisamos los datos
SELECT*FROM Documento_Sin_Sparse
–crear indice
CREATE INDEX ix_title ON Documento_Con_Sparse(Titulo)
–ver espacio utilizado por la tabla
sp_spaceused Documento_Con_Sparse
Observamos que la columna data y tamaño del índice disminuyo.
Hola que tal muy importante este articulo…
soy alumno de la especializacion de CESCA 19/02/2012
Hola! Gracias por tu comentario, tenemos varios artículos que puede ser de tu interes. Tambien los foros para que plantees tus dudas.
Saludos
El equipo dbLearner