Linq to SQL: выберите оптимизацию

На больших таблицах в MSSQL; выбор определенных столбцов приводит к большей скорости запроса. То же самое относится к Linq to SQL?

Было бы это:

var person = from p in [DataContextObject].Persons
             where p.PersonsID == 1
             select new { p.PersonsID, p.PersonsAdress, p.PersonsZipcode };

быть быстрее, чем это:

var person = from p in [DataContextObject].Persons
             where p.PersonsID == 1
             select p;

...?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
6
0
5 478
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Если вы ограничиваете размер набора результатов, выбирая только несколько определенных столбцов, то ДА, это повлияет.

РЕДАКТИРОВАТЬ ading пояснение из комментария

Чем это лучше, так это уменьшит размер результирующих данных, возвращаемых из SQL, И это уменьшит размер объектов, используемых для хранения результатов в памяти.

Это связано с тем, что в конечном итоге LINQ to SQL генерирует SQL, поэтому существуют те же преимущества в производительности.

Это приводит к уменьшению объема памяти? Или большая скорость?

cllpse 14.10.2008 19:43

И то и другое! SQL Server будет реагировать быстрее, ограничивая передаваемые данные, и это уменьшит размер коллекции, содержащей результаты, уменьшив память

Mitchel Sellers 14.10.2008 19:48

Я думаю, применимо то же самое, потому что LINQ to SQL переводит операции запроса Linq в команды SQL.

Ответ принят как подходящий

Я очень рекомендую LinqPad. Это бесплатно и позволяет динамически запускать запросы LINQ. Когда вы также можете посмотреть на сгенерированный SQL.

Вы увидите, что запрос LINQ преобразует первый запрос в выбор только этих столбцов. Так быстрее.

В дополнение к тому, что говорили другие, новая безымянная структура будет намного более легким объектом, чем объект Person - она ​​будет намного быстрее, даже если вы выберете все столбцы. (У человека есть метод / поля и т. д. Для поддержки записи объекта обратно в базу данных. Безымянный тип - нет.)

Здесь есть 3 аспекта с «быстрее».

  1. меньше передаваемых данных означает Быстрее. С другой стороны, это будет не получить существенно быстрее, если вы не выберете более одной строки или если ваш человек содержит некоторые другие «тяжелые» колонны - длинные varchars, image и т. д.
  2. как указал Дж. Карран, меньше выделенная память означает быстрее. Здесь применимо то же замечание, что и в 1..

  3. Ваш запрос выполняется быстрее, если вы иметь индекс, содержащий все выбранные столбцы (или прикрепленные к нему, начиная с SQL Server 2005). В этом случае движку SQL Server не нужно загружать страницу со строкой в ​​памяти - если ее еще нет.

Лично я бы не стал пытаться оптимизировать свои запросы таким образом (если, как я уже сказал, ваши строки не содержат двоичные данные или очень длинные строки, которые вам не нужны), частично потому, что, если вы позже решите, что хотели бы иметь больше информации об этом выбранном человеке, вам нужно будет изменить код доступа к БД, а не просто получить доступ к свойству в вашем POCO / анонимном классе.

Если у вас есть очень большие столбцы, такие как двоичные файлы и изображения, это может иметь существенное значение, поэтому LINQ to SQL позволяет вам указывать отложенную загрузку для определенных столбцов, чтобы вы по-прежнему могли выбирать целые объекты, не выполняя проекции `` выбрать новый '' .

Другие вопросы по теме