2009-04-21 6 views
6

Tôi cố gắng để quyết định giữa hai thực hiện khác nhau và đang háo hức để lựa chọn tốt nhất :)Hiệu suất chi phí của việc thêm một lĩnh vực BLOB vào một bảng

tôi cần thêm một lĩnh vực BLOB tùy chọn vào một bảng mà hiện nay chỉ có 3 trường đơn giản. Người ta dự đoán rằng trường mới sẽ được sử dụng trong ít hơn 10%, thậm chí có thể ít hơn 5% số trường hợp, vì vậy nó sẽ là rỗng cho hầu hết các hàng - thực tế hầu hết khách hàng của chúng tôi sẽ không bao giờ có bất kỳ dữ liệu BLOB nào trong đó.

Độ nghiêng đầu tiên của đồng nghiệp là thêm một bảng mới để chỉ giữ các BLOB, với khóa ngoại (có thể đặt rỗng) trong bảng đầu tiên. Ông dự đoán điều này sẽ có lợi ích hiệu suất khi truy vấn bảng đầu tiên.

Suy nghĩ của tôi là hợp lý hơn và dễ dàng hơn để lưu trữ BLOB trực tiếp trong bảng gốc. Không có truy vấn nào của chúng tôi thực hiện SELECT * từ bảng đó để trực giác của tôi lưu trữ trực tiếp sẽ không có chi phí hiệu năng đáng kể.

Tôi sẽ chuẩn bị cả hai lựa chọn nhưng tôi đã hy vọng một số chuyên gia SQL có bất kỳ lời khuyên nào từ kinh nghiệm.

Sử dụng MSSQL và Oracle.

Trả lời

5

Đối với MSSQL, các đốm màu sẽ được lưu trữ trên một trang riêng biệt trong cơ sở dữ liệu để chúng không ảnh hưởng đến hiệu suất nếu cột là rỗng.

Nếu bạn sử dụng loại dữ liệu IMAGE thì dữ liệu luôn được lưu trữ ngoài hàng. Nếu bạn sử dụng loại dữ liệu varbinary (max) thì dữ liệu là> 8kb nó được lưu bên ngoài hàng, nếu không nó có thể được lưu trữ trong hàng tùy thuộc vào tùy chọn bảng.

Nếu bạn chỉ có một vài hàng có đốm màu thì hiệu suất sẽ không bị ảnh hưởng.