There's a really good article from Microsoft Research called In Blob or Not To Blob that discusses this issue in detail.
Their conclusion after a large number of performance tests and analysis is as follows:
if your images or documents are usually below 256 KB, storing them in the VARBINARY column of the database is more efficient
if your images or document are usually larger than 1 MB, they are more efficiently stored in the file system (and with the SQL Server 2008 FILESTREAM attribute, they are still under transaction control and part of the database)
between these two, it depends a little on your use
If you decide to place your photos in a SQL Server table, I highly recommend using a separate table to store these images - do not store the employee photo in the employee table - keep them in a separate table. Thus, the Employee table can remain sparse, medium and very efficient, assuming that you do not always need to select an employee photo as part of your queries.
For filegroups, check out Files and Filegroup Architecture to log in. Basically, you will either create your database with a separate filegroup for large data structures from the very beginning, or add an additional filegroup later. Let me call it "LARGE_DATA".
Now that you have a new table to create that should store the VARCHAR(MAX) or VARBINARY(MAX) columns, you can specify this group of files for big data:
CREATE TABLE dbo.YourTable (....... define the fields here ......) ON Data
Check out the MSDN entry in filegroups and play with it!
source share