2009-04-21 9 views
3

Ce qui serait plus efficace pour stocker des données temporaires (50k lignes dans un et 50k dans un autre) pour effectuer le calcul. Je vais faire ce processus une fois, tous les soirs.Table temporaire SQL Server 2000 vs variable de table

Comment vérifiez-vous l'efficacité lorsque vous comparez quelque chose comme ça?

Répondre

6

Les résultats varient sur lequel il sera plus facile de stocker les données, sur disque (#temp) ou en mémoire (@temp).

Quelques extraits des références ci-dessous

  • Une table temporaire est créée et sur le disque, dans la tempdb base de données du système.
  • Une variable de table est créée en mémoire et fonctionne donc légèrement mieux que les tables #temp (également parce qu'il y a encore moins de verrouillage et de consignation dans une variable de table). Une variable de table peut toujours exécuter des E/S sur tempdb (ce qui est l'endroit où les problèmes de performance des tables #temp se manifestent), bien que la documentation ne soit pas très explicite à ce sujet.
  • Les variables de table entraînent moins de recompilations d'une procédure stockée par rapport aux tables temporaires.
  • [Y] Vous pouvez créer des index sur la table temporaire pour améliorer les performances des requêtes.

En ce qui concerne votre cas avec 50k lignes:

Comme votre taille de données devient plus grande, et/ou l'utilisation répétée des augmentations temporaires de données, vous constaterez que l'utilisation des tables de #temp fait plus de sens

Références:

+0

Dans mon expérience 50K serait trop pour une table var mais je n'ai pas de données concrètes pour soutenir cela. J'essaie généralement de garder des vars de table <5K. – brendan

+3

Vous pouvez créer des index supplémentaires sur # tables alors que vous ne pouvez pas créer d'index sur vars. – Joe

+1

Une variable temp débordera sur le disque aussi lorsque vous pomper suffisamment de données, 50K lignes le pousseront sur le disque partiellement – SQLMenace

3

Il peut y avoir une grande différence de performance entre l'utilisation des variables de table et les tables temporaires. Dans la plupart des cas, les tables temporaires sont plus rapides que les variables de table. J'ai pris l'astuce suivante du groupe de discussion privé SQL Server MVP et j'ai reçu l'autorisation de Microsoft pour le partager avec vous. Un MVP a remarqué que bien que les requêtes utilisant des variables de table ne génèrent pas de plans de requête parallèles sur une grande boîte SMP, des requêtes similaires utilisant des tables temporaires (locales ou globales) et s'exécutant dans les mêmes circonstances généraient des plans parallèles.

Plus de SQL Mag (abonnement requis malheureusement, je vais essayer de trouver plus de ressources momentanément)

EDIT: est un peu plus ici des informations détaillées de CodeProject

+0

Merci pour le conseil. Je suis tombé sur l'article codeproject juste après avoir posté cette question. –

Questions connexes