Запрос ОБНОВЛЕНИЯ висит - PullRequest
1 голос
/ 16 сентября 2011

У меня есть следующий запрос

UPDATE rec_analyst
           SET analyst_name = (SELECT DISTINCT min (LIQA_ANALYST_LAST_NAME)
                                 FROM LIQA
                                WHERE LIQA_ANALYST_ID = analyst_extern_id
                                      AND LIQA_TS_INSERT = '15.09.2011'

                               )
         WHERE analyst_provider_id = 4

План объяснения показывает стоимость около 4000, но загрузка базы данных составляет 100%, и даже через час это задание не готово. Вот объяснение плана вывода:

------------------------------------------------------------------------------------
DESC                            |OBJECT NAME                    |COST| #    |BYTES  | 
------------------------------------------------------------------------------------
UPDATE STATEMENT, GOAL =ALL_ROWS|                               |  34| 16572| 331440|
-------------------------------------------------------------------------------------
  UPDATE                        |REC_ANALYST                    |    |      |       |
-------------------------------------------------------------------------------------
   TABLE ACCESS FULL            |REC_ANALYST                    |  34| 16572|331440 |
-------------------------------------------------------------------------------------
  SORT AGGREGATE                |                               |    |      |24     |
-------------------------------------------------------------------------------------
   TABLE ACCESS FULL            |REC_LIQA_LOAD_INQUIRY_ANALYST  |3965|1     |24     |
-------------------------------------------------------------------------------------

Как я могу его оптимизировать?

Ответы [ 2 ]

5 голосов
/ 16 сентября 2011

Вы можете попробовать:

MERGE INTO rec_analyst ra
USING ( SELECT LIQA_ANALYST_ID analyst_id, MIN(LIQA_ANALYST_LAST_NAME) min_name
          FROM LIQA
         WHERE LIQA_TS_INSERT = '15.09.2011'
         GROUP BY LIQA_ANALYST_ID
      ) liqa_extract
   ON ( liqa_extract.analyst_id = ra.analyst_extern_id
        AND ra.analyst_provider_id = 4
      )
 WHEN MATCHED THEN UPDATE SET ra.analyst_name = liqa_extract.min_name;
1 голос
/ 16 сентября 2011

Спросите своего администратора базы данных, возможно ли / выгодно добавить индекс по любому (предпочтительно обоим) из следующего:

Таблица: столбец rec_analyst: analyst_provider_id Таблица: столбец LIQA: LIQA_TS_INSERT

В идеале должны быть индексы PK / FK для LIQA.analyst_id и rec_analyst.analyst_extern_id, не зная, что ваша схема думает, что трудно сказать, какие индексы пойдут на пользу вашей системе в целом.

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