Q&A

  • 간단한 예제 한가지만 ...
DB 테이블의 한 field만을 텍스트 파일로 보내려고 합니다.

현재 소스 상태로는



......



ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('select url from SiteDB order by url');

ADOQuery2.Open;



....



for i:=1 to ADOQuery2.RecordCount do

begin

Writeln(FP, Trim(ADOQuery2.Fields[0].AsString) );



ADOQuery2.Next;



end;



....



대략 이렇습니다.



근데 이렇게 하다보니 Record갯수가 많아지면, 시간이 무진장 걸리더군요.

그냥 쿼리 분석기에서 돌리면 90000개에 한 6초면 나오는데, 프로그램 상에서 텍스트 파일로 찍으면 거의 2~3분이상이 걸리는 것 같습니다.



코딩 상에서 좋은 방법이 없을까요. 조언을 부탁드립니다.

3  COMMENTS
  • Profile
    코스엑스 2001.10.05 10:01
    kittysp wrote:

    > DB 테이블의 한 field만을 텍스트 파일로 보내려고 합니다.

    > 현재 소스 상태로는

    >

    > ......

    >

    > ADOQuery2.Close;

    > ADOQuery2.SQL.Clear;

    > ADOQuery2.SQL.Add('select url from SiteDB order by url');

    > ADOQuery2.Open;

    >

    > ....

    >

    > for i:=1 to ADOQuery2.RecordCount do

    > begin

    > Writeln(FP, Trim(ADOQuery2.Fields[0].AsString) );

    >

    > ADOQuery2.Next;

    >

    > end;

    >

    > ....

    >

    > 대략 이렇습니다.

    >

    > 근데 이렇게 하다보니 Record갯수가 많아지면, 시간이 무진장 걸리더군요.

    > 그냥 쿼리 분석기에서 돌리면 90000개에 한 6초면 나오는데, 프로그램 상에서 텍스트 파일로 찍으면 거의 2~3분이상이 걸리는 것 같습니다.

    >

    > 코딩 상에서 좋은 방법이 없을까요. 조언을 부탁드립니다.



    사용디비를 Direct Access 할수있는 API 를 사용하심이 가장빠를듯싶은데..

    이건 쉬운일이아니고..

    쿼리 오픈후에 FetchAll 을써서 로컬로 Result set 을 다 가지고 와서

    Text Out loop 돌리는것이 조금 도움이 될듯싶네여.





  • Profile
    kittysp 2001.10.05 20:17
    코스엑스 wrote:

    > kittysp wrote:

    > > DB 테이블의 한 field만을 텍스트 파일로 보내려고 합니다.

    > > 현재 소스 상태로는

    > >

    > > ......

    > >

    > > ADOQuery2.Close;

    > > ADOQuery2.SQL.Clear;

    > > ADOQuery2.SQL.Add('select url from SiteDB order by url');

    > > ADOQuery2.Open;

    > >

    > > ....

    > >

    > > for i:=1 to ADOQuery2.RecordCount do

    > > begin

    > > Writeln(FP, Trim(ADOQuery2.Fields[0].AsString) );

    > >

    > > ADOQuery2.Next;

    > >

    > > end;

    > >

    > > ....

    > >

    > > 대략 이렇습니다.

    > >

    > > 근데 이렇게 하다보니 Record갯수가 많아지면, 시간이 무진장 걸리더군요.

    > > 그냥 쿼리 분석기에서 돌리면 90000개에 한 6초면 나오는데, 프로그램 상에서 텍스트 파일로 찍으면 거의 2~3분이상이 걸리는 것 같습니다.

    > >

    > > 코딩 상에서 좋은 방법이 없을까요. 조언을 부탁드립니다.

    >

    > 사용디비를 Direct Access 할수있는 API 를 사용하심이 가장빠를듯싶은데..

    > 이건 쉬운일이아니고..

    > 쿼리 오픈후에 FetchAll 을써서 로컬로 Result set 을 다 가지고 와서

    > Text Out loop 돌리는것이 조금 도움이 될듯싶네여.

    >

    >



    무슨 이야기를 하시는지는 알겠는데요..

    제가 원하는 것은 전문 용어가 섞인 방법론 강의가 아니라 Visual하게 표현할 수 있는 프로그래밍 활용 팁입니다.

    예를 들면서 조금만 자세히 설명해주시면 감사하겠습니다.

  • Profile
    눈사랑 2001.10.05 03:40
    답변 : writeln 을 사용하면 파일에 텍스트 문서를 계속해서(90000) 번 써 나가기 때문에 속도가 느려지는것 같은요. 꼭 그렇게 한번씩 사용하지 말고 한꺼번에 스트링으로 저장해 두었다가 루프 끝나면 한번에 저장하는 방법이 더 좋지 않을까 합니다.



    kittysp wrote:

    > DB 테이블의 한 field만을 텍스트 파일로 보내려고 합니다.

    > 현재 소스 상태로는

    >

    > ......

    >

    > ADOQuery2.Close;

    > ADOQuery2.SQL.Clear;

    > ADOQuery2.SQL.Add('select url from SiteDB order by url');

    > ADOQuery2.Open;

    >

    > ....

    >

    > for i:=1 to ADOQuery2.RecordCount do

    > begin

    > Writeln(FP, Trim(ADOQuery2.Fields[0].AsString) );

    >

    > ADOQuery2.Next;

    >

    > end;

    >

    > ....

    >

    > 대략 이렇습니다.

    >

    > 근데 이렇게 하다보니 Record갯수가 많아지면, 시간이 무진장 걸리더군요.

    > 그냥 쿼리 분석기에서 돌리면 90000개에 한 6초면 나오는데, 프로그램 상에서 텍스트 파일로 찍으면 거의 2~3분이상이 걸리는 것 같습니다.

    >

    > 코딩 상에서 좋은 방법이 없을까요. 조언을 부탁드립니다.