C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[35998] Re:[질문]데이타 업데이트시 속도처리문제
유영인 Cuperido [cuperido] 811 읽음    2004-07-01 13:51
제 생각에는 프로그램에 초점을 맞추시는 것 보다, 40초 정도 되는 시간이라면
DB 설계에 다시 초점을 맞추시는게 좋지 않을까 라는 생각이 듭니다.

어떤 프로그램인지 정확히 알 수 없기 때문에 정확한 말씀은 못드리겠지만,
만약 제가 DB를 설계한다면 다음 부분을 유심하게 살펴볼것 같습니다.

1) Select Query
str1 = String("select * from A where 지역='")+Edit1->Text+String("' and aa <> 'SUC'");
str2 = String("select * from B where 지역='")+Edit1->Text+String("'");

이 부분에서 모든 필드를 긁어오는데, 필요한 (예로 이름, 전화) 필드만 아래와 같이
긁어올 수 있지 않은지 여부
str1 = String("select 이름,전화 from A where 지역='")+Edit1->Text+String("' and aa <> 'SUC'");
str2 = String("select aa, 이름,전화 from B where 지역='")+Edit1->Text+String("'");

2) Index Key
지역이 Primary Key가 아닌경우 Index Key를 따로 설정을 해야합니다. 그렇지 않은 경우에
Select 문에서 엄청난 시간이 걸릴 수 있습니다.

쿼리에서 다음과 같이 입력하면 인덱스를 추가할 수 있습니다.
>> alter table [테이블이름] add index(지역)

만약 위와 같은 문제로 해결되지 않을 경우에는 쿼리상이 아닌, 알고리즘 상으로 구현을
하는 방법을 택해야 할것 같습니다.

cuperido


하안인 님이 쓰신 글 :
: 두개의 데이타가 존재하는데 한 테이블에서 조건에 맞는 퀴리를 구해 얻은다음
: 다른 테이블에 업데이트하려고 합니다.
:
: 즉 A,B 테이블에서 A의 레코드수는 40만개 B는 8만개정도.
: 이중에서 하나의 같은 필드를(예 지역)얻어서 한 필드값을 소스로부터 얻어와
: 업데이트하려고 합니다.
:
:   String str1,str2,cc;
:   str1 = String("select * from A where 지역='")+Edit1->Text+String("' and aa <> 'SUC'");
:   str2 = String("select * from B where 지역='")+Edit1->Text+String("'");
:   Query1->Close();
:   Query2->Close();
:   Query1->SQL->Add(str1);
:   Query2->SQL->Add(str2);
:   Query1->Open();
:   Query2->Open();
:   while(!Query2->Eof)
:   {
:      Query2->Edit();
:      Query2->FieldByName("이름")->AsString = Query1->FieldByName("이름")->AsString;
:      Query2->FieldByName("전화")->AsString = Query1->FieldByName("전화")->AsString;
:      Query2->Post();
:      Query1->Edit();
:      Query1->FieldByName("aa")->AsString = "SUC";
:      Query1->Post();
:      Query1->Next();
:      Query2->Next();
:   }
:   Query1->Close();
:   Query2->Close();
: 이렇게 하니 한 지역만 업데이트 하는데도 시간이 엄청 걸립니다.
: 지금도 진행중인데 40분이 넘었습니다.
:
: 테이블을 보니 한 레코드를업데이트하는데 5~7초정도 걸리는 것 같습니다.
:
: 다른 방법이 없을까요.

+ -

관련 글 리스트
35993 [질문]데이타 업데이트시 속도처리문제 하안인 747 2004/07/01
35998     Re:[질문]데이타 업데이트시 속도처리문제 유영인 Cuperido 811 2004/07/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.