Q&A

  • 조언 부탁드립니다.
ms-sql7.0에서 데이터를 가져올려구 하는데요...
쿼리를 던져서 가져오는데 시간이 조금 걸립니다.
그런데 가져오는 동안은 프로그램이 어떠한 동작도 하지 않습니다.
한마디로 가져오는 동안은 프로그램이 죽어버립니다.
전부 가져오면 다시 동작을 합니다... 뭐 버튼 클릭 같은거요...
이런 경우에는 어떻게 코딩을 해야 하는지요?
어떤분은 thread를 사용하시라고 하는데.. thread를 사용한다면 구체적으로 어떻게 사용해야 하는 것인지요?
제가 알기로는 thread는 여러작업을 작게 나누어서 작업을 하는 걸루 알고 있는데(맞는지 모르지만..) 이런경우에는 단지 쿼리만 던져서 데이터를 가져오는 것인데..... 이런경우에도 thread를 사용하는 겁니까?

그럼 많은 조언 부탁드립니다.
감사합니다.
6  COMMENTS
  • Profile
    이중철 2003.12.17 23:27
    결과적으로 보면 검색속도 향상은 아닙니다.
    총 검색시간은 더 늦을 경우가 많겠죠

    -------------------------------------------------------
    쿼리문에서...
    Order By, Group By(이놈은 쓸때 써야죠 ^^)을 쓰지 않는다.

    이유 : Database에서 쿼리문을 Decode해서 쿼리한 결과값을 TEMP에 저장
             하여 소트한다.

    ^^ 그 TEMP에 다 저장할때 까지 못기다리는 분 ㅋㅋ 바로 나..
    -------------------------------------------------------

    Ado  보면 커서모드 선택하는것이 있는데 그것을 서버로 한다.
    (또 다른 옵션을 선택하여야 하는데 전 Dbexpress를 써서 잘 모르겠네요)

    하여간 이 경우 Recordcount가 나오지 않습니다.

    open해서 Recordcount가 0보다 크다면 이미 데이타를 레코드셋에

    Assign했다는 이야기 입니다.

    다른말로 쿼리해서 데이타를 다 가져와서 레코드셋에 다 Input했다는 이야기

    이기도 하지요

    --------------------------------------------------------

    위와같이 할 경우 어떤 제약이 있을까요..

    DBGRID 그런것들은 쓰지못할 것이다(될수있으면 쓰지 마세요

    코드만 난잡해져요)

    전 한번도 쓰지 않았기에 쓸 수 있는지 조차 모릅니다.

    SORT는 직접해야 한다.

    그럼 어떤 이득이 있을까요

    백만건을 검색하나 10건을 검색하나 첫번째 데이타가

    검색되는 시간은 0.1초도 안걸린다.

    DataSet.open;
    DataSet.First;
    While not DataSet.eof do
    begin
      .....
    (100건 또는 1000건에 한번씩 Application.ProgressEvent 등을 돌리시고 ^^)
      DataSet.next;
    end;
    DataSet.Close;

    켁켁 이상입니다.

    그리고 사실 전 Order By는 해 줍니다. 나중에 소트하기 귀찮아서..

    그러나 부하직원에게는 Order by는 주지 말라고 이야기 합니다.

    참 쿼리 던질때도 파라메터 쓰지 마시기를 그냥 SqlText또는

    CommandText에 그냥 쿼리 넣으세요

    Parameter를 쓰면 Dataset이 Parsing하면서 Validcheck를 하기에

    그 Overhead도 꽤 됩니다.

    그 내용은 이쪽에서도 상당히 올라온 것으로 알고 있습니다.

  • Profile
    정광필 2003.12.18 01:12
    정말 감사합니다. ^^
    정말 유용한 정보입니다.
    사실 소트하기 귀찮아서 order by,group by 절을 많이 사용하는 편입니다.
    현재 쿼리문을 보니 200줄이 조금 넘더군요..
    그리고 저같은 경우는 devExpress를 사용하여 코딩하고 있는데..
    부득이하게 그리드를 사용하고 있습니다...
    그럼 한가지 궁금한게 있느데... 쿼리문에 IN절을 여러군데 사용하고 있습니다.
    ms-sql의 profiler을 돌려보니 IN절이 있는 쿼리에서 CPU 사용량이 엄청 올라가더군요...
    이런 경우는 어떻게 되는지요?
    그리고 ADOQuery객체를 한번 써서 쿼리를 던지는 거하고 여러개를 사용하여 쿼리를 쪼개서 던지는거하고는 성능 차이는 어떻게 되는지 궁금합니다.
    제 짧은 소견으로는 복잡하더라도 한번에 해결하는 것이 좋을 듯 싶은데...
    의견을 듣고 싶습니다.

    그럼 감사합니다.
    감기조심하십시오!




  • Profile
    이중철 2003.12.18 05:19
    200줄이면 꽤 많은 쿼리문이네요

    원칙은 정하고 가볼까요

    ---------------------------------------------------
    먼저 복수의 검색 데이타은 UNION을 걸자.

    (복수의 데이타를 가져오는데 Inline select를 걸어서 가져오는것은
    비 추천입니다.)
    ---------------------------------------------------

    IN절에 대해서 알아볼까요

    자 DB엔진에서 쿼리문을 어떤식으로 처리할까요..(예 JOIN이 아닌.. JOIN이라도 방법은 같음.)

    먼저 Where절에서 Index가 있는것이 쿼리에 조합이 되었있나

  • Profile
    정광필 2003.12.18 20:24
    흠냐~~
    정말 어렵네요...
    좋은 정보 정말 감사합니다. 한수 배우고 갑니다.. ^^
    사실 IN절에 대해서 물어본것은 10초마다 DB에서 데이터를 가져와야 하는데 그 쿼리문에 IN절을 여러군데 사용하고 있습니다.
    그부분에서 서버의 CPU 사용량이 어~엄청 올라가서요...
    그래프를 보니깐 멋(?)지더군요.. 퍼포먼스도 떨어지는것 같고.. 흠냐...
    님 조언에 따라 쿼리를 다시 손봐야 겠습니다.
    조언감사하고 날씨가 많이 쌀쌀한데 감기 조심하십시오.
    그럼...




  • Profile
    너구리 2003.12.17 22:47
    네 스레드를 사용하여

    세션을 만들고 쿼리를 던지게 되죠...

    전에 저도 하려다가 에러나서
  • Profile
    정광필 2003.12.17 23:03
    답변 감사합니다.
    결론은 쿼리문이군요... 흠냐... ㅡ,.ㅡ;;
    union을 많이 사용해서 그런지 쿼리가 100줄이 넘어갑니다...
    그럼 먼저 쿼리로 속도를 해결하는 방법으로 바꿔야 되겠군요....
    답변 감사합니다.
    즐거운 하루 되십시오!



    • 최용일
      2003.12.19 22:58
      안녕하세요. 최용일입니다. 그건 델파이가 연산속도를 높이기 위해서 그렇게 최적화를 한겁니다. 프...
    • 장태원
      2003.12.19 20:23
      꺼꾸로 돌수가 없습니다. 로직이 잘못된듯..
    • 최용일
      2003.12.19 23:02
      안녕하세요. 최용일입니다. 질문을 의도를 정확히 잘 모르겠지만... URL바로가기는 걍 텍스트 파일을 만...
    • 최인권
    • 2003.12.19 01:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.12.19 23:06
      안녕하세요. 최용일입니다. 가상 모드를 이용해보세요. 백만개든 천만개든 퍼포먼스에 아무런 문제가 없...
    • 장태원
      2003.12.19 20:25
      Database 를 이용하세요. 그거 파일로 매번 저장하고, 체크하고 언제 합니까?? Table 하나 만들어서 add...
    • 조희정
    • 2003.12.19 01:10
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 한경수
    • 2003.12.19 00:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2003.12.19 22:57
      서버측에 프로그래밍을 해서 브로드 캐스팅하는 방법이 .... 아니면 일정시간마다 클라이언트를 Refresh하...
    • 홍길동
    • 2003.12.18 22:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.12.19 20:25
      핸들이라...-_- 버튼클릭시 일어나는 것은 이벤트죠.. Onclick event
    • 김건림
    • 2003.12.18 21:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.12.19 23:08
      안녕하세요. 최용일입니다. 자료실에 MSNPopup컴포넌트가 있습니다. MSN처럼 팝업창을 띄워주는 컴포넌...
    • 김도성
    • 2003.12.18 20:34
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 장원익
    • 2003.12.18 19:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
    • 2003.12.18 02:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • MIDAS
      2003.12.27 00:47
      트리거는 서버에서 실행되는 건데 왜 클라이언트에서 실행하는지 이해가 되질 않습니다.
    • 김동범
    • 2003.12.18 01:59
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 미스터박
      2003.12.20 04:18
      소스 올리니 보시고 참고하세요... 고맙다는 생각이 들면 pjrmail@empal.com 으로 메모해주면 ^.^
    • 미스터박
      2003.12.18 06:03
      당연히 가능하지요.... 제가 프로그램해서 사용하는데도 있는데요 소스가 필요하면 pjrmail@empal.c...
    • 김정훈
    • 2003.12.18 01:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.12.19 20:26
      null 과 같은 의미로 보시면 되는데.. 여러 의미로 사용됩니다. 無객체라고 보시면 되겠습니다.
    • 이기재
    • 2003.12.17 23:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2003.12.18 22:43
      Binary Length를 구하는 함수를 쓰셔요 컴터가 맛이가서 델파이가  않뜨네요.. Lengthb 비스무...
    • 정광필
    • 2003.12.17 22:42
    • 6 COMMENTS
    • /
    • 6 LIKES
    • 이중철
      2003.12.17 23:27
      결과적으로 보면 검색속도 향상은 아닙니다. 총 검색시간은 더 늦을 경우가 많겠죠 ------------------...
    • 정광필
      2003.12.18 01:12
      정말 감사합니다. ^^ 정말 유용한 정보입니다. 사실 소트하기 귀찮아서 order by,group by 절을 많이 사...
    • 이중철
      2003.12.18 05:19
      200줄이면 꽤 많은 쿼리문이네요 원칙은 정하고 가볼까요 ----------------------------------------...
    • 정광필
      2003.12.18 20:24
      흠냐~~ 정말 어렵네요... 좋은 정보 정말 감사합니다. 한수 배우고 갑니다.. ^^ 사실 IN절에 대해서 물...
    • 너구리
      2003.12.17 22:47
      네 스레드를 사용하여 세션을 만들고 쿼리를 던지게 되죠... 전에 저도 하려다가 에러나서
    • 정광필
      2003.12.17 23:03
      답변 감사합니다. 결론은 쿼리문이군요... 흠냐... ㅡ,.ㅡ;; union을 많이 사용해서 그런지 쿼리가 100줄...
    • 최용일
      2003.12.19 23:12
      안녕하세요. 최용일입니다. WinTypes, WinProcs유닛을 델파이 3.0이하에서 쓰이는 유닛으로 Windows유닛...
    • 오은경
    • 2003.12.17 20:56
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 너구리
      2003.12.17 22:57
      뭐 어찌 됐든간에 for문으로 돌려서 만드셔야겠네요.. 간단하게 생각해보면 var   QrLab...
    • 오은경
      2003.12.18 00:29
      답변에 감사드립니다... 그런데~ 님이 말씀하신대로~ 했더니 에러가 나네요... Access violation Error ...
    • 이중철
      2003.12.18 06:30
      퀵레포트는 사용하지 않아 잘 모르지만. 구문에서 변수만 정의하고 Object를 생성하지 않았네요 참...
    • 조우택
    • 2003.12.17 20:27
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이희진
      2003.12.17 23:31
      HlinkSimpleNavigateToString('http://www.delmadang.co.kr', nil, 'MAIN', ComObject, nil, nil, 0, 0); ...
    • 윤광희
      2003.12.17 21:56
      ActiveX가 브라우저로 이벤트를 처리하도록 넘기는 방법을 써보세요. 브라우저에서는 자바스크립트를 써...
    • 조우택
      2003.12.17 22:22
      답변 감사드립니다. ActiveX에서 이벤트를 발생시켜서 Browser가 Script를 실행하게 하란 말씀이신가요?...
    • 김지영
    • 2003.12.17 20:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 미스터박
      2003.12.20 02:27
      제가 알기로는 그렇게 할 수는 없습니다. 하지만 FIXED LOW 수를 0으로 설정하고 판넬을 이용해서 구현...