martes, 26 de mayo de 2009

Temporary tables vs table variables


Se parecen verdad? Pero sólo en los nombres, porque estos términos distan hasta en cosas como el rendimiento, veámos.

El considerar usar una u otra dependerá de las necesidades inmediatas, muchos echan por la borda las tablas temporales desde el primer momento, pero veremos que las cosas existen para cubrir una necesidad de información, que muchas veces es blanca y otras negra.

Cosas importantes a considerar:


  1. Al igual que una tabla temporal local, una variable table solo puede ser utilizada por la sesión que la creo, pero esta es más limitada ya que solo puede ser vista por el batch donde fue creada y una vez finalizado el batch es destruida automáticamente.

  2. Las variables table no contienen estadísticas como las tablas temporales, este uno de los factores más importantes a considerar, ya que sin estas estadísticas SQL Server no puede tomar una buena decisión a la hora de generar el plan de ejecución. Aunque esto puede dejar de ser importante si la cantidad de información que vamos a manejar es muy pequeña.

  3. Las tablas temporales debido a que usan estadísticas, generan recompilaciones, cosa que no pasa con las variables table.

  4. Los cambios realizados sobre una variable table, no son tomados en cuenta en las transacciones, por lo que si una operación es terminada a la mitad que involucre cambios a una variable table, el rollback no se lleva a cabo en la variable table.

  5. Las variables table, generan menos bloqueos y hacen menos uso del log de transacciones, pero existe una excepción, ya que no es posible hacer uso de un SELECT INTO en las variables table, por lo que en este caso cuando se inserta información en una variable table se realizan más operaciones en el log de transacciones que en una tabla temporal, que si puede hacer uso del SELECT INTO.

En resumen, cuando estemos utilizando pocos registros es mejor usar variables table, pero cuando vamos a hacer uso de muchos registros, primero debemos verificar que tipo de queries vamos a ejecutar, si son queries que no requieren de estadísticas se va a tener un mejor desempeño con las variables table, pero si los queries requieren de las estadísticas es mejor el uso de tablas temporales. Nos Vemos.

No hay comentarios.:

Publicar un comentario