SQL-запрос с NOT EXISTS очень медленный - PullRequest
0 голосов
/ 04 июля 2018

Я перенесу человека из представления в свою базу данных по следующему запросу, который слишком медленный:

SELECT DISTINCT PI.VALUE ID
FROM PERSON_VIEW PERV
    inner join PERSON_IDENT PI on PI.VALUE = PERV.IDENTITY
    inner join PERSON PER on PER.ID = PI.EXTERNAL_ID
WHERE NOT EXISTS (SELECT RECORD_ID FROM PERSON_MIGR_DATA PMD
                  WHERE RECORD_ID = PERV.RECORD_ID)
  AND NOT EXISTS (SELECT RECORD_ID FROM PERSON_MIGR_ERRORS
                  WHERE RECORD_ID = PERV.RECORD_ID)

На соединенных полях есть индексы, но я должен изменить этот запрос, так как он длится 15 минут. Таблицы довольно большие.

Итак. У меня есть PERSON_VIEW - из которого я читаю человека для миграции, PERSON_MIGR_DATA - идентификатор мигрированных людей и PERSON_MIGR_ERRORS - идентификатор записей с человеком, который не прошел проверку во время миграции.

Я думаю, что НЕ СУЩЕСТВУЮЩЕЕ является узким местом. Но как сделать этот запрос так, чтобы он был быстрее?

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете попытаться использовать пару левого соединения для несоответствия (вместо того, чтобы не существовать)

SELECT DISTINCT PI.VALUE ID
FROM PERSON_VIEW PERV
inner join PERSON_IDENT PI on PI.VALUE = PERV.IDENTITY
inner join PERSON PER on PER.ID = PI.EXTERNAL_ID
LEFT JOIN PERSON_MIGR_DATA PMD ON  PMD.RECORD_ID = PERV.RECORD_ID
LEFT JOIN PERSON_MIGR_ERRORS PME ON  PME.RECORD_ID = PERV.RECORD_ID
where PMD.RECORD_ID is null and PME.RECORD_ID is null 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...