Há um artigo muito bom da Microsoft Research chamado To Blob or Not To Blob.
A conclusão deles após um grande número de testes e análises de desempenho é esta:
-
se suas fotos ou documentos normalmente têm tamanho inferior a 256 KB, armazená-los em uma coluna VARBINARY do banco de dados é mais eficiente
-
se suas imagens ou documentos têm normalmente mais de 1 MB de tamanho, armazená-los no sistema de arquivos é mais eficiente (e com o atributo FILESTREAM do SQL Server 2008, eles ainda estão sob controle transacional e fazem parte do banco de dados)
-
entre esses dois, é um pouco difícil dependendo do seu uso
Se você decidir colocar suas imagens em uma tabela do SQL Server, eu recomendo usar uma tabela separada para armazenar essas imagens - não armazene a foto do funcionário na tabela do funcionário - mantenha-as em uma tabela separada. Dessa forma, a tabela Employee pode permanecer enxuta, média e muito eficiente, supondo que você nem sempre precise selecionar a foto do funcionário também como parte de suas consultas.
Para grupos de arquivos, confira Arquivos e arquitetura de grupo de arquivos para uma introdução. Basicamente, você criaria seu banco de dados com um grupo de arquivos separado para grandes estruturas de dados desde o início ou adicionaria um grupo de arquivos adicional posteriormente. Vamos chamá-lo de "LARGE_DATA".
Agora, sempre que você tiver uma nova tabela para criar que precise armazenar colunas VARCHAR(MAX) ou VARBINARY(MAX), você pode especificar este grupo de arquivos para os dados 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
Confira a introdução do MSDN em grupos de arquivos e brinque com ela!