Как лучше всего добавить INDEX для ускорения запроса? - PullRequest
0 голосов
/ 06 февраля 2020

Теперь у меня есть запрос, который выполняется 50 минут для базы данных Mysql, и я не могу принять это ...

Я хочу, чтобы этот процесс мог выполняться менее 15 минут ....

insert into appianData.IC_DeletedRecords 
            (sourcetableid, 
             concatkey, 
             sourcetablecode) 
select mstid, 
        concatkey, 
        'icmstlocationheader' as sourcetablecode 
 from   appianData.IC_MST_LocationHeader
 where  concatkey not in(select concatkey 
                         from appianData.IC_PURGE_LocationHeader)

«sourcetableid» и «mstid» уникальны.

Итак, как лучше всего добавить INDEX или оптимизировать это?

Спасибо

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Я бы написал select как:

select mstid, concatkey,  'icmstlocationheader' as sourcetablecode 
from  appianData.IC_MST_LocationHeader lh
where not exists (select 1 
                  from appianData.IC_PURGE_LocationHeader lhp
                  where lhp.concatkey = lh.concatkey
                 );

Тогда вам нужен индекс для IC_PURGE_LocationHeader(concatkey).

0 голосов
/ 06 февраля 2020

Поскольку это условие NOT IN, вы должны иметь возможность использовать «LEFT JOIN ... WHERE rightTable не имеет совпадений», не беспокоясь о множественных совпадениях, надувая результаты.

INSERT INTO appianData.IC_DeletedRecords (sourcetableid, concatkey, sourcetablecode) 
SELECT m.mstid, m.concatkey, 'icmstlocationheader' as sourcetablecode 
FROM appianData.IC_MST_LocationHeader AS m
LEFT JOIN appianData.IC_PURGE_LocationHeader AS p
   ON m.concatkey = p.concatkey
WHERE p.concatkey IS NULL
;

С этим Запрос версии, или тот, который вы указали в вопросе, индексы concatkey в обеих исходных таблицах должны значительно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...