Внешнее применение занимает много времени, если в нем содержится строка сравнения. - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть запрос:

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)

1 Ответ

0 голосов
/ 27 февраля 2019

Включить Keyword в индексы, используемые во втором запросе.

...