Настройка производительности для запроса вставки - PullRequest
0 голосов
/ 27 мая 2018

Может кто-нибудь помочь мне в настройке этого запроса, так как я новичок в настройке производительности в Oracle.

INSERT INTO mdm_id_relation
    SELECT 
        pat_key, hub_pat_id, msa_pat_id, pat_id
    FROM 
        ods_raw_patient_mdm_process p1
    WHERE NVL (pat_id, 'NULL') IN (SELECT pat_id
                                   FROM mdm_id_relation)
      AND NOT EXISTS (SELECT pat_key
                      FROM mdm_id_relation p2
                      WHERE p1.pat_key = p2.pat_key);

Ответы [ 2 ]

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

Любая проблема с производительностью будет select, а не insert.Я думаю, что это эквивалентный запрос:

INSERT INTO mdm_id_relation (pat_key, hub_pat_id, msa_pat_id, pat_id) -- always list the columns!
    SELECT pat_key, hub_pat_id, msa_pat_id, pat_id
    FROM ods_raw_patient_mdm_process p1
    WHERE EXISTS (SELECT 1
                  FROM mdm_id_relation mir
                  WHERE mir.pat_id = p1.pat_id
                 ) AND
          NOT EXISTS (SELECT 1
                      FROM mdm_id_relation mir
                      WHERE p1.pat_key = mir.pat_key
                     );

Для этого запроса вы хотите два индекса: mdm_id_relation(pat_id) и mdm_id_relation(pat_key).Это должно сильно повлиять на производительность.

Примечание. Прежде чем выполнять вставку, сначала проверьте select.

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

Чтобы настроить запрос INSERT, вам понадобятся следующие ингредиенты:

  1. Место для проверки вашего запроса.В идеале отдельная база данных, но отдельная схема может также подойти.Минимально копия участвующих таблиц и индексов. Причина: ВСТАВКА изменит данные, вам нужно будет запускать разные версии запроса, пока вы не будете удовлетворены производительностью.

  2. Тестовые таблицы должныимеют точно такую ​​же структуру, что и реальная таблица, и примерно столько же данных, сколько реальная вещь. Причина: Производительность INSERT сильно зависит как от структуры, так и от суммы.

  3. Обновленная статистика: посмотрите DBMS_STATS.GATHER_TABLE_STATS и как ее использовать. Причина: Дайте оптимизатору запросов шанс найти хороший план запроса.

  4. Способ измерения производительности (количество секунд в часах или затраты Oracle и т. Д.), Иболее того, доступ к плану запросов (кнопка «Разработчик SQL: план объяснения» или просмотр сценария Уильяма).

Когда мне нужно настроить операторы INSERT, я обычноначните с части SELECT, пока я не буду доволен ею.Сначала запустите SELECT ..., когда все в порядке, я запускаю CREATE TABLE foo NOLOGGING AS SELECT ..., чтобы измерить SELECT всех строк.Когда все в порядке, я проверяю весь оператор INSERT ... SELECT ....

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