Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Ajouter un INDEX à un CTE

J'ai eu la même exigence. Les index ne peuvent pas être ajoutés à un CTE. Cependant, dans le CTE, sélectionnez l'ajout d'un ORDER BY clause sur les champs joints réduit le temps d'exécution de 20 minutes ou plus à moins de 10 secondes.

(Vous devez également ADD SELECT TOP 100 PERCENT pour autoriser ORDER BY dans une sélection CTE.)

[modifier pour ajouter une citation paraphrasée d'un commentaire ci-dessous] :
Si vous avez DISTINCT dans le CTE, alors TOP 100 PERCENT ne fonctionne pas. Cette méthode de triche est toujours disponible :sans avoir besoin du tout de TOP dans la sélection, modifiez l'instruction ORDER BY pour lire :
ORDER BY [Blah] OFFSET 0 ROWS