Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy zmiana IF EXIST(SELECT 1 FROM) na IF EXIST(SELECT TOP 1 FROM) ma jakieś skutki uboczne?

Nie, nie powinno być żadnej różnicy. EXISTS wycofuje się, gdy tylko znajdzie jeden pasujący rząd. Dlatego zawsze jest preferowany nad m.in. (select COUNT(*) from ...) > 0 - COUNT wymusiłoby uwzględnienie wszystkich wierszy.

Jeśli utworzysz następujące cztery zapytania:

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)

I włącz plany wykonania, zobaczysz, że drugie zapytanie generuje plan wykonania, który zawiera TOP operator. Zapytania 3. i 4. generują identyczne plany. TOP jest ignorowany.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak opisać tabelę w SQL Server 2008?

  2. Jak zmienić kolumnę z wartości Null na Not Null w tabeli SQL Server — samouczek SQL Server / T-SQL, część 52

  3. Jak obliczyć bieganie mnożenia

  4. Statystyki i informacje dotyczące wykonywania C# SqlDataReader

  5. Pobieranie danych podrzędnych z listy obiektów