Tôi đã nhảy múa quanh vấn đề này một lúc nhưng nó vẫn tiếp tục. Chúng tôi có một hệ thống và các bảng của chúng tôi có thể bắt đầu bằng mô tả ban đầu được lưu trữ dưới dạng NVARCHAR(150)
và sau đó chúng tôi nhận được vé yêu cầu mở rộng kích thước trường lên 250, sau đó là 1000 v.v ...Cách duy trì để lưu trữ các trường văn bản lớn mà không làm mất hiệu suất là gì?
chu kỳ được lặp lại trên trường "ghi chú" và/hoặc trường "mô tả" mà chúng tôi thêm vào hầu hết các bảng. Tất nhiên mối quan tâm đối với tôi là hiệu suất và phá vỡ giới hạn 8k của trang. Tuy nhiên, mối quan tâm khác của tôi là làm cho hệ thống ít bảo trì hơn bằng cách phá vỡ các trường này ra khỏi bảng MỌI trong hệ thống thành một tham chiếu được nạp lười.
Vì vậy, ở đây tôi phải đối mặt với những điều tương tự với 2 tùy chọn đã được nhìn chằm chằm vào mặt tôi. (những người khác được chào đón) xin vui lòng cho tôi mượn ý kiến của bạn.
Thay đổi tất cả ghi chú và/hoặc mô tả thành
NVARCHAR(MAX)
và đảm bảo chúng tôi loại trừ các trường này trong tất cả các danh sách. Về cơ bản không bao giờ làm một:SELECT * FROM [TableName]
trừ khi nó chỉ lấy một bản ghi.Xóa tất cả ghi chú và/hoặc trường mô tả và thay thế chúng bằng tham chiếu khóa forign thành bảng
[Notes]
.CREATE TABLE [dbo].[Notes] (
(
[NoteId] [int] NOT NULL,
[NoteText] [NVARCHAR]MAX
)NOT NULL)
Rõ ràng là tôi muốn sử dụng phương án 1 vì nó sẽ thay đổi rất nhiều trong hệ thống của chúng tôi nếu chúng tôi đi với 2. Tuy nhiên, nếu phương án 2 thực sự là chỉ cách tốt để tiến hành, sau đó ít nhất tôi có thể nói những thay đổi này là cần thiết và tôi đã làm bài tập ở nhà.
CẬP NHẬT: Tôi đã chạy một vài thử nghiệm trên cơ sở dữ liệu mẫu với 100.000 bản ghi trong đó. Những gì tôi thấy là do chỉ số cluster quét IO cần thiết cho tùy chọn 1 là "gần" gấp hai lần tùy chọn 2. Nếu tôi chọn một số lượng lớn các bản ghi (1000 hoặc nhiều hơn) tùy chọn 1 là gấp đôi chậm ngay cả khi tôi làm không bao gồm trường văn bản lớn trong lựa chọn. Khi tôi yêu cầu ít hàng hơn các đường mờ hơn. Tôi là một ứng dụng web, nơi kích thước trang của 50 hoặc hơn là tiêu chuẩn, vì vậy tùy chọn 1 sẽ hoạt động, nhưng tôi sẽ chuyển đổi tất cả các trường hợp sang tùy chọn 2 trong tương lai gần (rất) cho khả năng mở rộng.