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

Changer IF EXIST(SELECT 1 FROM ) en IF EXIST(SELECT TOP 1 FROM ) a-t-il des effets secondaires ?

Non, il ne devrait pas y avoir de différence. EXISTS se retire dès qu'il a trouvé une seule ligne correspondante. C'est pourquoi il est toujours préféré par ex. (select COUNT(*) from ...) > 0 - un COUNT forcerait toutes les lignes à être prises en compte.

Si vous créez les quatre requêtes suivantes :

select * from sys.objects
select top 1 * from sys.objects
select 1 where exists(select * from sys.objects)
select 1 where exists(select top 1 * from sys.objects)

Et activez les plans d'exécution, vous verrez que la deuxième requête génère un plan d'exécution qui inclut un TOP opérateur. Les 3ème et 4ème requêtes produisent identique des plans. Le TOP est ignoré.