Firebird에는 안타깝게도 벌크입력이 지원되지 않는다니 그나마라도 빠른 방법을 찾으려고 하는데요,
현재 저의 상황은 기존에 900만껀의 레코드가 들어있는 상태에서 80만껀의 데이타를 추가로 입력하려고 합니다.
일전에 900만껀을 한꺼번에 넣을 때는 ZTable1.Append를 썼는데(테스트해보니 그 방법이 초기에는 가장 빠르더군요), 좀 전에 900만껀이 들어있는 상태에서 80만껀을 추가시키려고 같은 방법을 써보니 이넘이 기존의 900만껀을 일단 ZTable1에 다 로드하는 지 한참을 조용히 있더니 몇 분이 지나서야 append가 시작되는 거 같았습니다.
일단 궁금한 것은 그 조용히 있는 시간동안 과연 무슨 일이 벌어진 것인지가 궁금합니다.
음..글을 쓰는 동안 일단은 지금 입력작업이 모두 끝났네요.
ZTable1이 데이타를 로드하는 오버헤드를 피하려면 ZQuery를 사용해야 할 것 같은데, ZQuery1.SQL.Text := 'insert into ... '; ZQuery1.ExecSQL; 를 사용해서 데이타를 입력하려면 아까 테스트 DB로 실험해본 결과 상당히 오래 걸리는 것 같던데요, 이보다 빠르게 입력할 수 있는 방법이 없을까요?
참고로, 입력할 데이타는 텍스트 화일에 있고 한줄씩 읽어서 약간의 가공을 하여 한 레코드를 완성시킵니다.
일전에 생각해 본 꽁수인데 아직 해본적은 없구요, 커서를 'select * from table1 where 1=0'과 같은 절대 한 행도 select되지 않을 문장으로 오픈시켜 놓고 CachedUpdates는 true, RequestLive도 true로 하여 ZQuery1.append를 사용할 수 있게 해놓고 append가 다 끝나면 applyupdate를 실행하면 혹시 되지나 않을까 생각해 봤는데, 조심하거나 미리 알아야 할 것이 어떤 것이 있을까요?
그리고 prepare도 시키고 싶은데 zeos에는 아무리 찾아봐도 prepare를 어떻게 시켜야 하는 지 모르겠습니다. ㅠ,ㅠ 혹시, prepare가 없는 것은 아닌지..-,.-a
아 그리고 갑자기 궁금해 진 건데요, MySQL에는 prepare문이 지원되나요?