Tôi đã thấy cảnh báo này trong các kế hoạch thực hiện SQL Server 2017:
Cảnh báo: Hoạt động gây ra dư IO [sic]. Số lượng hàng thực tế được đọc là (3,321,318), nhưng số lượng hàng được trả về là 40.
Đây là đoạn trích từ SQLSentry PlanExplorer:
Để cải thiện mã, tôi đã thêm một chỉ mục không được nhóm, để SQL Server có thể đến các hàng có liên quan. Nó hoạt động tốt, nhưng thông thường sẽ có quá nhiều cột (lớn) để đưa vào chỉ mục. Nó trông như thế này:
Nếu tôi chỉ thêm chỉ mục, không bao gồm các cột, nó sẽ trông như thế này, nếu tôi buộc sử dụng chỉ mục:
Rõ ràng, SQL Server nghĩ rằng việc tra cứu khóa đắt hơn nhiều so với I / O còn lại. Tôi có một thiết lập thử nghiệm mà không có nhiều dữ liệu thử nghiệm (nhưng), nhưng khi mã đi vào sản xuất, nó cần phải hoạt động với nhiều dữ liệu hơn, vì vậy tôi khá chắc chắn rằng cần một số chỉ mục NonClustered.
Các tra cứu quan trọng có thực sự tốn kém không , khi bạn chạy trên SSD, tôi phải tạo các chỉ mục đầy đủ chất béo (với rất nhiều cột bao gồm)?
Kế hoạch thực hiện: https://www.brentozar.com/pastetheplan/?id=SJtiRte2X Đây là một phần của thủ tục lưu trữ dài. Hãy tìm IX_BatchNo_DeviceNo_CreatedUTC
.
sys.dm_exec_query_profiles
, chúng tôi sẽ tính lại chi phí đó từ chi phí thực tế so với ước tính). Ngừng sử dụng% chi phí ước tính như một số chỉ số tuyệt đối về chi phí - nó tương đối và thường ra ngoài ăn trưa.