que estaba teniendo un tiempo horrible hoy tratando de obtener una consulta para realizar la forma en que se puede esperar. Tuve que hacer un pequeño cambio en una función valorada en la tabla que vive en la consulta de ayer y ese cambio creó un gran impacto en el rendimiento de la consulta. Después de evaluar el plan de ejecución y observar las estadísticas IO y Time, descubrí que, debido a que cambié la función para devolver una variable de tabla en lugar de solo un conjunto de resultados, estaba realizando un análisis completo en una de las tablas consultadas.Tabla función de valor matando a mi rendimiento de las consultas
Mi pregunta es ¿por qué tener que devolver la tabla (TableVariable) en lugar de sólo un Seleccionar/conjunto de resultados causa un cambio tan grande en el plan?
Stumped ....
Agregado una cita del artículo de CSS de referencia que explica mejor que yo :) Tengo que estar en desacuerdo con el voto en negativo. – AdaTheDev
Vi a Kimberly Tripp hacer una demostración sobre esto en una conferencia una vez, con un UDF muy simple que no incluía ninguna tabla, (por lo que las estadísticas serían irelevantes). Todo lo que hizo udf fue convertir un parámetro de entrada usando una expresión simple basada en otra columna en cada fila. Un udf era el valor de la tabla estándar udf, el otro estaba en línea udf. SQL generó un par de millones de filas (una para cada fila en la tabla). Udf en línea procesada en menos de un segundo. El udf estándar tomó varios minutos. –
@charles Bretana Sí, pero está hablando de pasar de UDF escalar en línea a UDF con valor de tabla. Mientras que OP ha pasado de la función de valor de la tabla en línea a la UDF con valor de tabla de multi-estado.Entonces mi respuesta es correcta en este escenario/contexto y no se justifica un voto a la baja – AdaTheDev