Что лучше проверить, если элемент существует или нет: Выберите Количество (ID) ИЛИ Существуйте (...)? - PullRequest
16 голосов
/ 17 июля 2010

Как лучше по производительности определить, существует ли элемент или нет, если таблица содержит более 700 000 строк

if (Select count(id) from Registeration where email='email@w.cn') > 0
    print 'Exist'
else
    print 'Not Exist'

OR

if Exists(Select id from Registeration where email='email@w.cn') 
    print 'Exist'
else
    print 'Not Exist'

Ответы [ 2 ]

28 голосов
/ 17 июля 2010

СУЩЕСТВУЕТ, всегда

  • COUNT будет проходить по таблице или индексу: вы запросили COUNT
  • EXISTS остановится, как только найдет строку

Изменить, чтобы было ясно

Конечно, в этом случае, если столбец электронной почты уникален и проиндексирован, он будет закрыт.

Как правило, EXISTS будет использовать меньше ресурсов и является более корректным. Вы ищете существование ряда, а не «больше нуля», даже если они одинаковы

Edit2: в EXISTS вы можете использовать NULL, 1, ID или даже 1/0: это не проверено ...

21 мая 2011 г. редактировать:

Похоже, что это было оптимизировано в SQL Server 2005+, поэтому COUNT теперь совпадает с EXISTS в этом случае

4 голосов
/ 17 июля 2010

также примите во внимание, что Count () возвращает только int, в котором, если вы посчитаете некоторые данные, которые превышают int, это вызовет ошибку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...