Il existe un très bon article de Microsoft Research intitulé To Blob or Not To Blob.
Leur conclusion après un grand nombre de tests et d'analyses de performances est la suivante :
-
si la taille de vos images ou de votre document est généralement inférieure à 256 Ko, il est plus efficace de les stocker dans une colonne VARBINARY de la base de données
-
si vos images ou votre document ont généralement une taille supérieure à 1 Mo, leur stockage dans le système de fichiers est plus efficace (et avec l'attribut FILESTREAM de SQL Server 2008, ils sont toujours sous contrôle transactionnel et font partie de la base de données)
-
entre les deux, c'est un peu compliqué selon votre utilisation
Si vous décidez de mettre vos images dans une table SQL Server, je vous recommande fortement d'utiliser une table séparée pour stocker ces images - ne stockez pas la photo de l'employé dans la table des employés - conservez-les dans une table séparée. De cette façon, le tableau Employé peut rester léger et méchant et très efficace, en supposant que vous n'ayez pas toujours besoin de sélectionner la photo de l'employé également dans le cadre de vos requêtes.
Pour les groupes de fichiers, consultez Fichiers et architecture de groupe de fichiers pour une introduction. Fondamentalement, vous devez soit créer votre base de données avec un groupe de fichiers séparé pour les grandes structures de données dès le début, soit ajouter un groupe de fichiers supplémentaire ultérieurement. Appelons-le "LARGE_DATA".
Désormais, chaque fois que vous avez une nouvelle table à créer qui doit stocker des colonnes VARCHAR(MAX) ou VARBINARY(MAX), vous pouvez spécifier ce groupe de fichiers pour les données volumineuses :
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
Consultez l'intro MSDN sur les groupes de fichiers et jouez avec !