sql >> Databáze >  >> RDS >> Sqlserver

Má změna IF EXIST(SELECT 1 FROM) na IF EXIST(SELECT TOP 1 FROM) nějaké vedlejší účinky?

Ne, neměl by v tom být žádný rozdíl. EXISTS vyplácí, jakmile najde jediný odpovídající řádek. Proto je vždy upřednostňována např. (select COUNT(*) from ...) > 0 - COUNT by vynutilo zohlednění všech řádků.

Pokud vytvoříte následující čtyři dotazy:

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)

A zapněte prováděcí plány, uvidíte, že druhý dotaz vygeneruje prováděcí plán, který obsahuje TOP operátor. 3. a 4. dotaz produkuje identické plány. TOP je ignorováno.



  1. Laravel Eloquent VLEVO PŘIPOJTE SE KDE NULL

  2. Nejrychlejší způsob aktualizace velkého počtu řádků pomocí vstupního parametru List<T> v MyBatis na Oracle db

  3. Unit Testing Framework pro Oracle PL/SQL?

  4. Datový typ argumentu numeric je neplatný pro argument 1 funkce podřetězec