Что лучше проверить, существует ли элемент или нет: выберите "Счет" (ID) или "Exist" (...)?

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

if (Select count(id) from Registeration where email='[email protected]') > 0
    print 'Exist'
else
    print 'Not Exist'

ИЛИ

if Exists(Select id from Registeration where email='[email protected]') 
    print 'Exist'
else
    print 'Not Exist'

Ответ 1

EXISTS, всегда

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

Изменить, чтобы быть четким

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

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

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

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

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

Ответ 2

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