我正在使用以下方法创建表
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小时。
是否可以对其进行优化,以便更快地完成?我正在考虑创建表并插入行。加快速度的最佳方法是什么?
答案 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