Er is een heel goed artikel van Microsoft Research genaamd To Blob or Not To Blob.
Hun conclusie na een groot aantal prestatietests en analyses is dit:
-
als uw afbeeldingen of document doorgaans kleiner zijn dan 256K, is het efficiënter om ze op te slaan in een database VARBINARY-kolom
-
als uw afbeeldingen of document doorgaans groter zijn dan 1 MB, is het efficiënter om ze in het bestandssysteem op te slaan (en met het FILESTREAM-attribuut van SQL Server 2008 staan ze nog steeds onder transactiebeheer en maken ze deel uit van de database)
-
tussen die twee, het is een beetje een toss-up, afhankelijk van uw gebruik
Als u besluit uw afbeeldingen in een SQL Server-tabel te plaatsen, raad ik u ten zeerste aan om een aparte tabel te gebruiken om die afbeeldingen op te slaan - sla de werknemersfoto niet op in de werknemerstabel - bewaar ze in een aparte tabel. Op die manier kan de werknemerstabel slank en gemeen en zeer efficiënt blijven, ervan uitgaande dat u niet altijd ook de werknemersfoto hoeft te selecteren als onderdeel van uw vragen.
Voor bestandsgroepen, bekijk Bestanden en Bestandsgroeparchitectuur voor een intro. In principe zou u ofwel uw database vanaf het begin met een aparte bestandsgroep voor grote gegevensstructuren maken, of later een extra bestandsgroep toevoegen. Laten we het "LARGE_DATA" noemen.
Wanneer u nu een nieuwe tabel moet maken waarin VARCHAR(MAX) of VARBINARY(MAX) kolommen moeten worden opgeslagen, kunt u deze bestandsgroep specificeren voor de grote gegevens:
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
Bekijk de MSDN-intro over bestandsgroepen en speel ermee!