Saya telah melihat peringatan ini dalam paket eksekusi SQL Server 2017:
Peringatan: Operasi menyebabkan sisa IO [sic]. Jumlah aktual baris yang dibaca adalah (3.321.318), tetapi jumlah baris yang dikembalikan adalah 40.
Berikut ini cuplikan dari SQLSentry PlanExplorer:
Untuk meningkatkan kode, saya telah menambahkan indeks non-cluster, sehingga SQL Server bisa sampai ke baris yang relevan. Ini berfungsi dengan baik, tetapi biasanya akan ada terlalu banyak kolom (besar) untuk dimasukkan dalam indeks. Ini terlihat seperti ini:
Jika saya hanya menambahkan indeks, tanpa menyertakan kolom, akan terlihat seperti ini, jika saya memaksakan penggunaan indeks:
Jelas, SQL Server menganggap pencarian kunci jauh lebih mahal daripada sisa I / O. Saya memiliki pengaturan pengujian tanpa banyak data pengujian (belum), tetapi ketika kode masuk ke produksi, perlu bekerja dengan lebih banyak data, jadi saya cukup yakin bahwa semacam indeks NonClustered diperlukan.
Apakah pencarian kunci benar-benar mahal , ketika Anda menjalankan pada SSD, bahwa saya harus membuat indeks penuh lemak (dengan banyak kolom termasuk)?
Rencana eksekusi: https://www.brentozar.com/pastetheplan/?id=SJtiRte2X Ini adalah bagian dari prosedur lama yang tersimpan. Carilah IX_BatchNo_DeviceNo_CreatedUTC
.
sys.dm_exec_query_profiles
, kami akan membebani ulang biayanya dari biaya aktual vs. perkiraan). Berhentilah menggunakan estimasi biaya% karena beberapa indikator biaya mutlak - relatif dan sering keluar untuk makan siang.