Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Промяната на IF EXIST(SELECT 1 FROM ) на IF EXIST(SELECT TOP 1 FROM) има ли странични ефекти?

Не, не трябва да има разлика. EXISTS се спасява веднага щом намери един съвпадащ ред. Ето защо винаги се предпочита пред напр. (select COUNT(*) from ...) > 0 - COUNT ще принуди всички редове да бъдат взети предвид.

Ако създадете следните четири заявки:

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)

И включете плановете за изпълнение, ще видите, че втората заявка генерира план за изпълнение, който включва TOP оператор. Третата и четвъртата заявка произвеждат идентичен планове. TOP се игнорира.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Включване или изключване на идентичността в SQL сървъра

  2. SQL Server 2005 Каскадно изтриване

  3. Вмъкване на стойност на шестнадесетичен низ към полето за изображение на sql сървър добавя допълнителна 0

  4. Рекурсивна заявка, при която котвата и членът имат обединения

  5. Създайте пощенски акаунт в база данни в SQL Server (T-SQL)