2013-07-03 3 views
0

У меня есть хранимая процедура, которую я называю поLinq для SQL, исполняющих хранимая процедура очень медленно

Int32 siteID = 1; 
DateTime startDate date; 
DateTime endDate date; 

var result = this.datacontext.GetSummary(siteID, startDate, endDate); 

Это выполняет очень медленно с помощью LINQ, но в SSMS это очень быстро.

Когда я изменяю SP, чтобы принимать только дату начала и в СП Создание ENDDATE по:

DECLARE @EndDate date 
SET @EndDate = DATEADD(yy,1,@StartDate) 

, а затем выполнить, как показано ниже:

var result = this.datacontext.GetSummary(siteID, startDate); 

Запрос очень быстро снова , Я передаю точные значения, какими будут EndDate.

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

Любые предложения были бы весьма полезными.

+1

Вы использовали утилиту трассировки SQL-сервера? Это даст вам представление о том, что происходит за кулисами. – Tarik

+2

Я настоятельно рекомендую вам взглянуть на профилировщик sql. – Mostafa

+0

Каковы значения для даты окончания? во втором случае вы устанавливаете дату окончания всего лишь 1 месяц спустя, что может потребовать нескольких записей, чтобы оно работало быстро. Но если вы устанавливаете дату окончания через несколько лет после даты начала, то она будет выполняться медленно в зависимости от количества строк для поиска. Вы также можете индексировать свой столбец даты. –

ответ

2

Я бы посмотрел, что сгенерирует sql, вы можете увидеть here, как это сделать. Как только вы получили sql, посмотрите, делает ли Linq что-то странное, когда он переводит ваш запрос в SQL.

+0

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

+0

Мне нужно было указать дату param в хранимой процедуре, после чего она сработала! – CR41G14

Смежные вопросы