Có một bài báo thực sự hay do Microsoft Research gọi là To Blob or Not To Blob thảo luận sâu về chủ đề này.
Kết luận của họ sau khi một số lượng lớn các bài kiểm tra hiệu suất và phân tích là:
nếu hình ảnh hoặc tài liệu của bạn thường dưới 256K về kích thước, lưu trữ chúng trong một cơ sở dữ liệu VARBINARY
cột là hiệu quả hơn
nếu hình ảnh hoặc tài liệu của bạn thường có dung lượng trên 1 MB, lưu trữ chúng trong hệ thống tệp hiệu quả hơn (và với thuộc tính FILESTREAM
của SQL Server 2008, chúng vẫn đang được kiểm soát giao dịch và một phần của cơ sở dữ liệu)
ở giữa hai, đó là một chút của một toss-up tùy thuộc vào việc bạn sử dụng
Nếu bạn quyết định đưa hình ảnh của bạn vào một bảng SQL Server, tôi sẽ khuyên bạn sử dụng một bảng riêng biệt cho lưu trữ những hình ảnh đó - không lưu trữ foto của nhân viên trong bảng nhân viên - giữ chúng trong một bảng riêng biệt. Bằng cách đó, bảng Employee có thể ở mức gọn gàng và 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ân viên foto, như một phần của các truy vấn của bạn.
Đối với nhóm tệp, hãy xem Files and Filegroup Architecture để biết phần giới thiệu. Về cơ bản, bạn có thể tạo cơ sở dữ liệu của bạn 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 này. 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 ra mà cần phải lưu trữ VARCHAR(MAX)
hoặc VARBINARY(MAX)
cột, bạn có thể chỉ định nhóm tập tin 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
Kiểm tra các giới thiệu MSDN trên filegroups, và chơi xung quanh với nó!
Nguồn
2011-12-20 11:11:37
Vâng, sự thật là trong TẤT CẢ truy vấn, chúng tôi cần chọn hình thu nhỏ HOẶC ảnh (hình thu nhỏ cho tìm kiếm kết quả và ảnh khi nhập để xem dữ liệu của hình ảnh). Trong trường hợp đó, chúng ta cũng phải tách biệt trong hai hàng? –