사실 이것이 정확한 답변이라고는 장담을 못하겠습니다.
답변 내용은 10년전에 사용했던 Database를 기초로 말씀 드릴께요
그 당시 사용한 DB는 Informix와 Oracle등 이었는데
ODBC의 문제점으로 미들웨어 Pro-C로 작성하여 만들었습니다.
현재 델파이의 DataSet에서는 커서가 서버베이스, 클라이언트베이스로 나누어 져 있는것으로
알고 있습니다.
클라이언트베이스로 할 경우 데이터베이스에서 모든 검색데이터를 일괄적으로 클라이언트의
데이터셋에 보내줍니다. 문제점으로는 쿼리응답속도가 대단히 늦다는 것이고 장점으로는 이후
Next같은것을 할때에는 빠르죠(당연 클라이언트에 몽땅 들어왔으니)
그런데 서버베이스로 할 경우에는 첫 쿼리응답속도는 빠릅니다. 그런데 쿼리의 내용에 따라
Next가 늦을 수 있다는 거죠(사실 10년전 Pro-C 에서 그랬어요 요즘은 하도 서버와 PC가 좋아져서
그런일이 발생되지 않습니다.)
그런 문제점이 심각한 쿼리의 실행계획을 들여다 보면 이론적으로 다음 레코드를 가져올 때까지
코스트가 상당히 많다는 거죠 즉, 10만회 이상 Aceess후 다음 레코드를 가져올 수가 있는 경우죠
사실 어떤 데이터셋을 사용하는지 어떤 데이터베이스를 사용하는지 모르는 상황에서는 답변하기 힘들지만
일반적으로 While문으로 EOF 쓰신다면 DBExpress같아서 말씀 드립니다.
그리고 이와같은 질문을 할 경우에는 쿼리와 DB와 어떤 Dataset Component를 쓰는 지를 밝히는 것이
옳지 않을까요
위와 같은 경우도 ORACLE와 Informix에 한정된 그것도 ORACLE 5.0일때의 일이기에 현재의 버전은
알 수 없지만 (그 때에도 조금 한다는 중간 개발자들이 만들어 놓은 쿼리인데 문제는 조금 안다고 쿼리는 복작하게 함수 무지하게 쓰고 무겁게 만들어 놓은 쿼리로 결과만 나오면 된다는 식으로 작성된 것들)
푸념 : 그 때나 지금이나 학교나 학원에서 단순 Select만 가르치니 에고고... 신입사원 들어오면 쿼리 가르치는데 2년이상 소요하고 데이터베이스 잘한다고 들어온 5~10년 경력사원도 해시테이블도 모르고 실행계획이란것의 존재도 모르고 에구구.. 아참 이건 질문자에게 하는 푸념이 아니에요 단지 학원과 학교에 대한 푸념입니다.
예) with Query1 do begin close; open; While Not Eof Do Begin Next; Inc(i); end; end; 위 예에서 Next 하는 부분에서 너무 느립니다. 커서이동을 하지 않고, 그냥 Query를 불러오는데는 빠르나, 인서트 및 그리드에 값을 넣는 로직이 ...
이중철
•
2006.01.20 21:03
사실 이것이 정확한 답변이라고는 장담을 못하겠습니다.
답변 내용은 10년전에 사용했던 Database를 기초...
답변 내용은 10년전에 사용했던 Database를 기초로 말씀 드릴께요
그 당시 사용한 DB는 Informix와 Oracle등 이었는데
ODBC의 문제점으로 미들웨어 Pro-C로 작성하여 만들었습니다.
현재 델파이의 DataSet에서는 커서가 서버베이스, 클라이언트베이스로 나누어 져 있는것으로
알고 있습니다.
클라이언트베이스로 할 경우 데이터베이스에서 모든 검색데이터를 일괄적으로 클라이언트의
데이터셋에 보내줍니다. 문제점으로는 쿼리응답속도가 대단히 늦다는 것이고 장점으로는 이후
Next같은것을 할때에는 빠르죠(당연 클라이언트에 몽땅 들어왔으니)
그런데 서버베이스로 할 경우에는 첫 쿼리응답속도는 빠릅니다. 그런데 쿼리의 내용에 따라
Next가 늦을 수 있다는 거죠(사실 10년전 Pro-C 에서 그랬어요 요즘은 하도 서버와 PC가 좋아져서
그런일이 발생되지 않습니다.)
그런 문제점이 심각한 쿼리의 실행계획을 들여다 보면 이론적으로 다음 레코드를 가져올 때까지
코스트가 상당히 많다는 거죠 즉, 10만회 이상 Aceess후 다음 레코드를 가져올 수가 있는 경우죠
사실 어떤 데이터셋을 사용하는지 어떤 데이터베이스를 사용하는지 모르는 상황에서는 답변하기 힘들지만
일반적으로 While문으로 EOF 쓰신다면 DBExpress같아서 말씀 드립니다.
그리고 이와같은 질문을 할 경우에는 쿼리와 DB와 어떤 Dataset Component를 쓰는 지를 밝히는 것이
옳지 않을까요
위와 같은 경우도 ORACLE와 Informix에 한정된 그것도 ORACLE 5.0일때의 일이기에 현재의 버전은
알 수 없지만 (그 때에도 조금 한다는 중간 개발자들이 만들어 놓은 쿼리인데 문제는 조금 안다고 쿼리는 복작하게 함수 무지하게 쓰고 무겁게 만들어 놓은 쿼리로 결과만 나오면 된다는 식으로 작성된 것들)
푸념 : 그 때나 지금이나 학교나 학원에서 단순 Select만 가르치니 에고고... 신입사원 들어오면 쿼리 가르치는데 2년이상 소요하고 데이터베이스 잘한다고 들어온 5~10년 경력사원도 해시테이블도 모르고 실행계획이란것의 존재도 모르고 에구구.. 아참 이건 질문자에게 하는 푸념이 아니에요 단지 학원과 학교에 대한 푸념입니다.