none
Tablas variables o CTE RRS feed

  • Pregunta

  • Saludos , 

    Mi pregunta en esta ocación es la siguiente a mi me gusta utilizar mas las cte que las tablas variables, para mi son mas comprensivas y tengo mejor dominio de ellas, ahora bien segús sus experiencias cual es mejor utilizar en sentido general y porque, porque vi una desventaja en las CTE y es que no puedes utilizar indixes.


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Proponer como respuesta"

    Blog
    J.Joaquin

    viernes, 14 de marzo de 2014 13:47

Respuestas

  • La respuesta es: depende del caso.

    Si en el procedimiento almacenado o batch o trigger, no vas a usar más de una vez el resultado de la CTE, veo difícil la justificación de usar una variable de tabla. Si se va a usar más de una vez, es posible que sea más eficiente guardar primero el resultado de la CTE en una varible de tabla o posiblemente mejor en una tabla temporal y reusar el resultado en vez que ejecutar la consulta varias veces.

    En cuanto a que las CTE's no puedan usar índices, efectivamente no se puede crear un índice sobre una CTE pero la CTE es parte de una consulta y para ejecutar la consulta entera SQL Server utilizará los índices que considere oportunos para ejecutar la consulta de la forma más eficiente posible.

    Por otra parte en las variables de tabla sólo se pueden crear índices únicos por medio de la definición de la clave primaria y restricciones de unicidad. No se pueden crear índices con CREATE INDEX en una variable de tabla. En las tablas temporales sí.

    Nunca he visto que alguien se pregunte por usar una variable de tabla o una CTE. Son cosas bastante diferentes y pueden usarse conjuntamente. Por ejemplo puedes usar una CTE para insertar, actualizar y eliminar filas en una variable de tabla. Normalmente la duda es si usar una variable de tabla o una tabla temporal.

    viernes, 14 de marzo de 2014 18:14