Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Memorizzazione di immagini in SQL Server?

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, la loro memorizzazione 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!