SQL Server 2017実行プランでこの警告を見てきました:
警告:操作によりIOが残りました[sic]。実際に読み取られた行数は(3,321,318)でしたが、返された行数は40でした。
SQLSentry PlanExplorerからのスニペットは次のとおりです。
コードを改善するために、SQL Serverが関連する行にアクセスできるように、非クラスター化インデックスを追加しました。これは正常に機能しますが、通常は(大きな)列が多すぎてインデックスに含めることができません。次のようになります。
インデックスのみを追加し、列を含めない場合、次のようになります。インデックスを強制的に使用すると、
明らかに、SQL Serverは、キールックアップは残りのI / Oよりもはるかにコストがかかると考えています。(まだ)多くのテストデータを含まないテストセットアップがありますが、コードが運用環境に入ると、より多くのデータを処理する必要があるため、何らかの非クラスター化インデックスが必要だとかなり確信しています。
SSDで実行する場合、キールックアップは本当に高価ですが、私は(多くのインクルード列を含む)全脂肪インデックスを作成する必要がありますか?
実行計画: https : //www.brentozar.com/pastetheplan/?id=SJtiRte2Xこれは、長いストアドプロシージャの一部です。を探しIX_BatchNo_DeviceNo_CreatedUTC
ます。
sys.dm_exec_query_profiles
実際のコストと見積もりから再計算されます)。推定コスト%をコストの絶対的な指標として使用するのはやめてください。これは相対的であり、昼食に出かけることがよくあります。