데이터 분포는exp조건 내보내기가 느려지는 문제 처리에 영향을 미친다

oracle10.2.0.4AIX5.3
야간 도급의 저장 과정으로 논리는 대체로 데이터베이스 내부에서 데이터 처리를 먼저 한 다음에 빈 도출 표를 삽입하고 데이터 처리가 모두 끝난 후에 각 표의 필드 A1에 따라where 조건에 따라 도출을 필터한다.
데이터 처리 과정에서 무의미한 중첩 순환으로 인해 테이블 데이터에 대한 입출력 읽기가 중복됩니다.데이터량이 많은 후에 처리가 느려지면서 최적화 수요가 높아졌다.
예를 들면 다음과 같습니다.
CURSOR cur_a1
is
select code from cura1;
LOOP
select A1 into x_a1 from testa where ta1=cur_a1;
begin
--  sequence  
select count(*) into v_count from sys.dba_objects where object_type='SEQUENCE' AND object_name = 'SEQUENCEname';
IF (v_icount > 0)
THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQUENCEname';
END IF;
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQUENCEname INCREMENT BY 1 START WITH 1 MINVALUE 1 NOCYCLE NOCACHE NOORDER';
--      
insert into table (a1,a2,a3) select a1,SEQUENCEname.NEXTVAL,a3 from A1 where a1=x_a1;

왜 무의미한 순환이라고 하는가. 우리의 이 환경에서 표 A의 필드 A1의 비중복치 수량에 따라 순환한다. A1 필드가 같을 때 A2 필드는 점증 서열 SEQ를 A2 필드의 값으로 하고 매번 순환 초기에 SEQ를 리셋한다.유일한 구속은 A1+A2입니다.A2 필드 값은 프로그램 처리 과정에서 쓸모가 없다.따라서 A표를 처리할 때까지 SEQ를 한 번에 늘려 A표 A2 필드 값이 중복되지 않도록 할 계획이다.
이 사고방식에 따라 최적화를 완성하여 데이터 처리 과정의 소모 시간을 크게 높였다.
그런데 이상하게도 최적화 변경이 끝난 날 도출 과정이 이상하게 느려져 높아진 시간이 지워졌다.
분석을 통해 최적화 전과 최적화 후에 표의 데이터 분포 상황이 달라진 것을 발견했다. 원래는 A1 필드의 순서에 따라 A표를 삽입했는데 최적화된 후에 데이터를 생성하여 A표를 삽입하고 순서를 무시했기 때문에 A1 필드의 색인 집합족 인자가 나빠졌다.이로써 [exptable=Aquery='whereA1like'1002%'] 문장의 내보내기 효율에 영향을 미친다.
orderbya1을 직접 더하면 오류 발견:
insert into testa
(a1, a2, a3)
select a1, SEQUENCEname.NEXTVAL, a3 from A order by a1;
ORA - 02287 :sequence number not allowed here

ORACLE는 다음과 같은 제한이 있다. Restrictionson Sequence Values Youcan notuseCURRRRVA LandNEXTVA Lithefollowingconstructs: Asubquertionson Sequerationces Youquer CURRRRRRRCURRRRCURRRRRRCURRRRACURRRRRRRRRRRRRRRAARRRRARARandandand RRRRRRANNNNNNNNNNNOCTTTTTRANENNNNNTTTTTTTTTTVANNTTTT는 다음과 같은 제한제한이 다음과 같은 제한orMINUSsetoperatorTheWHEREclauseofaSELECTstatementTheDEFAULTvalueofacolumninaCREATETABLEorALTERTABLEstatementTheconditionofaCHECKconstrain
다음과 같이 문 구조를 조정합니다.
insert into testa
(a1, a2, a3)
select a1, SEQUENCEname.NEXTVAL, a3
from (select a1, a3 from A order by a1);

순조롭게 완성하다.

좋은 웹페이지 즐겨찾기