Tôi đang chạy SQL Server 2012.Hiệu suất sử dụng DISTINCT COUNT địa chỉ
Tôi có một câu hỏi rằng khi sọc để nó nhất hình thức cơ bản trông như thế này:
SELECT COUNT(DISTINCT fullAddress) as quickCount
FROM leads
WHERE yearID >=12 AND yearID <=21
Bảng dẫn có khoảng 149 triệu bản ghi trong nó. Có một chỉ số nhóm trên leadID và một chỉ mục không nhóm được lập chỉ mục trên YearID và có một bao gồm cho fullAddress.
Truy vấn này vì nó mất khoảng 40 giây để chạy. Tôi nhận ra điều đó không tệ nhưng trong tình huống này không đủ nhanh.
Tôi đã xem kế hoạch thực hiện và từ những gì tôi có thể biết khoảng 60% chi phí là DISTINCT COUNT.
Khi tôi chạy cùng một truy vấn mà không COUNT DISTINCT như thế này:
SELECT COUNT(*) as quickCount
FROM leads
WHERE yearID >=12 AND yearID <=21
Nó chỉ mất 1 giây để chạy.
Thật không may, tôi cần nhận được một số địa chỉ đầy đủ khác biệt. Vì vậy, tôi đang cố gắng tìm ra nếu có bất cứ điều gì tôi có thể làm để làm cho truy vấn đầu tiên chạy nhanh hơn.
Đây là một ảnh chụp màn hình của kế hoạch thực hiện cho cả Truy vấn:
Dưới đây là một liên kết đến đó để xem nó lớn hơn - http://www.sequenzia.com/execPlan.jpg
Từ những gì tôi có thể nói vấn đề chính của tôi là Phân loại riêng biệt (52%).
Bất kỳ trợ giúp hoặc phản hồi nào về điều này sẽ thật tuyệt vời.
Cảm ơn!
CẬP NHẬT
tôi đã tư vấn Thilo và áp dụng chỉ số này:
CREATE INDEX IDX_X ON LEADS(FULLADDRESS, YEARID);
Tôi thực sự tạo ra 2 bảng thử nghiệm mới với cùng 1 triệu hồ sơ chính xác trong mỗi trong số họ. Tôi đã áp dụng cùng một chỉ mục gốc cho cả hai và sau đó chỉ mục trên chỉ là một. Bây giờ khi tôi so sánh 2 bảng trên cùng một kế hoạch thực hiện, một với chỉ số trên là tốt hơn một chút 48% đến 52%. Đây là kế hoạch thực hiện mới - http://www.sequenzia.com/execPlan2.jpg
Điều đó giúp một số nhưng tôi thực sự cần hiệu suất cao hơn. Có ý tưởng nào khác không?