Я создаю таблицу, используя:
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имеет более 400К строк.Когда я запускаю приведенный выше запрос, его расчетное время составляет 36 часов.
Можно ли оптимизировать его, чтобы оно могло быть выполнено быстрее?Я думаю о создании таблицы и вставке строк.Что было бы лучшим способом ускорить его?