|
제 생각에는 프로그램에 초점을 맞추시는 것 보다, 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초정도 걸리는 것 같습니다.
:
: 다른 방법이 없을까요.
|