Si bien no estoy de acuerdo con que los BLOB solo estén en otra tabla, no deberían estar en la base de datos . Almacene un puntero a donde vive el archivo en el disco, y luego simplemente obtenga eso de la base de datos ...
El problema principal que causan (para mí) es con la indexación. Usando XML con planes de consulta, porque todos los tienen, hagamos una tabla:
SELECT TOP 1000
ID = IDENTITY(INT,1,1),
deq.query_plan
INTO dbo.index_test
FROM sys.dm_exec_cached_plans AS dec
CROSS APPLY sys.dm_exec_query_plan(dec.plan_handle) AS deq
ALTER TABLE dbo.index_test ADD CONSTRAINT pk_id PRIMARY KEY CLUSTERED (ID)
Son solo 1000 filas, pero verificando el tamaño ...
sp_BlitzIndex @DatabaseName = 'StackOverflow', @SchemaName = 'dbo', @TableName = 'index_test'
Tiene más de 40 MB para solo 1000 filas. Suponiendo que agregue 40 MB cada 1000 filas, eso puede volverse bastante feo rápidamente. ¿Qué sucede cuando golpeas 1 millón de filas? Eso es solo alrededor de 1 TB de datos, allí.
Cualquier consulta que necesite usar su índice agrupado ahora debe leer todos esos datos BLOB en la aclaración de la memoria : cuando se hace referencia a la columna de datos BLOB.
¿Se te ocurren mejores formas de usar la memoria de SQL Server que almacenar BLOB? Porque seguro que puedo.
Expandiéndolo a índices no agrupados:
CREATE INDEX ix_noblob ON dbo.index_test (ID)
CREATE INDEX ix_returnoftheblob ON dbo.index_test (ID) INCLUDE (query_plan)
Puede diseñar sus índices no agrupados para evitar en gran medida la columna BLOB para que las consultas regulares puedan evitar el índice agrupado, pero tan pronto como necesite esa columna BLOB, necesitará el índice agrupado.
Si lo agrega como una INCLUDED
columna a un índice no agrupado para evitar un escenario de búsqueda de claves, terminará con gigantescos índices no agrupados:
Más problemas que causan:
- Si alguien ejecuta una
SELECT *
consulta, obtiene todos esos datos BLOB.
- Ocupan espacio en las copias de seguridad y restauraciones, ralentizándolas
- Disminuyen la velocidad
DBCC CHECKDB
, porque sé que estás buscando corrupción, ¿verdad?
- Y si realiza algún mantenimiento de índice, también lo ralentizarán.
¡Espero que esto ayude!