На больших таблицах в 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;
...?


Если вы ограничиваете размер набора результатов, выбирая только несколько определенных столбцов, то ДА, это повлияет.
РЕДАКТИРОВАТЬ ading пояснение из комментария
Чем это лучше, так это уменьшит размер результирующих данных, возвращаемых из SQL, И это уменьшит размер объектов, используемых для хранения результатов в памяти.
Это связано с тем, что в конечном итоге LINQ to SQL генерирует SQL, поэтому существуют те же преимущества в производительности.
И то и другое! SQL Server будет реагировать быстрее, ограничивая передаваемые данные, и это уменьшит размер коллекции, содержащей результаты, уменьшив память
Я думаю, применимо то же самое, потому что LINQ to SQL переводит операции запроса Linq в команды SQL.
Я очень рекомендую LinqPad. Это бесплатно и позволяет динамически запускать запросы LINQ. Когда вы также можете посмотреть на сгенерированный SQL.
Вы увидите, что запрос LINQ преобразует первый запрос в выбор только этих столбцов. Так быстрее.
В дополнение к тому, что говорили другие, новая безымянная структура будет намного более легким объектом, чем объект Person - она будет намного быстрее, даже если вы выберете все столбцы. (У человека есть метод / поля и т. д. Для поддержки записи объекта обратно в базу данных. Безымянный тип - нет.)
Здесь есть 3 аспекта с «быстрее».
как указал Дж. Карран, меньше выделенная память означает быстрее. Здесь применимо то же замечание, что и в 1..
Ваш запрос выполняется быстрее, если вы иметь индекс, содержащий все выбранные столбцы (или прикрепленные к нему, начиная с SQL Server 2005). В этом случае движку SQL Server не нужно загружать страницу со строкой в памяти - если ее еще нет.
Лично я бы не стал пытаться оптимизировать свои запросы таким образом (если, как я уже сказал, ваши строки не содержат двоичные данные или очень длинные строки, которые вам не нужны), частично потому, что, если вы позже решите, что хотели бы иметь больше информации об этом выбранном человеке, вам нужно будет изменить код доступа к БД, а не просто получить доступ к свойству в вашем POCO / анонимном классе.
Если у вас есть очень большие столбцы, такие как двоичные файлы и изображения, это может иметь существенное значение, поэтому LINQ to SQL позволяет вам указывать отложенную загрузку для определенных столбцов, чтобы вы по-прежнему могли выбирать целые объекты, не выполняя проекции `` выбрать новый '' .
Это приводит к уменьшению объема памяти? Или большая скорость?