Tôi đang làm việc với hệ thống lưu trữ dữ liệu trong một cấu trúc giống như bảng tính - ngày/giờ trong tiêu đề cột, số đo (ví dụ: tên bác sĩ, Rh, nhóm máu) trong cột đầu tiên của mỗi hàng và một giá trị trong ô giao nhau. Các báo cáo dựa trên cấu trúc này thường yêu cầu phải hiển thị 10 hoặc nhiều hơn các biện pháp này.Máy chủ SQL: Giá trị bảng nội tuyến UDF so với dạng xem nội tuyến
Vì mục đích báo cáo, tập dữ liệu cần phải có một hàng cho từng bệnh nhân, ngày/giờ đo được thực hiện và cột cho mỗi phép đo. Về bản chất, người ta cần xoay vòng cấu trúc 90 độ.
Tại một thời điểm, tôi thực sự đã sử dụng chức năng PIVOT của SQL Server để thực hiện điều đó. Vì nhiều lý do, nó trở nên rõ ràng rằng cách tiếp cận này sẽ không hoạt động. Tôi quyết định rằng tôi sẽ sử dụng chế độ xem nội tuyến (IV) để xoa bóp dữ liệu sang định dạng mong muốn. Truy vấn đơn giản tương tự như:
SELECT patient_id,
datetime,
m1.value AS physician_name,
m2.value AS blood_type,
m3.value AS rh
FROM patient_table
INNER JOIN (complex query here
WHERE measure_id=1) m1...
INNER JOIN (complex query here
WHERE measure_id=2) m2...
LEFT OUTER JOIN (complex query here
WHERE measure_id=3) m3...
Như bạn có thể thấy, trong một số trường hợp, những IV được sử dụng để hạn chế các bộ dữ liệu kết quả (INNER JOIN), trong trường hợp khác họ không hạn chế dataset (LEFT OUTER JOIN). Tuy nhiên, phần 'truy vấn phức tạp' về bản chất là giống nhau đối với từng biện pháp này, ngoại trừ sự khác biệt trong measure_id. Trong khi cách tiếp cận này hoạt động, nó dẫn đến các câu lệnh SQL khá lớn, giới hạn sử dụng lại và cho thấy truy vấn lỗi.
Suy nghĩ của tôi là thay thế cụm từ 'truy vấn phức tạp' và mệnh đề WHERE bằng một bảng giá trị UDF nội tuyến. Điều này sẽ đơn giản hóa các truy vấn một chút, giảm lỗi và tăng tái sử dụng mã. Câu hỏi duy nhất trong đầu tôi là biểu diễn. Cách tiếp cận UDF có dẫn đến giảm đáng kể hiệu suất không? Nó có thể cải thiện vấn đề?
Cảm ơn bạn đã dành thời gian và cân nhắc.
Chế độ xem truyền thống sẽ không hoạt động ở khách hàng này vì DBA có khả năng kháng quá các đối tượng không được nhà cung cấp xác định trong DB. Kết quả là, hầu hết các truy vấn được nhúng trong mỗi báo cáo (chúng tôi đang sử dụng CR). Lý do tôi nghĩ về UDF là mô đun của họ. Phần khó khăn là bán DBA theo ý tưởng ... Chế độ xem được lập chỉ mục có tương tự như chế độ xem vật chất của Oracle không? – craig
Tôi đã không làm việc với Oracle trong một thời gian dài, vì vậy tôi không biết. Tuy nhiên, tôi sẽ chỉ ra rằng một UDF là một đối tượng không được nhà cung cấp xác định, vì vậy bạn có thể chạy vào cùng một pushback ở đó. Tôi tin rằng câu trả lời của người phát biểu với một bảng tạm thời hoặc biến có thể là đặt cược tốt nhất của bạn nếu bạn bị giới hạn để sửa đổi các đối tượng. Cũng giống như một sang một bên, tôi có xu hướng tạo ra một db phụ với các bảng liên kết ngang, vv, khi giao dịch với các nhà cung cấp dbs. Bằng cách này tôi có thể có mã tùy chỉnh bên ngoài cơ sở dữ liệu của họ; bạn có thể muốn khám phá điều đó như một tùy chọn trong tương lai. –
Chế độ xem được lập chỉ mục giống như chế độ xem vật chất của Oracles. Chế độ xem phải tuân theo các hạn chế nhất định: http://msdn.microsoft.com/en-us/library/ms191432.aspx và chỉ Enterprise Edition mới xem xét sử dụng chế độ xem được lập chỉ mục để truy cập dữ liệu. Phiên bản tiêu chuẩn và phiên bản thấp hơn buộc phải sử dụng chế độ xem iindexed một cách rõ ràng bằng cách thêm gợi ý NOEXPAND, xem http://msdn.microsoft.com/en-us/library/ms181151.aspx –