我在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
,我们将从实际费用与估算费用中重新计算费用。停止使用估算的成本百分比作为成本的绝对指标-它是相对的,经常被用掉。