У меня есть запрос:
with cte as
(
//some select statement
)
select -
// also some code here
from cte a
outer apply
(select top 1 position,traffic,tags,url,Domain,Load_Date,trend_date
from cte b
where b.Date_ID<=a.Date_ID and
b.Load_Date is not null and
a.Domain is null and
a.Project_Id=b.Project_Id and
a.SE_Id=b.SE_Id and
a.Keyword=b.keyword
order by a.Date_ID desc
)x
Мой cte
возвращает почти 3 миллиона строк.Этот запрос занимает очень много времени для завершения (каждые 4 минуты он возвращает только 500 строк)
Но следующий запрос без Keyword
сравнения во внешнем применении очень быстрый:
with cte as
(
//some select statement
)
select
// also some code here
from cte a
outer apply
(select top 1 position,traffic,tags,url,Domain,Load_Date,trend_date
from cte b
where b.Date_ID<=a.Date_ID and
b.Load_Date is not null and
a.Domain is null and
a.Project_Id=b.Project_Id and
a.SE_Id=b.SE_Id and
order by a.Date_ID desc
)x
Проблема в том, что мне нужно это сравнение ключевых слов в моем запросе.Теперь у меня вопрос: как мне изменить исходный запрос, чтобы повысить его производительность?Полезно знать:
- Идентификатор проекта
int
- Идентификатор SE_
int
- Ключевое слово
nvarchar(2000)