Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Hat das Ändern von IF EXIST(SELECT 1 FROM ) in IF EXIST(SELECT TOP 1 FROM ) Nebenwirkungen?

Nein, es sollte keinen Unterschied geben. EXISTS springt aus, sobald es eine einzige passende Zeile gefunden hat. Deshalb wird es z.B. immer vorgezogen. (select COUNT(*) from ...) > 0 - ein COUNT würde erzwingen, dass alle Zeilen berücksichtigt werden.

Wenn Sie die folgenden vier Abfragen erstellen:

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)

Wenn Sie Ausführungspläne aktivieren, sehen Sie, dass die zweite Abfrage einen Ausführungsplan generiert, der ein TOP enthält Operator. Die 3. und 4. Abfrage ergeben identisch Pläne. Die TOP wird ignoriert.