«ВЫБЕРИТЕ ТОП 1 1» ПРОТИВ «ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1»

У меня есть некоторый код .NET, который проверяет наличие записи SQL с умеренно высоким интервалом. Я хочу сделать этот чек как "дешевый" насколько это возможно.

Мне интересно характеристики двух запросов:

IF EXISTS(SELECT 1
          FROM   BigTable
          WHERE  SomeColumn = 200)
  SELECT 1 AS FOUND
ELSE
  SELECT 0 AS FOUND

В.С.

SELECT TOP 1 1
FROM   BigTable
WHERE  SomeColumn = 200 

Они оба производят одинаковые планы выполнения. Но SELECT TOP 1 1, кажется, выполняется быстрее: меньше запросов для анализа, а когда запись не найдена, он отправляет меньше по конвейеру. Я также предполагаю, что он работает быстрее на клиенте, потому что мне просто нужно проверить количество записей, а не маршалировать возвращаемое значение IF EXISTS.

Большинство преимуществ производительности незначительны. Но если оба последовательно возвращают один и тот же результат, то почему бы не выбратьslightly более быстрый метод?

"ВЫБРАТЬ ТОП 1 1" ТЫ лучший способ проверить наличие записи в .NET?

(Мы используем .NET 3.5, и я стараюсь избегать LINQ, потому что он не используется где-либо еще в приложении. У нас также есть некоторые устаревшие приложения VB6, которые мы переносим / переписываем, поэтому им, возможно, потребуется выполнить это.)

РЕДАКТИРОВАТЬ: Еще немного подробнее о дизайне. Эта запись является "заголовком". Есть еще одна таблица с дочерними записями, которые будут прочитаны / проанализированы, когда будет найден этот заголовок. Отсутствие записи - это хорошо: работы нет.

РЕДАКТИРОВАТЬ 2: Отсутствие записи, которая соответствует условию будет происходить чаще. Они приходят спорадическими волнами.

Ответы на вопрос(5)

Ваш ответ на вопрос