C'è un ottimo articolo di Microsoft Research chiamato To Blob or Not To Blob.
La loro conclusione dopo un gran numero di test e analisi delle prestazioni è questa:
-
se le tue immagini o i tuoi documenti hanno in genere dimensioni inferiori a 256 KB, archiviarli in una colonna VARBINARY del database è più efficiente
-
se le tue immagini o i tuoi documenti hanno in genere dimensioni superiori a 1 MB, la loro memorizzazione nel filesystem è più efficiente (e con l'attributo FILESTREAM di SQL Server 2008, sono ancora sotto il controllo transazionale e fanno parte del database)
-
tra questi due, c'è un po' di confusione a seconda del tuo utilizzo
Se decidi di inserire le tue immagini in una tabella di SQL Server, ti consiglio vivamente di utilizzare una tabella separata per archiviare quelle immagini - non archiviare la foto del dipendente nella tabella dei dipendenti - conservarle in una tabella separata. In questo modo, il tavolo Dipendente può rimanere snello, meschino e molto efficiente, supponendo che non sia sempre necessario selezionare anche la foto del dipendente come parte delle tue domande.
Per i filegroup, controlla File e Filegroup Architecture per un'introduzione. Fondamentalmente, potresti creare il tuo database con un filegroup separato per strutture di dati di grandi dimensioni fin dall'inizio o aggiungere un filegroup aggiuntivo in un secondo momento. Chiamiamolo "LARGE_DATA".
Ora, ogni volta che devi creare una nuova tabella che deve memorizzare le colonne VARCHAR(MAX) o VARBINARY(MAX), puoi specificare questo gruppo di file per i dati di grandi dimensioni:
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
Dai un'occhiata all'introduzione di MSDN sui filegroup e giocaci!