Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Cambiare IF EXIST(SELECT 1 FROM ) a IF EXIST(SELECT TOP 1 FROM ) ha degli effetti collaterali?

No, non dovrebbe esserci alcuna differenza. EXISTS si salva non appena trova una singola riga corrispondente. Ecco perché è sempre preferito ad es. (select COUNT(*) from ...) > 0 - un COUNT imporrebbe la considerazione di tutte le righe.

Se crei le seguenti quattro query:

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)

E attiva i piani di esecuzione, vedrai che la seconda query genera un piano di esecuzione che include un TOP operatore. La 3a e la 4a query producono identiche piani. Il TOP viene ignorato.