Эффективность linq to sql против хранимой процедуры - PullRequest
1 голос
/ 24 марта 2011

Привет, я пишу приложение, которое имеет страницу поиска и выполняет поиск в базе данных.

Мне интересно, должен ли я сделать это в linq или хранимой процедуре.

Является ли производительность хранимой процедуры намного лучше, чем у linq to sql?

Я думаю, это было бы потому, что для написания запроса linq вам нужно использовать datacontext для доступа к таблице, в которойзапросить.Я представляю, что это само по себе означает, что если таблица большая, она может стать неэффективной.

То есть, если вы используете:

context.GetTable<T>();

Может кто-нибудь посоветовать мне здесь?

Ответы [ 4 ]

5 голосов
/ 24 марта 2011

Маловероятно, что разница будет большой, если только вы не столкнетесь с ситуацией, когда TSQL, создаваемый Linq to SQL, не является оптимальным.

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

Если скорость критична, сравните результаты обоих тестов, а также изучите TSQL, созданный вашим решением Linq to SQL.

Кроме того, вам следует остерегаться вытягивать целые таблицы (если они не малы, например, при поиске с частым доступом)данные) через провод в любом решении.

2 голосов
/ 24 марта 2011

Если скорость очень важна для вас, вы должны пойти дальше и сравнить оба варианта с разумным набором данных. Технически я ожидал бы, что SP будет быстрее, но это не будет большой разницей.

1 голос
/ 24 марта 2011

Что для вас значит «эффективный»?

Я работаю на веб-сайте, где цель составляет менее секунды (предпочтительно менее 500 мс). Мы используем Linq для поиска по большинству наших вещей. Единственный раз, когда мы на самом деле используем SP, это когда мы используем иерархию и другие типы данных SqlServer, которых нет в EF.

0 голосов
/ 24 марта 2011

GetTable, вероятно, не будет сильно отличаться между этими двумя, поскольку по сути это просто SELECT * FROM T. Вы увидите более значительный выигрыш от хранимых процедур в тех случаях, когда запрос не очень хорошо написан Linq или в некоторых ситуациях с очень высокой нагрузкой кэширование плана выполнения имеет значение.

Сравнительный анализ - лучший ответ, но, судя по тому, что вы делаете, я не думаю, что разница будет слишком большой.

...