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

SQL Server :IF EXISTS ralentit massivement une requête

Avez-vous essayé d'exécuter la requête d'origine avec TOP 1 ? il sera probablement tout aussi lent.

Parfois, lorsque l'optimiseur pense que quelque chose est très probable et va renvoyer un vaste ensemble de données avec peu d'effort (c'est-à-dire que presque tous les enregistrements vont être renvoyés), il choisit principalement des jointures de boucle car il n'a besoin que du premier et d'un La jointure en boucle est bonne pour obtenir seulement quelques enregistrements. Lorsque cela s'avère faux, il faut une éternité et un jour pour obtenir des résultats.

Dans votre cas, cela semble être très rare, donc ce choix fait très mal. Essayez plutôt de faire quelque chose comme SELECT @count = COUNT(*) FROM ... puis en vérifiant si ce nombre est différent de zéro.