CTE со вставкой в ​​Oracle - PullRequest
0 голосов
/ 15 июля 2010

Я запускаю запрос в Oracle с CTE. Когда я выполняю запрос, он прекрасно работает в операторе select, но когда я использую оператор вставки, для его выполнения требуется достаточно времени.

INSERT INTO port_weeklydailypricesTest (co_code,start_dtm,end_dtm)
   SELECT * FROM
        (
            WITH CTE(co_code, start_dtm, end_dtm) AS
            (
                SELECT co_code                                                     ,
                CAST(NEXT_DAY(MIN(dlyprice_date),'FRIDAY')-6  AS DATE)   start_dtm ,
                CAST(NEXT_DAY(MIN(dlyprice_date),'FRIDAY') AS DATE)      end_dtm
                FROM   feed_dlyprice
                GROUP BY co_code
                UNION ALL
                SELECT  co_code     ,
                CAST(TO_CHAR(end_dtm + INTERVAL '1' DAY,'DD-MON-YYYY') AS DATE),
                CAST(TO_CHAR(end_dtm + INTERVAL '7' DAY,'DD-MON-YYYY') AS DATE)
                FROM    CTE
                WHERE   CAST(end_dtm AS DATE) <= TO_CHAR(TO_DATE(SYSDATE+1,'DD-MON-YYYY'))
             )
            SELECT co_code,start_dtm,end_dtm 
            FROM CTE
        );

1 Ответ

2 голосов
/ 15 июля 2010

Если, как вы говорите, производительность SELECT сама по себе удовлетворительная, проблема должна заключаться в части инструкции INSERT.

Существует ряд вещей, которые могут привести к медленной работе вставки:

  • Наиболее вероятным является наличие триггера на целевой таблице, который выполняет что-то очень дорогое.
  • Другая возможность состоит в том, что вставка ожидает заблокированного ресурса (скажем, какой-то другой процесс имеет эксклюзивную блокировку на уровне таблицы для целевой таблицы или какой-либо другой общий ресурс, такой как таблица управления кодом).
  • Это может быть проблема выделения памяти, цепочки или переноса строк, слишком много индексов или много производных столбцов.
  • возможно, дело в аппаратной части - слабая сеть, хитрые соединения, плохой диск.

Это ни в коем случае не является исчерпывающим. Элементы в верхней части - это проблемы приложений, которые вы должны быть в состоянии исследовать и решать. Чем дальше вы идете по списку, тем выше вероятность того, что вам понадобится помощь администратора БД.

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