database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 22625 게시물 읽기
No. 22625
테이블 조인시 속도가 너무 않나옵니다.
작성자
신성욱
작성일
2005-05-10 22:40
조회수
1,896

주어진 값에 따라 하나의 테이블을 참조하여 데이터를 다른 테이블에 저장하는 프로그램입니다.

나름대로 처리를 해봤는데 속도가 너무 안나옵니다.

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;

}

}

 

 

 

이 글에 대한 댓글이 총 1건 있습니다.

오타도 많고

마지막 while문이 잘못 들어갔습니다. ㅡㅜ;

두번째 방법에서 커서 명이 잘못들어갔습니다.

커서 오픈 및 클로즈에서 cursor-2 입니다.

비밀 번호를 않넣는 바람에 수정이 ㅡㅜ

 

신성욱님이 2005-05-10 22:43에 작성한 댓글입니다.
이 댓글은 2005-05-10 22:46에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
22628프로시져 , 펑션 리턴 에러
최영준
2005-05-11
1442
22627sum을 출력해야 하는데 잘 안되서요.. 답변 부탁 드립니다. [1]
윤경진
2005-05-11
1690
22626primary key 변경하려는데 다음과 같은 에러좀 봐주세요 [2]
왕초보
2005-05-11
3494
22625테이블 조인시 속도가 너무 않나옵니다. [1]
신성욱
2005-05-10
1896
22624primary 키 변견 관련 급 질문 [1]
왕초보
2005-05-10
1402
22623proc로 한글 데이터를 입력하는데 글자가 완전히 깨져서 입력됩니다. 고수님들 답변부탁드립니다....ㅠㅠ
서정훈
2005-05-10
1821
2262210g에서 oem이 로그인이 안됩니다.
az
2005-05-10
1995
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다