Despues de varios años varios cabezazos contra la mesa vamos aprendiendo un poco los índices y planes de ejecución.
En esa oportunidad solo quiero mencionar a la operación RID Lookup, esta operación es muy costosa y afecta el rendimiento de la consulta, por eso debemos tratar de removerlo de nuestro plan de ejecución. El siguiente caso se hace un update a una tabla:
UPDATE dbo.Producto_Bulk SET Valido=0, ErrorMensaje=’Codigo Invalido’ WHERE ProveedorID = @pID AND ArchivoCargaID=@logID AND Valido=1 AND Codigo = »
Existía un índice non-clustered para ProveedorID y para ArchivoCargaID, pero el campo Valido y el campo Codigo no estaban dentro del indice, se estaba generando la operación RID Lookup. Es una aplicación de carga masiva de productos que se venía abajo debido al maldito RID Lookup, se carga entre 30,000 productos a 200,000 por archivo, y además de la validación de vacíos también hay validación de repetidos, en el update de repetidos hay hasta dos RID Lookup, y este punto es donde la consulta no daba mas si quieres actualizalo tu, que yo no lo voy hacer, y se generaba el queridísimo timeout.
Después de seguir las recomendaciones de mi amigo Pinal Dave, pueden remover las operaciones RID Lookup del plan de ejecución, y salvar sus aplicaciones… bueno por el momento… hombre, que el mantenimiento de base de datos no tiene fin
Fuente: SQL SERVER – Query Optimization – Remove Bookmark Lookup – Remove RID Lookup – Remove Key Lookup.
Saludos,