У меня есть простой запрос структуры объекта. Он использует группировку:Эффективные планы запросов и выполнения
source.GroupBy(x => x.Key)
.Select(x => x.Count(z => z.IsDefaultValue == false) > 0
? x.FirstOrDefault(z => z.IsDefaultValue == false)
: x.FirstOrDefault()
);
план выполнения для него выглядит следующим образом:
Тогда я изменить запрос:
source.GroupBy(x => x.Key)
.Select(x => x.Any(z => z.IsDefaultValue == false)
? x.FirstOrDefault(z => z.IsDefaultValue == false)
: x.FirstOrDefault()
);
Сейчас я использую Любой вместо Количество. Планируется, что это:
Мой вопрос: какой запрос использовать? Какой запрос более эффективен?
Я ничего о планах выполнения :( не понимаю, что важной информации, вы видите на этих планах выполнения
EDIT: Пожалуйста, перетащить фотографии в новой вкладке, это будет более удобным для чтения
.
Нельзя сказать многого из изображения. Нужен фактический план выполнения XML. В нижнем случае число операторов сканирования удваивается и выглядит так, как если бы SQL Server стоил его как более дорогостоящий (на основе того факта, что сортировка после кластеризованного сканирования CI будет постоянной стоимостью и составляет 30% от стоимости первая и 18% второй). Похоже, что вам, вероятно, не хватает полезных индексов, если таблицы не очень малы. –
Как насчет EF's Any() vs Count()> 0? Что более эффективно?Извините, я не хочу делиться планом выполнения XML - он большой и уродливый. –