Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Oracle中带Insert的CTE_Performance_Oracle_Insert - Fatal编程技术网

Performance Oracle中带Insert的CTE

Performance Oracle中带Insert的CTE,performance,oracle,insert,Performance,Oracle,Insert,我正在用CTE在oracle中运行一个查询。 当我执行查询时,它在select语句中工作得很好,但当我使用insert语句时,它需要足够的时间来执行 INSERT INTO port_weeklydailypricesTest (co_code,start_dtm,end_dtm) SELECT * FROM ( WITH CTE(co_code, start_dtm, end_dtm) AS (

我正在用CTE在oracle中运行一个查询。 当我执行查询时,它在select语句中工作得很好,但当我使用insert语句时,它需要足够的时间来执行

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
        );

如您所说,如果SELECT本身的性能令人满意,那么问题一定在于语句的INSERT部分

有许多因素可能会导致插入运行缓慢:

最有可能的情况是目标表上存在一个触发器,它执行一些非常昂贵的操作。 另一种可能性是,insert正在等待一个锁定的资源,比如其他进程在目标表上有一个排他的表级锁,或者其他共享资源,比如代码控制表。 这可能是存储分配问题、链接或行迁移、索引过多或派生列过多。 也许这是由于硬件——网络动力不足、互连不可靠、磁盘不好。
这绝非详尽无遗。顶部的项目是您应该能够调查和解决的应用程序问题。列表越靠下,您就越有可能需要现场DBA的帮助。

如您所说,如果SELECT本身的性能令人满意,那么问题一定出在语句的INSERT部分

有许多因素可能会导致插入运行缓慢:

最有可能的情况是目标表上存在一个触发器,它执行一些非常昂贵的操作。 另一种可能性是,insert正在等待一个锁定的资源,比如其他进程在目标表上有一个排他的表级锁,或者其他共享资源,比如代码控制表。 这可能是存储分配问题、链接或行迁移、索引过多或派生列过多。 也许这是由于硬件——网络动力不足、互连不可靠、磁盘不好。
这绝非详尽无遗。顶部的项目是您应该能够调查和解决的应用程序问题。列表越靠下,您就越可能需要现场DBA的帮助。

请使用我这次为您提供的代码格式。为什么要插入记录?为什么不使用视图?请使用我这次为您提供的代码格式。为什么要插入记录?为什么不使用视图?一个警告是,根据数据库的优化器目标,可以针对第一行优化选择。插入总是针对所有_行进行优化,因为它是一次执行。因此,您可以使用EXPLAIN计划检查这两个语句,并查看是否存在差异。一个警告是,根据数据库的优化器目标,可以针对第一行优化a SELECT。插入总是针对所有_行进行优化,因为它是一次执行。所以你可以用解释计划来检查这两种说法,看看是否有区别