Повышение производительности на первом запросе - PullRequest
0 голосов
/ 30 мая 2018

Я выполняю пакет операторов и 100% относительного времени, используемого в этом запросе:

select c.*,q.dbupddate
  into #c
  from 
   customer c
   cross apply
   (
    select top 1 code,transferred,dbupddate
    from transfer_customer_connect_log l
    where l.code=c.code
    order by dbupddate desc
   )q
  where q.transferred=0

с этим планом: https://www.brentozar.com/pastetheplan/?id=Syq811nJm

Этот запрос предназначенперенести строки из одной базы данных (app_connect) в другую (app).В таблице Transfer_customer_connect_log записи с переданным = 1 уже обработаны и должны игнорироваться.Кроме того, из оставшихся строк с перенесенным = 0 некоторые (клиентские) коды могут существовать несколько раз в таблице с разными (dbupd) датами, и в этом случае я должен рассмотреть только самые последние.

Я виделот плана, что sort by dbupddate, чтобы сделать верхнюю 1 часть, занимает 97% времени.Итак, я добавил кластерный индекс pk (dbupddate, code).Интересно, что ничего не изменилось!Разве индекс не сделает сортировку ненужной?

Один из альтернативных подходов состоит в том, чтобы вместо того, чтобы каждый раз делать первую первую проверку каждый раз, «сохранять» свои результаты при каждой вставке строки, отмечая «старые» строки(перенесено = 0, но не в топ-1 последних) с флагом, а затем использовать этот флаг в where, чтобы исключить его из будущих соображений.

Является ли такой образ мышления твердым?Что еще я мог бы сделать, чтобы улучшить это, основываясь на функциональности, которую я описал?

1 Ответ

0 голосов
/ 30 мая 2018

с использованием row_number ()

select * 
from ( select c.*, l.dbupddate, l.transferred 
            , row_number() over (PARTITION BY l.code ORDER BY l.dbupddate desc) as rn
        from customer c
        join transfer_customer_connect_log l
          on l.code = c.code 
     ) t
where t.rn = 1
  and t.transferred = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...