mfc와 postgresql을 사용하여 프로그래밍을 하고 있는데요 . 단순로그성 데이터를 디비에 저장합니다. 하루에 80000개 정도를 삽입하는데 이걸 crecordeset으로 select하니 20분이 넘게 걸리더군요...
crecordeset rs;
rs.nextmove때문에 그런 것 같은데 한번에 빠르게 가져올 방법은 없는건가요?ㅠ
psql에서 자체 검색을 할 때는 7초 밖에 안걸렸거든요ㅠㅠ
mfc 라고 작성한다면, c++ 일터인데,
odbc를 사용하지 말고,
libpq로 직접 server side cursor를 구현하세요.
c++ 코딩한다면, 크게 어렵지는 않을 것 같네요.
쿼리 방법은
PQexec(connection, "begin")
PQexec(connection, "declare curs1 cursor for select .....")
for 문 result = PQexec(connection, "fetch 10 from curs1")
... 응용프로그램의 get result 작업 PQexec(connection, "close curs1") PQexec(connection, "end")
이런식입니다.
odbc의 대량 select 작업이 client cursor를 사용하기 때문에, 레코드 집합을 만들어내는데 비용이 많이 들기는 합니다.
이 문제에 열 받고, 내가 고쳐 보겠다면, postgresql odbc 코드를 보시고, 직접 server side cursor 기능을 개선해 주세요.
(길이 길이 남을 코드 기여가 될 것입니다.)