Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bilder in SQL Server speichern?

Es gibt ein wirklich gutes Papier von Microsoft Research mit dem Titel To Blob or Not To Blob.

Ihre Schlussfolgerung nach einer großen Anzahl von Leistungstests und Analysen lautet wie folgt:

  • Wenn Ihre Bilder oder Dokumente normalerweise weniger als 256 KB groß sind, ist es effizienter, sie in einer VARBINARY-Datenbankspalte zu speichern

  • Wenn Ihre Bilder oder Dokumente normalerweise größer als 1 MB sind, ist es effizienter, sie im Dateisystem zu speichern (und mit dem FILESTREAM-Attribut von SQL Server 2008 sind sie immer noch unter Transaktionskontrolle und Teil der Datenbank)

  • Zwischen diesen beiden ist es je nach Verwendung etwas umständlich

Wenn Sie sich entscheiden, Ihre Bilder in eine SQL Server-Tabelle zu stellen, würde ich dringend empfehlen, eine separate Tabelle zum Speichern dieser Bilder zu verwenden - speichern Sie das Mitarbeiterfoto nicht in der Mitarbeitertabelle - bewahren Sie sie in einer separaten Tabelle auf. Auf diese Weise bleibt die Mitarbeitertabelle schlank und übersichtlich und sehr effizient, vorausgesetzt, Sie müssen bei Ihren Abfragen nicht immer auch das Mitarbeiterfoto auswählen.

Eine Einführung für Dateigruppen finden Sie unter Dateien und Dateigruppenarchitektur. Grundsätzlich würden Sie Ihre Datenbank entweder von Anfang an mit einer separaten Dateigruppe für große Datenstrukturen erstellen oder später eine zusätzliche Dateigruppe hinzufügen. Nennen wir es "LARGE_DATA".

Wann immer Sie jetzt eine neue Tabelle erstellen müssen, die VARCHAR(MAX)- oder VARBINARY(MAX)-Spalten speichern muss, können Sie diese Dateigruppe für die großen Daten angeben:

 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

Schauen Sie sich die MSDN-Einführung zu Dateigruppen an und spielen Sie damit herum!