Có một bài báo rất hay của Microsoft Research được gọi là To Blob hoặc Not To Blob.
Kết luận của họ sau một số lượng lớn các bài kiểm tra và phân tích hiệu suất là:
-
nếu ảnh hoặc tài liệu của bạn thường có kích thước dưới 256K, thì việc lưu trữ chúng trong cột VARBINARY của cơ sở dữ liệu sẽ hiệu quả hơn
-
nếu ảnh hoặc tài liệu của bạn thường có kích thước trên 1 MB, thì việc lưu trữ chúng trong hệ thống tệp sẽ hiệu quả hơn (và với thuộc tính FILESTREAM của SQL Server 2008, chúng vẫn nằm dưới sự kiểm soát giao dịch và là một phần của cơ sở dữ liệu)
-
ở giữa hai điều đó, có một chút rắc rối tùy thuộc vào cách sử dụng của bạn
Nếu bạn quyết định đặt ảnh của mình vào bảng SQL Server, tôi thực sự khuyên bạn nên sử dụng một bảng riêng để lưu trữ những ảnh đó - không lưu ảnh nhân viên trong bảng nhân viên - hãy giữ chúng trong một bảng riêng. Bằng cách đó, bảng Nhân viên có thể luôn gọn gàng, có ý nghĩa và rất hiệu quả, giả sử bạn không phải lúc nào cũng cần chọn ảnh nhân viên như một phần trong các truy vấn của mình.
Đối với nhóm tệp, hãy xem Tệp và Kiến trúc nhóm tệp để biết phần giới thiệu. Về cơ bản, bạn sẽ tạo cơ sở dữ liệu của mình với một nhóm tệp riêng biệt cho các cấu trúc dữ liệu lớn ngay từ đầu hoặc thêm một nhóm tệp bổ sung sau đó. Hãy gọi nó là "LARGE_DATA".
Bây giờ, bất cứ khi nào bạn có một bảng mới để tạo cần lưu trữ các cột VARCHAR (MAX) hoặc VARBINARY (MAX), bạn có thể chỉ định nhóm tệp này cho dữ liệu lớn:
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
Hãy xem phần giới thiệu MSDN trên các nhóm tệp và chơi với nó!