sql >> Databasteknik >  >> RDS >> Sqlserver

Har det några biverkningar att ändra OM FINNS(VÄLJ 1 FRÅN ) till OM FINNS(VÄLJ TOP 1 FRÅN )?

Nej, det ska inte vara någon skillnad. EXISTS löser ut så snart den har hittat en enda matchande rad. Därför är det alltid att föredra framför t.ex. (select COUNT(*) from ...) > 0 - en COUNT skulle tvinga alla rader att beaktas.

Om du skapar följande fyra frågor:

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)

Om du aktiverar exekveringsplaner ser du att den andra frågan genererar en exekveringsplan som innehåller en TOP operatör. Den 3:e och 4:e frågan producerar identiska planer. TOP ignoreras.



  1. När ska jag använda ett sammansatt index?

  2. PostgreSQL ignorerar bindestreck vid beställning

  3. Hur räknar man ord i MySQL / regular expression replacer?

  4. Kan inte kopiera tabellen till en annan databas med pg_dump