sql >> Database >  >> RDS >> Sqlserver

Heeft het wijzigen van IF EXIST(SELECT 1 FROM) in IF EXIST(SELECT TOP 1 FROM) bijwerkingen?

Nee, er mag geen verschil zijn. EXISTS springt eruit zodra het een enkele bijpassende rij heeft gevonden. Daarom heeft het altijd de voorkeur boven b.v. (select COUNT(*) from ...) > 0 - een COUNT zou dwingen om alle rijen in overweging te nemen.

Als u de volgende vier zoekopdrachten maakt:

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)

En als u uitvoeringsplannen inschakelt, zult u zien dat de tweede query een uitvoeringsplan genereert met een TOP exploitant. De 3e en 4e zoekopdracht produceren identiek plannen. De TOP wordt genegeerd.



  1. MySQL 17,6 miljoen rijen (1,2 gb) volledige tabel update is te traag

  2. Oracle SQL-escape-teken (voor een '&')

  3. Dumpbestand MySQL 5.6.10

  4. SSL gebruiken om vanuit PHP verbinding te maken met mySQL