2000 registros son pocos pero una iteracion de 2000 registros no lo es.
Ademas podria por algo asi requerir hacer un hash cuando si tiene
informacion estadistica quiza sepa que solo hay N registros que le sirven y
por lo tanto un nested loop es mejor.

Les paso unas ideas generales.

Las variables tabla no siempre residen en memoria, si hay presion de memoria
las paginas se envian a la TempDb. Las tablas temporales mantienen copias de
las paginas en el buffer cache (en memoria). Es lo mismo desde el punto de
vista de la contencion que se produce en las tablas de metadata ya que en
ambos casos la info reside en las tablas del sistema. Las variables de tipo
tabña NO participan de las transaciones y las tablas temporales si. La
operaciones no estan logueadas en el transaction log y por lo tanto no se
toman en cuenta en el  commit o rollback. Las variables tabla no soportan
DDL sobre las mismas y tampoco indices salvo los unique constraints. La
tablas temporales si lo que puede acelerar las consultas. Tampoco se guardan
estadisticas por lo que evita las recompilaciones y genera planes con esa
falta de información y ademas no generan planes de acceso paralelo.
Si tienes una CTE recursiva puede que un indice o la informacion estadistica
ayude mucho ya que elige un mejor plan.


-- 
--------------------------------
Ing. José Mariano Alvarez
http://blog.josemarianoalvarez.com/

SQL Total Consulting








On Fri, Feb 27, 2009 at 15:15, Maxi Accotto <[email protected]> wrote:

>  Hola hay mas de un factor a analizar, las variables tipo tabla usan ram,
> como esta de ram el servidor en ese momento?
>
>
>
>
>
> Saludos
>
>
>
> *Maximiliano Damian Accotto*
>
> *Microsoft MVP en SQLServer*
>
> *SQL Total Consulting - Servicios profesionales en SQL Server*
>
> *Buenos Aires-Argentina*
>
> *Movil: (011)-15-5868-5599*
>
> *Desde el exterior: (+54-911)-5868-5599*
>
> *[email protected]<[email protected]>
> *
>
> *im: [email protected]*
>
>
>
>
>
> *De:* [email protected] [mailto:[email protected]] *En nombre de *Esteban
> Grinberg
> *Enviado el:* viernes, 27 de febrero de 2009 03:08 p.m.
> *Para:* Maxi
> *Asunto:* [dbms] Tablas Variables vs Tablas Temporales
>
>
>
> Yo siempre pense que como metodo de almacenamiento temporal y para
> volumenes no muy grandes, una variable de tabla era mas eficiente que una
> tabla temporal.
> Pero hoy surgio un caso curioso, donde teniamos una query que usaba
> variables de tablas y tardaba 5 segundos. Exactamente la misma query, pero
> reemplazando la variable de tabla por una tabla temporal, redujo el tiempo a
> menos de 500 milisegundos!!. Hay que aclarar que es una query recursiva que
> usa CTE (es un 2005), por lo que me surje la duda si hay algun tipo de
> comportamiento extraño en el motor de SQL Server con la combinacion de CTEs
> y variables de tabla...
> Lo raro del asunto, es que el volumen de datos es infimo, apenas 2000
> registros, pero analizando el plan de ejecucion entre una query con tabla
> temporal y la otra, con variable de tabla, es radicalemente distinto.
>
> Alguien tiene idea de porque?
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
> Version: 8.0.237 / Virus Database: 270.11.3/1975 - Release Date: 02/27/09
> 07:05:00
>

Responder a