Кеширует ли SQL Server запросы LINQ to SQL? - PullRequest
3 голосов
/ 20 марта 2009

Насколько я знаю, в MS SQL Server 2000+ хранимые процедуры компилируются и выполняются быстрее, чем обычные некомпилированные запросы. Интересно, MS SQL Server также компилирует запросы LINQ to SQL и кэширует эту компиляцию для повышения производительности.

Ответы [ 5 ]

3 голосов
/ 20 марта 2009

Когда речь идет о плане выполнения в SQL Server, нет существенных различий в скорости с хранимыми процедурами по сравнению с обычными не скомпилированными запросами. См. для получения дополнительной информации о других факторах о скорости.

LINQ-to-SQL генерирует нормальные параматизированные запросы (SQL Server ничего не знает о LINQ, приложение генерирует нормальный SQL), поэтому баланс остается тем же. Это если вы не используете функции LINQ-to-SQL, которые вызывают Stored Procs (при условии, что вы имели в виду запрос).

Вы также можете прочитать это , что является аналогичным вопросом, но фокусируется на более важных преимуществах LINQ по сравнению с StoredProcs

2 голосов
/ 20 марта 2009

SQL Server не знает о LINQ.

Насколько я знаю, LINQ работает как библиотека, которая использует запросы для генерации запросов SQL, которые затем отправляются на сервер в виде текстовых команд SQL.

1 голос
/ 08 февраля 2011

Скомпилированные запросы LinQ кэшируются SQL Server, поэтому они намного быстрее. Обычные запросы LinQ не кэшируются SQL Server.

Для тестирования.

Создать обычный запрос LinQ Создайте тот же скомпилированный запрос LinQ.

После того, как скомпилированный запрос будет выполнен несколько раз, очистите кэш SQL, и вы заметите, что он будет иметь почти то же время выполнения, что и обычный запрос LinQ в первый раз.

PS. Вы можете очистить кэш SQL Server с помощью запроса: DBCC DROPCLEANBUFFERS

Итак, чтобы ответить на ваш вопрос о запросах и кэшировании LinQ.

Обычные запросы LinQ не кэшируются и должны использоваться, когда вам нужно выполнить его только один раз. Скомпилированные запросы LinQ действительно кэшируются SQL Server и будут иметь повышение производительности, если вы запустите его более одного раза.

Я только что узнал об этом, и я думаю, что это удобно знать.

1 голос
/ 20 марта 2009

MS SQL Server кэширует планы запросов для всего, что запускается на TSQL. Как только план будет кэширован, запрос будет выполняться немного быстрее. Я знаю, что срок действия этого кэша истек, но я не спрашивал об этом у dba.

Насколько я знаю, MS SQL Server 2000 был последним, который скомпилировал хранимые процессы. Это больше не сделано. Вот почему многие встроенные запросы выполняются так же быстро (с SQL Server 2000+).

1 голос
/ 20 марта 2009

Насколько я знаю, он ведет себя как обычные запросы к SQL Server. Вы всегда можете вызвать хранимые процедуры с помощью LINQ to SQL, если для вашего конкретного случая есть преимущества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...