2010-09-21 44 views
17

Làm cách nào để so sánh hai truy vấn X và Y và nói rằng X là tốt hơn Y, khi cả hai đều mất gần như cùng một thời gian trong các trường hợp nhỏ?Cách so sánh hai truy vấn?

Vấn đề là tôi có hai truy vấn được cho là chạy trên một cơ sở dữ liệu rất lớn, do đó, chạy và đánh giá không phải là một lựa chọn khá. Do đó, chúng tôi đã tạo một cơ sở dữ liệu nhỏ để thực hiện một số thử nghiệm. Đánh giá truy vấn nào tốt hơn là một vấn đề, vì trên cơ sở thử nghiệm của chúng tôi, chúng chạy gần như cùng một lúc (khoảng 5 phút). Bên cạnh thời gian để quay trở lại, một cách khác để đo lường truy vấn tốt như thế nào?

+0

Xin chào, tôi chỉ đặt câu hỏi đó vào câu hỏi MSSQL – User7354632781

Trả lời

26
SET STATISTICS IO ON 
SET STATISTICS TIME ON 

Chạy truy vấn và so sánh số lần đọc logic cho các bảng và thời gian thực thi khác nhau.

+8

@CombatCaptain Bạn cũng có thể sắp xếp các truy vấn so sánh cùng nhau trong SSMS và nhấn 'CTRL + M' (bao gồm kế hoạch thực hiện thực tế) và sau đó là' F5'. Sau đó di chuột qua nút đầu tiên trong tab 'Kế hoạch thực thi thực tế' và đọc' Chi phí ước tính chi phí phụ ". –

+2

Những phát biểu này dường như không được hỗ trợ chung. L ERI [15001] Đã xảy ra lỗi cú pháp tại hoặc trước: SET STATISTICS IO ON – dokaspar

2

Bạn đã xem xét các kế hoạch truy vấn chưa? Nếu các truy vấn trả về cùng một dữ liệu và đang dùng cùng một khoảng thời gian để thực thi, tôi đoán là các kế hoạch truy vấn sẽ gần như giống hệt nhau có nghĩa là không có sự khác biệt có ý nghĩa giữa hai truy vấn.

Ngoài ra, bạn có tính đến các truy vấn hoạt động khác nhau khi kích thước cơ sở dữ liệu thay đổi không?

Tôi tự hỏi bạn có sớm tối ưu hóa mã không. Trong tâm trí của tôi, nếu tôi có một truy vấn hoạt động và có thể hiểu được, tôi có thể giải quyết các vấn đề hiệu suất thông qua các chỉ mục. Và điều đó thường dễ hơn thay đổi các truy vấn để cải thiện hiệu suất.

3

Như đã đề cập, hãy kiểm tra kế hoạch thực hiện.

Quan trọng, so sánh 2 truy vấn một cách công bằng bằng cách xóa bộ nhớ cache giữa mỗi lần chạy, để đảm bảo bạn không thấy kết quả sai lệch do ảnh hưởng của dữ liệu đã được lưu vào bộ nhớ cache (không chạy trên máy chủ sản xuất):

DBCC DROPCLEANBUFFERS -- clear proc plan cache 
DBCC FREEPROCCACHE -- clear data cache 

Sau đó, những gì tôi thường làm là kiểm tra Đọc, Ghi, CPU và Thời lượng để so sánh.

Điều rất quan trọng là bạn phải thử nghiệm với khối lượng dữ liệu cấp sản xuất (và lý tưởng hơn để xem cách nó sẽ mở rộng quy mô). Đó là ở những tập mà bạn sẽ thực sự thấy bất kỳ sự khác biệt hiệu suất. Thử nghiệm với khối lượng dữ liệu nhỏ có thể khiến bạn gặp vấn đề sau này.

0

Đánh giá hiệu suất truy vấn trên một tập dữ liệu khác nhau đáng kể thường có ý nghĩa rất ít. Các kế hoạch truy vấn và hiệu quả của chúng có thể khác nhau tùy thuộc vào số liệu thống kê dữ liệu.

Vì vậy, để có được bất kỳ ước tính thực tế nào, bạn cần một cơ sở dữ liệu gần với cơ sở dữ liệu "thực" nhất có thể. Hay nhất của tất cả, lấy một bản sao của "cơ sở dữ liệu lớn" của bạn và điều chỉnh các truy vấn của bạn với nó.