将表创建为-花费很长时间

时间:2019-02-26 10:28:01

标签: sql oracle

我正在使用以下方法创建表

create table tbl_data_separated as
    with DTE as
    (
        select file_name, 
               to_char(file_content) as file_content -- preconvert the clob to a varchar
        from tbl_data
    )
    SELECT file_name,
           file_content,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 1, NULL, 1) r_id,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 2, NULL, 1) p_id_,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 3, NULL, 1) batch_num,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 4, NULL, 1) service_id,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 5, NULL, 1) id_qualifier,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 6, NULL, 1) flag,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 7, NULL, 1) n_code,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 8, NULL, 1) p_name
    FROM dte

在file_content中,分隔的管道具有150多个此类值,我需要使用REGEX进行比较。

表-tbl_data具有超过40万行。当我运行上面的查询时,它显示的估计时间是36小时。

是否可以对其进行优化,以便更快地完成?我正在考虑创建表并插入行。加快速度的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

查看您的代码..为什么不直接创建

create table tbl_data_separated as
SELECT file_name,
        to_char(file_content),
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 1, NULL, 1) r_id,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 2, NULL, 1) p_id_,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 3, NULL, 1) batch_num,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 4, NULL, 1) service_id,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 5, NULL, 1) id_qualifier,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 6, NULL, 1) flag,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 7, NULL, 1) n_code,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 8, NULL, 1) p_name
from tbl_data