Q&A

  • CachedUpdates를 true로 하면 정말 빨라지나?
Firebird 1.5와 Zeos라이브러리를 써서 다음과 같이 코딩해서 데이타 넣는 것을 테스트 해보았습니다.
<!--CodeS-->
...
ZQuery1.CachedUpdates := true;
ZQuery1.RequestLive := true;

dtStartTime := now;
for i := 1 to 10000 do begin
  ZQuery1.SQL.Text := 'insert into aaa (f1, f2, f3, f4, f5, f6) values(:bb, :bb, :bb, :bb, :bb, :bb)';
  ZQuery1.ParamByName('bb').Value := round(random(100))+100;
  ZQuery1.ExecSQL;
end;
  ZQuery1.ApplyUpdates;
dtEndTime := now;
dtLapTime := dtEndTime - dtStartTime;
...

<!--CodeE-->
그런데 이렇게 데이타를 넣는 경우와 비교하기 위해

ZTable1.CachedUpdates := false;
ZTable1.RequestLive := true;

인 상태에서
ZTable.Append와 ZTable.Post를 사용하여 같은 량의 데이타를 넣었을 때 오히려 위의 전자의 경우가 오히려 시간이 더 걸리는데요, 진정 어떻게 대량의 데이타를 넣는 것이 가장 빠른 방법인 지 의문입니다.
분명 대부분 말씀하시길 CachedUpdates를 true로 해놓고 ApplyUpdates를 사용해서 데이타를 밀어 넣는게 빠르다고 하는데 for loop을 돌기 시작할 때부터 ApplyUpdates가 끝날때까지의 시간을 측정해보면 전자의 경우가 후자보다 눈에 띄게 시간이 더 걸리는 것을 확인할 수 있었는데요, 왜 그런것인지요?
그래서, 제가 해본 방법 중에 그나마 가장 빠른 방법으로 현재는 ZTable.Append를 사용해서 데이타를 추가하고 있는데..좀더 빠르게 입력할 수 있는 방법이 있으면 한수 부탁드리겠습니다.
3  COMMENTS
  • Profile
    채팅 2005.10.26 02:40
    ExecSQL은 CachedUpdate와 관련이 없습니다. CachedUpdate는 dbms와 관계없이 클라이언트에서 변경내용을 캐시해 놓았다가 applyupdates를 사용하여 서버에 반영하는 방식입니다.

    그러므로 Table이나 RequestLive를 사용한 Query 또는 UpdateObject를 연결한 Query컴포넌트에 직접 데이타를 추가하거나 변경할때 사용합니다.

    수정이나 변경이 끝나고 나면 일괄적으로 서버에 반영을 하는 것이죠


    c.StartTransaction;
    try
    query1.ApplyUpdates;
    query2.ApplyUpdates;
    ...
    c.Commit;
    except
    c.RollBack;
    end;


  • Profile
    박철훈 2005.10.26 00:40
    음..... 루프를 돌아서 Insert를 하는것은 어떻게 해도 성능에 크게 차이가 나지는
    않을것 같군요.

    다만 ExecSQL전에 Prepared메소드를 넣어주시는 것으로 약간의 성능향상을 기대할 수
    있을 것같습니다.

    DBMS상의 코드 재사용성을 좋게 해줍니다.

  • Profile
    토니 2005.10.26 06:06
    prepare 메소드를 찾을 수가 없어서 없나부다 했는데, prepare 메소드에는 어떻게 접근하면 되는지요?


    • 이중철
      2005.10.26 22:02
      지원 안됩니다. 저도 이것땜시 과거에 검색을 하였는데 결론은 안된다고 합니다. 인터베이스 사이트 집/...
    • 토니
      2005.10.26 21:23
    • 착한천사
      2005.10.29 05:47
    • 이중철
      2005.10.26 20:51
    • 토니
      2005.10.26 21:22
    • 이중철
      2005.10.26 21:59
    • TeamB
      2005.10.27 00:12
    • 이중철
      2005.10.27 02:15
    • TeamB
      2005.10.27 22:10
    • 신철우
    • 2005.10.26 07:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 송상현
      2005.10.27 19:12
      MS Access에서는 CASE 문장을 지원하지 않습니다. MsSQL2000에서 되는 문장이 다른 Database에서 된다...
    • 이승근
    • 2005.10.26 07:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2005.11.04 20:55
      해당 메뉴의 폼이 생성되어 있는지를 체크해서 생성되어 있으면 그냥 Show처리하고 생성되어 있지 않다...
    • 이영범
      2005.10.27 02:46
      각 모듈별로 단독 실행파일을 만들어서 서로 호출하는 방법 밖에 없을듯 한데요.. 모듈별로 연결되는 변수...
    • 토니
    • 2005.10.25 23:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 채팅
      2005.10.26 02:40
      ExecSQL은 CachedUpdate와 관련이 없습니다. CachedUpdate는 dbms와 관계없이 클라이언트에서 변경내용을 ...
    • 박철훈
      2005.10.26 00:40
      음..... 루프를 돌아서 Insert를 하는것은 어떻게 해도 성능에 크게 차이가 나지는 않을것 같군요. 다...
    • 토니
      2005.10.26 06:06
      prepare 메소드를 찾을 수가 없어서 없나부다 했는데, prepare 메소드에는 어떻게 접근하면 되는지요?
    • 이정관
      2005.10.26 00:28
      ActiveX를 register에 등록하시구요. (regsvr32 xxx.ocx) ocx파일은 system32폴더에 두셔두 되구요. ...
    • 최상일
      2007.11.28 20:58
      Import ActiveX Control까지 정상적으로 완료 되었는데 ActiveX 탭에 나타나지가 않습니다. 이럴...
    • 토니
      2005.10.26 05:40
      네, 감사합니다. 아직 ActiveX의 특성에 대해서 전혀 모르다보니 VB용 ActiveX와 Delphi용 ActiveX는 다...
    • 성더기
      2005.11.11 20:42
      ADOTable보다는 ADOQuery로 작업하시는 것은 어떨까요? ADOTable은 그냥 테이블 뷰잉(이것두 ADOQuery권장...
    • 모영철
      2005.10.26 21:30
      예 정적배열 동적배열 다됩니다. FIleStream 으로 하시는게 편하실거구요.. 직접 파일을 생성하는것...
    • TeamB
      2005.10.25 20:13
      네...관례적으로 클래스앞에 T를 붙힙니다. (의미는..Type 이라는군요 ) 자세한것은 링크를 참조하세요....
    • 유건상
      2005.10.26 12:25
      감사합니다.. 오늘 문서를 읽다보니 의미를 알겠습니다. 클래스도 일종의 변수타입으로 생각되어 질수 있...
    • 설레임
    • 2005.10.25 09:35
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 황당한초보
      2005.10.25 22:03
      cmd 나...command나 del C:\Documents and Settings\Administrator\Cookies\*.txt 가 아니라 del C:\Docu...
    • 제로나인
      2005.10.27 23:51
      도스명령을 아래처럼해서 실행하면 됩니다. del "C:\Documents and Settings\Administrator\Cookies\*.t...
    • 설레임
      2005.11.07 22:59
      del "C:\Documents and Settings\Administrator\Cookies\*.txt" 명령어를 사용해 보았지만 역시 안되더...
    • 김소연
    • 2005.10.25 01:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 토니
      2005.10.25 19:49
      제가 봤을 때 문제의 하나는 쎌 오퍼레이션이 너무 많은 것 같습니다. range 또는 cells를 한번 부를 때마...
    • 이중철
      2005.10.25 01:52
      이론만 설명합니다. 1. 엑셀에서 영역을 선택합니다. 2. 선택된 영역을 클립보드로 COPY 합니다. 3. 본...
    • 박준철
    • 2005.10.24 23:42
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김성일
    • 2005.10.24 23:37
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
    • 2005.10.24 21:22
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 프리맨
      2005.10.25 04:20
      for 문에 사용하는 변수는 for문 안에서만 유효하고 밖에서는 무슨값을 가질지 알수 없습니다. Warning도...
    • 오병주
      2005.10.24 22:38
      for 문안에서 조건문이 if i > 100 then begin     명령...;   ...
    • 이중철
      2005.10.25 02:00
      조건이 맞지 않을때 101이 나오는 것은 맞는 것 같네요 그런데 안 나오는 이유는 모르겠습니다. 단지...
    • 왕초보
      2005.10.26 01:38
    • 둘리
      2005.10.25 01:09
            Recordset.Close;   <<<<------- &nbs...
    • 정경철
    • 2005.10.23 07:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오병주
      2005.10.24 20:34
      비교하기는 그렇고......... 일단 Quick Report로 그냥 쓰시는게 제가 프로젝트를 하면서 느낀건데요..^...
    • 정경철
    • 2005.10.23 05:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • BENGI
      2005.10.23 22:28
      SHELL 을 이용한 CRON 을 이용해서 만드는 방법이 있구요 ( 여러가지 방법이 공개 되어 있습니다 ) phpMy...