Plan d'exécution, sur requête avec des tables temporaires
J'ai une procédure stockée qui fait quelque chose comme ceci:
SELECT Id
INTO #temp
FROM table
WHERE ...
DELETE FROM #temp
INNER JOIN table2 ON a=b
WHERE ...
Mais il tourne lentement. Lorsque j'essaie d'afficher le Plan d'Exécution, je ne peux pas depuis SQL Server Management Studio dit "Msg 208, Niveau 16, État 0, la Ligne 31 nom d'objet non Valide '#temp'."
Est-il possible d'afficher le plan d'exécution (ou les détails d'exécution (le plan)) pour ce type de script?
sql-server-performance.com/2007/temp-tables-vs-variables
Ce lien contient des erreurs. Les variables de Table sont enregistrés même que
Ce lien contient des erreurs. Les variables de Table sont enregistrés même que
#temp
tables afin de permettre l'instruction rollback.OriginalL'auteur Diego Jancic | 2012-01-11
Vous devez vous connecter pour publier un commentaire.
SET SHOWPLAN_TEXT ON
(ou en cliquant sur Afficher le Plan d'Exécution Estimé est de SSMS) crée un plan au lieu de l'exécution du SQLCar cela crée de la #temp
on va à l'échec
Donc la solution est d'ajouter ce en haut (ou en faire l'équivalent via SSMS)
OriginalL'auteur Conrad Frix
Il devrait vous permettre de voir le plan d'exécution estimé pour la première déclaration bien.
Pour la deuxième déclaration, vous aurez besoin pour créer et remplir le
#temp
table (la population est important afin qu'il vous montre le plan qui sera utilisé pour le nombre correct de lignes).(Ou bien sûr, vous pouvez simplement allumer la "Inclure le Plan d'Exécution Réel" option dans SSMS et exécuter la totalité si vous n'êtes pas spécifiquement en essayant de voir le plan estimé)
OriginalL'auteur Martin Smith
L'optimiseur, qui est ce qui est utilisé pour générer des plans d'Exécution Estimés, ne pas exécuter de T-SQL. Il fait exécuter les instructions par le biais de la algebrizer , le processus décrit précédemment, qui est responsable de vérifier les noms des objets de base de données.
Depuis la requête n'a pas encore été exécuté, la table temporaire n'existe pas encore. C'est la cause de l'erreur.
Une façon de résoudre ce (et de tester le plan d'exécution) est de créer la table #temp avant et faire un
insert into
au lieu deselect ... into
dans la procédure stockée.OriginalL'auteur aF.
Vous pouvez utiliser cette instruction avant d'exécuter la requête
OriginalL'auteur praveen