Это мой фактический запрос на выборку,проблема производительности с функцией DATEADD
SELECT b.CaseNumber as CaseNumber,b.DebtorNr ,b.ActionDate,DATEADD(MONTH,-12,b.ActionDate) one_month,a.Registerdate --COALESCE(count(A.historynr),0) as DebtorActivity
from rr..r_basic_info b
join rr..activities_VW as A on b.DebtorNr=a.Debtornr
where
B.Debtornr = A.Debtornr
--and a.Registerdate<=b.ActionDate --this condition works
and a.registerdate >= DATEADD(month,-12,getdate()) --i have a problem with this condition and causing huge time consumption
Я вид определяется здесь activities_VW
select H.NR as historynr,o.debtornr as Debtornr, O.NR as ordernr, h.Actmenunr as Actmenunr,h.AGREEMENT as AgreementCode, h.Registerdate as Registerdate
от abc..history ч присоединиться к abc..orders о на o.NR = h.ORDERNR
и мой план выполнения, как
Еще одна информация для всех столбцов столбца b.actionDate имеет такое же значение, как «2015-04-11 08: 37: 44.037».
Я проверил со всеми форматами даты, но ничего плохого не нашел.
Для другого случая у меня другое значение для разных строк в столбце b.actionDate, и оно отлично работает для этого случая.
Благодаря
Можете ли вы показать план выполнения, который генерируется? – Paddy
Это будет общий запрос именно в этой форме?Если это так, вы можете захотеть добавить (и индексировать) [Вычисленный столбец] (https://msdn.microsoft.com/en-us/library/ms188300.aspx), который является 'DATEADD (MONTH, - 6, a .joining_date) ' –
у вас есть functin над a.joiningdate, поэтому он, вероятно, сканирует таблицу присваивания в цикле – dean