Tôi có một SQL 2005 DB chạy trong môi trường ảo.Cách tốt nhất để so sánh 2 biến thể của truy vấn SQL để thực hiện là gì?
Để đơn giản hóa mọi thứ, giả sử tôi có hai truy vấn SQL SELECT. Cả hai đều làm điều tương tự. Nhưng tôi đang cố gắng phân tích chúng cho mục đích hiệu suất.
Nói chung, tôi sẽ kích hoạt một DB cục bộ, tải lên một số dữ liệu và sử dụng thời gian để so sánh một biến thể với các biến thể khác.
Nhưng trong trường hợp này, vì DB lớn và đó là một hộp kiểm, khách hàng đã đặt nó trên một máy chủ đang phục vụ các máy ảo khác.
DB quá lớn để kéo xuống cục bộ, vì vậy đã hết (ít nhất là bây giờ).
Nhưng vấn đề chính của tôi là khi tôi chạy truy vấn đối với máy chủ, thời gian là tất cả các nơi. Tôi có thể chạy + chính xác + cùng một truy vấn 4 lần và nhận được thời gian của 7 giây, 8 phút, 3: 45 phút và 15 phút.
Suy nghĩ đầu tiên của tôi là sử dụng SET STATISTICS IO ON. Tuy nhiên, điều đó mang lại cơ bản đọc và ghi số liệu thống kê trên các bảng là truy vấn, tùy thuộc vào các biến thể trong truy vấn (bảng tạm, so với lượt xem, so với kết nối, v.v.). tổng hợp.
Tôi sau đó mặc dù SET THỜI GIAN THỜI GIAN ON, và chỉ sử dụng thời gian CPU, nhưng điều đó dường như giảm giá tất cả các IO, mà cũng không làm cho một đường cơ sở tốt.
Câu hỏi của tôi là có bất kỳ kỹ thuật phân tích thống kê hoặc hiệu suất nào khác có thể hữu ích trong tình huống như thế này không?
Là so sánh * rất đơn giản, bạn có thể chạy cả hai trong cùng một lô với kế hoạch thực hiện chương trình và xem cái nào chiếm nhiều nhất trong tổng số phần trăm. – adrianbanks
@adrian Kế hoạch thực hiện chỉ là hướng dẫn. ước tính chi phí subtree A vs B thường sai khi thực sự thực hiện – RichardTheKiwi
@Richard: Điều đó có đúng ngay cả khi sử dụng kế hoạch thực hiện thực tế không? – adrianbanks