내가 가지고있는 소스 테이블에 ;
에 의해 구문 분석 값으로 테이블 웁니다 INSERT INTO SELECT
문 : 그래서오라클 SQLDeveloper에 REGEXP 레벨 쿼리 속도를하는 방법
INSERT INTO PC_MATERIALS_BRIDGE (MATERIAL_BRIDGE_ID, VARIABLE_ID, MATERIAL_NAME)
SELECT PC_VAR_MATERIALS_BRIDGE_SEQ.NEXTVAL, VARIABLE_ID, MATERIAL_NAME FROM (SELECT DISTINCT E.VARIABLE_ID, LOWER(TRIM(REGEXP_SUBSTR(e.MATERIALS, '[^;]+', 1, LEVEL))) MATERIAL_NAME
FROM (SELECT VARIABLE_ID, MATERIALS FROM SRC_VARS_OCEAN_ALL WHERE MATERIALS IS NOT NULL AND MATERIALS != 'N/A) e
CONNECT BY LOWER(TRIM(REGEXP_SUBSTR(e.MATERIALS, '[^;]+', 1, LEVEL))) IS NOT NULL);
을, 소스 테이블의 데이터
ID MATERIAL_NAME
1 paper
2 paper; plastic
대상 테이블
같은
MATERIAL_BRIDGE_ID MATERIAL_NAME
1 paper
2 paper
3 plastic
나타날 것이다.
스크립트가 정상적으로 실행됩니다. 그러나 원본 테이블의 레코드가 거의 40,000 개이고 일부 레코드의 값이 3 개 (예 : paper; plastic; rubber
)이므로 많은 비용이 듭니다. 나는 LEVEL
이 비싸다는 것을 안다. 나는 MATERIAL_NAME
을 VARCHAR2(255 BYTE)
으로 설정했습니다. 다른 유형의 검색어를 작성하는 것 이외의 개선 방법 (예 : 재귀 적이지만 문제가있을 수 있음)을 잘 모릅니다. DISTINCT
도 느려지는 원인입니까? e.VARIABLE_ID
이 이제 기본 키이므로 DISTINCT
은 더 이상 필요하지 않을 수도 있습니다.
대단히 감사합니다. 나는 DISTINCT를 사용했지만 모든 가능한 행을 검색 한 후에 행을 정렬한다는 사실을 간과했다. 건배. – snl330