He visto esta advertencia en los planes de ejecución de SQL Server 2017:
Advertencias: La operación causó IO residual [sic]. El número real de filas leídas fue (3.321.318), pero el número de filas devueltas fue 40.
Aquí hay un fragmento de SQLSentry PlanExplorer:
Para mejorar el código, agregué un índice no agrupado para que SQL Server pueda acceder a las filas relevantes. Funciona bien, pero normalmente habría demasiadas (grandes) columnas para incluir en el índice. Se parece a esto:
Si solo agrego el índice, sin incluir columnas, se ve así, si fuerzo el uso del índice:
Obviamente, SQL Server cree que la búsqueda de claves es mucho más costosa que la E / S residual. Tengo una configuración de prueba sin muchos datos de prueba (todavía), pero cuando el código entra en producción, necesita trabajar con muchos más datos, por lo que estoy bastante seguro de que se necesita algún tipo de índice no agrupado.
¿Son realmente costosas las búsquedas de claves , cuando se ejecuta en SSD, que tengo que crear índices completos (con muchas columnas de inclusión)?
Plan de ejecución: https://www.brentozar.com/pastetheplan/?id=SJtiRte2X Es parte de un largo procedimiento almacenado. Buscar IX_BatchNo_DeviceNo_CreatedUTC
.
sys.dm_exec_query_profiles
, la reembolsaremos de los costos reales en comparación con los estimados). Deje de usar el porcentaje de costo estimado como un indicador absoluto del costo: es relativo y, a menudo, sale a almorzar.