SQL Server có cách đơn giản nào để tìm nạp số liệu về số lượng (và có thể loại khóa) của một truy vấn đã cho trong quá trình thực hiện không?
Đặt vấn đề ...
Tôi đang trong quá trình viết lại một thủ tục lưu trữ khá khó chịu, sử dụng nhiều con trỏ. Một giải pháp dựa trên tập hợp là có thể, và kết quả là tôi đã có ba phiên bản trên đó: phiên bản gốc, phiên bản dựa trên tập hợp với các bảng bảng và phiên bản dựa trên tập hợp hoàn toàn dựa trên CTE. Tôi đang nhận được các số liệu tốt cho giải pháp dựa trên CTE, nhưng vì kích thước và độ phức tạp của truy vấn được tạo bởi phiên bản CTE, tôi cảnh giác khi phát hành nó cho đến khi tôi thực hiện hết sức có thể.
Bây giờ tôi nhận ra rằng các khóa SQL lấy ra là những khóa mà nó nghĩ rằng nó cần phải tháo ra tại một thời điểm nhất định và trên một máy chủ sản xuất được tải, nó có thể hoạt động khác đi, nhưng tôi hy vọng nó sẽ mang lại cho tôi cảm giác về cách nó sẽ hành xử.
Hiện tại tôi đang sử dụng profiler và giữ các giao dịch mở để tôi có thể chạy sp_lock
, nhưng tự hỏi liệu tôi có thiếu một thủ thuật nào trong SQL Server 2008 không.
Ngoài ra, tôi đang cố gắng thuyết phục bản thân rằng trình hồ sơ trả về số lần đọc cao khi chèn vào biến bảng là ổn (với giá trị nhất định là ổn), nhưng tôi đã không thuyết phục được chính mình. Giải pháp CTE có một nửa số lần đọc của phiên bản bảng-var và số lần đọc cao của phiên bản bảng-var dường như hoàn toàn nằm trong phần chèn. Về thời lượng, cả CTE và bảng var đều giống nhau, cho thời gian thực hiện nhanh hơn khoảng 150-200% so với cách tiếp cận dựa trên con trỏ.
fn_trace_gettable
; đã sử dụng nó trước đây, nhưng đừng sử dụng nó thường xuyên đủ để nhớ về nó, sẽ xem xét điều đó, ta.
sys.fn_trace_gettable
. Bạn cũng đã đánh giá một#temp
bảng?