Puis-je avoir des index créés sur des tables temporaires (#temp) qui sont créés dynamiquement dans une procédure stockée?
Je suis la création de tables temporaires (#temp_table
) dans ma procédure stockée. C'est un énorme tableau avec des données de grande taille. Alors je suis entrain de créer un index dans la storeed procédure comme il est requis pour la requête plus rapide à la table temp. Mais quand j'exécute la procédure stockée, l'index n'est pas utilisé. L'index n'est pas créé lors de la procédure stockée est exécutée.
Pseudo-code
CREATE PROC abcdefg
AS
...
SELECT col_a, col_b, col_c....
INTO #temp_table
FROM .....
WHERE ....
...
CREATE INDEX abc_idx ON #temp_table (col_a)
...
SELECT col_a FROM #temp_table WITH (INDEX (abc_idx))
...
GO
Lorsque j'essaie d'exécuter la procédure stockée, c'est de ne pas reconnaître l'index. Comment puis-je résoudre ce problème?
C'est pour MS SQL?
OriginalL'auteur Nirmal Singh Raja Reegan | 2009-12-10
Vous devez vous connecter pour publier un commentaire.
Cela se produit généralement parce que les plans d'accès pour les tables temporaires ont été créés avant l'index n'a jamais existé.
Heureusement, vous pouvez utiliser le tableau des contraintes de niveau de contourner ce problème. Depuis l'index pour prendre en charge UNIQUE et des contraintes de CLÉ PRIMAIRE sont définis en même temps que la table temporaire, l'optimiseur va toujours être en mesure d'utiliser ces indices.
Référence: L'optimisation de la Performance /les Index sur les Tables temporaires
l'article que vous avez référencé est à partir de 2004, mais est-il sécuritaire de prendre l'avis de qui circulent sur #temp tables est toujours "bonne pratique"?
OriginalL'auteur OMG Ponies
J'ai essayé le code que vous avez suggéré à l'aide de Sql Server 2005
Lors de l'exécution de la
De commande Comprennent le Plan d'Exécution Réel, il ne montrons que l'indice a été utilisé.
OriginalL'auteur Adriaan Stander