Hay un artículo muy bueno de Microsoft Research llamado To Blob or Not To Blob.
Su conclusión después de una gran cantidad de pruebas y análisis de rendimiento es la siguiente:
-
si sus imágenes o documentos suelen tener un tamaño inferior a 256 K, almacenarlos en una columna VARBINARY de la base de datos es más eficiente
-
si sus imágenes o documentos suelen tener más de 1 MB de tamaño, almacenarlos en el sistema de archivos es más eficiente (y con el atributo FILESTREAM de SQL Server 2008, todavía están bajo control transaccional y forman parte de la base de datos)
-
entre esos dos, es un poco confuso dependiendo de su uso
Si decide colocar sus imágenes en una tabla de SQL Server, le recomiendo enfáticamente que use una tabla separada para almacenar esas imágenes; no almacene la foto del empleado en la tabla de empleados; guárdelas en una tabla separada. De esa manera, la tabla de empleados puede mantenerse simple, mezquina y muy eficiente, suponiendo que no siempre necesite seleccionar la foto del empleado también como parte de sus consultas.
Para grupos de archivos, consulte Archivos y arquitectura de grupos de archivos para obtener una introducción. Básicamente, crearía su base de datos con un grupo de archivos separado para estructuras de datos grandes desde el principio, o agregaría un grupo de archivos adicional más adelante. Llamémoslo "LARGE_DATA".
Ahora, cada vez que tenga que crear una nueva tabla que necesite almacenar columnas VARCHAR(MAX) o VARBINARY(MAX), puede especificar este grupo de archivos para los datos grandes:
CREATE TABLE dbo.YourTable
(....... define the fields here ......)
ON Data -- the basic "Data" filegroup for the regular data
TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
¡Vea la introducción de MSDN sobre grupos de archivos y juegue con ella!