주어진 값에 따라 하나의 테이블을 참조하여 데이터를 다른 테이블에
저장하는 프로그램입니다.
나름대로 처리를 해봤는데 속도가 너무 안나옵니다.
A 테이블의 id와 newid는 index를 걸어두었습니다.
A 테이블과 B 테이블은 N:N관계 입니다.
A 테이블은 B테이블을 참조하기 위한 matching테이블이며..
패킷으로 id값과 value값을 받아 A테이블을 참조하여 B테이블에
저장하는 프로그램입니다.
이러한 프로그램을 작성할때..
방법1) union all을 이용하여 A와 B테이블을 조인하여
prepare, fatch를 사용하여 데이터를 집어넣는 방법과
방법2)A테이블에서 id값을 검색하여 나온 newid를 하나하나
참조하여
데이터를 넣는 방법 두방법을 써봤으나..
1000건 가까이 되는 데이터를 저장하는데..20초 이상이 걸립니다
도대체 뭐가 문제 인가요. ㅡㅜ;
조언 부탁드립니다.
데이터 예) --> 데이터의 id는 테이블 A의 id, id'을
의미합니다.
id value
1 10
1' 20
3 10
3' 30
4 10
테이블 예)
테이블 A (800여개 레코드)
id id' newid newid'
1 1' aa aa'
2 2' aa aa'
3 3' aa aa'
4 4' bb bb'
5 5' bb bb'
6 6' cc cc'
테이블 B(1000여개 레코드)
newid value newid' value'
aa xx aa' xx
aa xx aa' xx
bb xx bb' xx
cc xx cc' xx
aa xx aa' xx
bb xx bb' xx
방법 1)
for( 데이터 레코드 개수)
{
query="select 테이블A newID from table A where 데이터 id =
테이블 A id
union all
select 테이블A newID' from table A where 데이터
id = 테이블 A id' "
prepare , execute query ;
while(모든 데이터 패치할때까지)
{
fatch query 레코드 into NEWID;
update 테이블 B set value = 데이터 where newid =
NEWID;
update 테이블 B set value' = 데이터 where newid' =
NEWID;
}
}
방법 2)
for( 데이터 레코드 개수)
{
cursor-1 선언 = select A테이블 newid from 테이블A id =
데이터 id;
open cursor-1;
while(모두 패치 할때까지)
{
fatch query 레코드 into NEWID;
update 테이블 B set value = 데이터 where newid = NEWID;
}
close cursor-1 ;
cursor-2 선언 = select A테이블 newid' from 테이블A id' =
데이터 id;
open cursor-1;
while(모두 패치 할때까지)
{
fatch query 레코드 into NEWID;
update 테이블 B set value' = 데이터 where newid' =
NEWID;
}
close cursor-1 ;
휴..ㅡㅜ;;
제대로 설명했는지 모르겠습니다.
위의 두가지 방법으로 처리해봤으나...
아래의 방법이 조금더 속도가 빠를뿐..
근본적인 속도향상은 기대하기 어려웠습니다.
보다 효율적인 방법이 없을런지요.
고수님들을 도움 부탁드립니다.
while(모든 데이터 패치할때까지)
{
fatch query 레코드 into NEWID;
update 테이블 B set value = 데이터 where newid =
NEWID;
update 테이블 B set value' = 데이터 where newid' =
NEWID;
}
}
|