Что состоит в том, чтобы определить самый быстрый путь, существует ли строка с помощью Linq для SQL?

47
задан Protagonist 15 March 2009 в 23:23
поделиться

3 ответа

Эти Count() подход может сделать дополнительную работу, поскольку (в TSQL) EXISTS или TOP 1 часто намного более быстры; дб может оптимизировать, "там по крайней мере одна строка". Лично, я использовал бы любой/предикат перегрузку:

if (dc.Users.Any(u => u.Name == name)) {...}

, Конечно, можно сравнить то, что каждый делает путем наблюдения TSQL:

dc.Log = Console.Out;
91
ответ дан Marc Gravell 7 November 2019 в 23:09
поделиться

Я не соглашаюсь, что выбор лучшего 1 будет всегда превосходить избранный счет по характеристикам для всех реализаций SQL. Это является все зависящим от реализации, Вы знаете. Любопытно, даже природа данных, хранивших в конкретной базе данных также, влияет на полный результат.

Позволяют нам исследовать их обоих способ, которым я реализовал бы их, если бы я должен был сделать так: Для обоих случаев проекция (оператор Where) оценка является общим шагом.

Затем для избранного лучшего 1, необходимо будет сделать чтение всех полей (если Вы действительно не выбирали лучший 1 'x', например: выберите лучший 1 1). Это будет функционально эквивалентно IQueryable. Любой (...)., за исключением того, что Вы проведете некоторое время, высвечиваясь в значении для каждого столбца первой записи, с которой встречаются, если БУДЕТ СУЩЕСТВОВАТЬ. Если ИЗБРАННЫЙ TOP найден в операторе, проекция является усечением, если нет никакой постпроекции proc (например, пункт ORDER BY). Это предварительно обрабатывает, несет маленькие расходы, но это - дополнительные расходы, если никакая запись действительно не существует, в этом случае, полный проект все еще сделан.

Для избранного количества, предварительно обрабатывание не сделано. Проекция сделана и если СУЩЕСТВУЕТ, ложь, результат мгновенен. Если СУЩЕСТВУЕТ, верно, количество все еще быстро, потому что это будет простой dW_Highest_Inclusive - dW_Lowest_Exclusive. Столь же быстрый как 500 - 26. Если существует, ложь, результатом является еще больше момента.

остающийся случай поэтому: Как быстро проекция и что Вы освобождаете путем выполнения полной проекции? И ответ приводит к наиболее важнейшей проблеме сюда, которая является: индексированное поле [NAME] или нет! Если у Вас будет индекс на [ИМЕНИ], то производительность любого запроса будет так близка, что это сводится к предпочтению разработчика.

В общем и целом, я просто запишу два - четыре запроса linq и произведу разницу во времени прежде и после.

  1. избранное количество
  2. выбирает лучший 1
  3. , выбирают лучший 1 1
  4. выбор любой

Повторение все 4 с некластеризованным индексом на [ИМЕНИ];

0
ответ дан Pita.O 7 November 2019 в 23:09
поделиться

Я думаю:

if (dc.Users.Any(u => u.Name == name)) {...}

лучший подход.

4
ответ дан Mosty Mostacho 7 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: