Q&A

  • 쿼리속도에 관한 질문입니다.
서브쿼리를 3개를 썼으며 각각의 서브쿼리는2,3개의 쿼리가 조인되어 있습니다.
select문이 거의 9개쯤되는데요...쿼리를 open하면 거의 1분정도가 소요됩니다.  좀더 빨리 조회결과를 보고 싶은데요....쿼리속도를 개선하기 위해서
서브쿼리를 여러개 쓰는것이 좋은 방법이 아닌건지,,, 좀 알고 싶군요..
쿼리는 겨우 39줄밖에 안되는데.. 속도가 넘 늦어서요..

첨엔 쿼리에 Calsfields를 써서 필드를 추가해서 속도가 늦을꺼라 생각했는데
회사프로그램에서도 CalcFields를 여러개 써도 빠르거든요..

지금 저희 회사에서 쓰고 있는 다른 프로그램은 쿼리길이가 90줄이 넘는것도
많거든요,, 근데 속도는 길어야 20초도 안걸리거든요,,,

이렇게 말로만 말씀드려서는 이해가 잘 안 가시겠지만,,,, 쿼리속도를 개선할
수 있는 방법에 대한 정보가 있으시면 좀 갈켜 주심 감사합니다.
아님 고수님들이 사용하시고 계시는 쿼리방법이라도 있으시면 갈켜 주심
백골이 남방하겠습니다 .(?)  ㅎㅎㅎ

제가 초보라 잘 모릅니다.  그러니 고수님들의 고견을 듣고싶습니다.
7  COMMENTS
  • Profile
    하얀까마귀 2003.08.06 02:45
    안녕하세요 하얀까마귀 입니다.

    아주 오랜만에 글쓰네요..ㅎㅎ

    누구나 마찬가지이겠지만... 뭐라고 딱 꼬집어서 이야기 하긴 힘든문제입니다.

    말씀대로 서브쿼리가 2-3개가 있다고 느린건 아닙니다만. 그렇다고 속도에 영향을 미치지 않는것도아닙니다.

    서브쿼리는 분명 속도저하의 요인이 될 가능성이 큰놈입니다.

    물론 말씀하신 calcfiled도 마찬가지이구요. 이넘도 느릴가능성이 높죠..

    무조껀 느린건 아니구요.. ㅎㅎ

    밑에글 읽어봤는데 말씀처럼 조인을 키로 해주셧다면 그런부분에서는 별로 해결할 방법이 없을듯 하네요..

    기본적으로 오라클 설정의 문제나 인덱스등의 테이블 자체의 문제가 아니라면
    컴퓨터가 느린거겠죠??
    그것도 아니라면 쿼리를 다시 한번 만들어보세요..
    제생각에는 서브쿼리의 문제일것 같기도 하네요.
    인덱스가 너무 엉켜잇어서 문제가 될수도 있구요. 이런경우는 인덱스를 다시한번 만들어줘보시구요.
  • Profile
    major 2003.08.05 21:15


    안녕하세요...
    전 고수는 아니지만.. 아주 혹시 도움이 될까 해서 올립니다..
    좀 막연하게 속도가 느리다고 하시니...어떻게 도와 드려야 할지는 모르겠네요..
    쿼리에서 서브 쿼리를 많이 써서 무조건 느리다는 건 잘못 된 말인건 아셨겠네요..^^; 역쉬 몸으로 느끼는 게 젤 빠르져...

    흠 일단 쿼리에 문제보다는 키에대한 정의를 살펴보시고 이왕이면 키로 조인을 거시는 것이 좋겠져? 글구 Join을 하기전에는 약간의 검색을 이왕이면 키로검색을 하시면 더욱 좋구요.. Index라는 것을 타면 걍 검색하는 것보다는 좀 빠르자나요... 그래서 이왕이면 이렇게 검색을 해서 조인을 거시는 것이 좋을 것 같네요...최대한으로 검색할수 있는 데까지 검색을 하는 것이 좋을 것 같네요..
    그리고 만약에 Group 사용하셨다면 이왕이면 한번에 Group 을 하실수 있도록 좀더 생각을 하셔야 할 것 같네요 SubQuery를 몇번 사용하신것 보니까 Group을 몇번 정도 사용하신 것 같네요^^;;

    어쨌든 전 이런식으로 사용을 하도록 노력하는데 가끔을 날림 코딩할때두 있어여..ㅠ.ㅠ
    글구 책 선전하는 건 아니지만 저 같은 경우에는 대용량데이타 베이스라는 책을 보구 많이 느끼기두 했어여.. 글구 이화식 사장님의 강의를 듣고 정말 제가 모르것을 많이 배우기두 했구요... 혹시 이런 곳에 강의 같은 것이 있으면 신청하셔서 한번 들어 보세요.. 정말 도움이 많이 되더라구요.. 절대 광고 아닙니다.

    그럼 즐프하세염...

  • Profile
    김정모 2003.08.05 21:55
    답변 감사합니다..  저도 서브쿼리를 몇개를 썼다고 해서 막연히 속도가
    늦는것이 아니라는 건 알고 있습니다.
    제 질문이 좀 막연하셨죠?,,,  저도 첨에 이걸 어떻게 설명을 드려야 고수님들이 이해하시기에 편하실지 고민을 했습니다.
    제가 참조하는 table이 4개입니다.
    2개의 테이블의 건수는 몇천건입니다만 나머지 2개가 좀 크거든요,,,
    몇 만건이 됩니다.
    그리고 지금 제가 조인을 건건 모두 primary key로 잡혀있는걸 기준으로 조인을 걸었거든요.. primary key는 자동으로 인덱스가 생성되는거 아니가요..
    아님 조인을 걸때 새로 인덱스를 생성해야 하나요..
    제가 첨 오라클을 배울때 기본키는 생성시 인덱스가 자동으로 생기는 걸로
    알고 있는데여....
    저도 솔찍히 좀 답답합니다. 제가 일을 시작한지가 얼마 안되는 초보라서
    설명을 드리기도 힙들고 고수님들 답변 주시는것도 가끔은 이해가 안되고
    그러네요,,,







  • Profile
    major 2003.08.06 02:16
    꼭 냉무인데 보시는 분이 있네요...

    이거 무시하는 거 맞져? 저 지금 무시당하는 거져...ㅠ.ㅠ

    ㅋㅋㅋ 농담이에요.. 쓸말이 없어서 전 이만...
  • Profile
    김정모 2003.08.06 02:58
    밑에 소스가 있거든요,,, 함 보시고 의견을 말씀해 주세요
  • Profile
    김정모 2003.08.06 02:57
    select  A1.cupon_cd  as  cupon_cd ,
                 A2.cupon_name as  cupon_name,
                 A1.tot_sale_qty as  tot_sale_qty,
                  A1.item_cnt  as item_cnt,
                   A2.discount as discount
    from
          (  select   aa.cupon_cd,
                         sum(aa.tot_sale_qty) as tot_sale_qty,
                          bb.item_cnt
             from
                       (   select   A.Scan_cd2  as  Scan_cd2,
                                       B.cupon_cd  as  cupon_cd,
                                       A.tot_sale_qty  as  tot_sale_qty
                             from
                                    (  select scan_cd2,   item_cd,  
                                                 sum(tot_sale_qty)  as  tot_sale_qty
                                           from st_item_total
                                         where sale_date >= :sdate
                                          and     sale_date <= :edate
                                        group by  scan_cd2,  item_cd   )  A,

                                       (  select   cupon_cd,  item_cd  
                                          from mt_cupon_item    )   B

                             where     A.scan_cd2 = B.item_cd    )  AA,

                           (  select   cupon_cd,  sum(item_cnt)  as item_cnt  
                                 from  st_cupon_total
                               where sale_date >= :sdate
                                 and     sale_date<=:edate
                                 group by  cupon_cd       )  BB

                 where   aa.cupon_cd = bb.cupon_cd

                   group by aa.cupon_cd, bb.item_cnt          ) A1,

               (select  cupon_cd, cupon_name, discount  from mt_cupon )  A2

    where A1.cupon_cd = A2.cupon_cd
    쪽지 잘 받았습니다. 네!! 저 76년생입니다. 님도 76년생이라니 방갑네여..
    먼저 제가 만든 쿼리는 이렇구요..
    여기에 쓰인 cupon_cd, item_cd, scan_cd2 모두 기본키입니다.
    소스를 보시면 아시겠지만 지금 제가 유통회사에 다니고 있습니다.
    아무튼 첨보단 속도를 줄였거든요(첨에 1분이 넘게 걸렸는데 책을 보고
    30,40초대로 줄였습니다.)
    근데 문제는 제 컴사양은 회사에서 좋은 쪽입니다.(p-4 :  2.4g)
    제 컴이 이정도 시간이 걸리는데 다른 윗사람 컴은 저보다 오히려
    상태가 않 좋거든요,,
    그래서 속도를 줄일려고 그럽니다.

  • Profile
    허강우 2003.08.06 07:44
    쿼리만 보고는 속도의 저하를 쉽게 알수 없네요.
    일단 쿼리는 정상이라는 가정하에 말씀드립니다.
    쿼리가 정상이라도 인덱스를 잘못 구성하면 속도 저하의
    원인이 됩니다.
    일반적으로 분포도가 15% 이상이면 인덱스로 사용하지
    안는게 좋다고 되어 있습니다. 또는 사용하더라도
    쿼리의 양을 줄일 수 있도록 IN 등을 활용하라고 하더군요.
    (제 경험은 아니지만 경험자의 말입니다.)
    쿼리가 결론을 얻는데까지 드는 비용을 비교적 정확하게
    계산하고 싶으시다면 "대용량 데이터베이스 솔루션"(이화식) 이라는
    책도 소개하고 싶네요.
    도움이 되었나 모르겠네요...^^
    • 최은하
    • 2003.08.06 02:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.08.08 20:59
      우선 이미지 저장은 밑에 찾아보면 있습니다. 먼저 찾아 보는 습성을 가집시다.
    • 강은철
    • 2003.08.06 02:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2003.08.06 18:07
      안녕하세요. 타락임다.. 어플 프로그래밍을 취미로 하긴 힘듭니다 (취미로 하실려면 플래쉬나, 자바 스...
    • 강은철
      2003.08.07 01:55
      쩝... 섭섭하지만 감사합니당... ㅠㅠ 프로그래밍에 대해 어느정도 알고 오라는 말씀같은뎅... 이...
    • 이광수
      2003.08.06 01:34
      가장큰차이는 기타 번들 소프트웨어의 차이가 있는걸로 압니다. 설계용 툴이고요. 두번째는 컴포넌...
    • 타락천사
      2003.08.06 17:42
    • 하얀까마귀
      2003.08.06 02:55
      안녕하세요 하얀까마귀 입니다.   (lParamLo shr 8) 상위 바이트   ( lParamLo ...
    • 하얀까마귀
      2003.08.06 03:03
      안녕하세요 하얀까마귀 입니다. 말씀처럼 리스트 뷰에서 delete 하시면 되는데요.. 이상하네요. 왜안...
    • KDDG_Hit
      2003.08.06 03:14
      저것을 True로 설정하고 하니까 일일이 수동으로 해주어야 하더군요. 그래서 삭제도 잘 안되는거 같아...
    • 장태원
      2003.08.08 21:12
      특정 Row 자체를 숨기는 기능은 없습니다. 차리리 함수를 만드셔서.. 그 Row 를 삭제하는 루틴 ...
    • 김정모
    • 2003.08.05 20:00
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.08.06 02:45
      안녕하세요 하얀까마귀 입니다. 아주 오랜만에 글쓰네요..ㅎㅎ 누구나 마찬가지이겠지만... 뭐라고 ...
    • major
      2003.08.05 21:15
      안녕하세요... 전 고수는 아니지만.. 아주 혹시 도움이 될까 해서 올립니다.. 좀 막연하게 속도가 느...
    • 김정모
      2003.08.05 21:55
      답변 감사합니다..  저도 서브쿼리를 몇개를 썼다고 해서 막연히 속도가 늦는것이 아니라는 건 ...
    • major
      2003.08.06 02:16
      꼭 냉무인데 보시는 분이 있네요... 이거 무시하는 거 맞져? 저 지금 무시당하는 거져...ㅠ.ㅠ ㅋㅋ...
    • 김정모
      2003.08.06 02:58
      밑에 소스가 있거든요,,, 함 보시고 의견을 말씀해 주세요
    • 김정모
      2003.08.06 02:57
      select  A1.cupon_cd  as  cupon_cd ,      &nb...
    • 허강우
      2003.08.06 07:44
      쿼리만 보고는 속도의 저하를 쉽게 알수 없네요. 일단 쿼리는 정상이라는 가정하에 말씀드립니다. 쿼리가...
    • 주영준
    • 2003.08.05 16:19
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 신동식
    • 2003.08.05 09:14
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 정경철
      2003.08.06 23:50
      혹시 이 기능을 원하는지 모르겠습니다. 참고 하십시오. TreeView1.Items.Clear;  // 전체 지...
    • 신동식
      2003.08.07 14:57
      답변 달아 주셔서 감사합니다. 아래 기능을 원하는 것이 맞습니다만 RecordSet 의 각 Record 에 대한 P...
    • 김태성
    • 2003.08.05 07:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이희진
      2003.08.18 23:35
      배포하시는 inf 파일을 어떻게 작성하셨는지는 모르지만, dll을 함께 배포할 경우 다음과 같이 inf 파일을...
    • 기지훈
    • 2003.08.05 06:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_RNStone
      2003.08.05 21:39
      원래 StatusBar는 여러개의 Panels을 가질 수 있습니다. 'Panels Editor...'를 가지고 생성 할 수 있지요. ...
    • shem
    • 2003.08.05 06:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ^ㅡ^
      2003.08.05 07:27
      //도움이 되시길 바랍니다.   Edit1.SetFocus;  //커서위치를 에디터로 옮긴다 &nbs...
    • 김정모
    • 2003.08.05 04:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_RNStone
      2003.08.05 21:41
      혹시나 해서 쓰는건데... QRStandardPreview.Free; 해 주셨나요? 메시지만 봐서는 메모리에서 해제가...
    • 김정모
      2003.08.05 22:23
      당연히 썼지요... 그런데도 안 되고 그러네여... 이런 현상이 계속일어나기도 하지만 컴을 껐다가 켜면...
    • 김윤경
    • 2003.08.05 01:35
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 박서규
      2003.08.05 01:49
      1. 바탕화면의 캔버스를 BMP -> JPEG로 저장해서 서버쪽으로 전송하면 되는건깐,,,, 간단하게 하자면 ...
    • 김윤경
      2003.08.05 09:13
      답변 너무 감사하구요.. 질문 하나만 더 해도 될까요? 이제 델파이 기초문법을 시작하려하는데요..(막막...
    • 장태원
      2003.08.08 21:10
      델파이책을 사서 보셔야죠. Network Programming 인지, DB Programming인지, Win API 나 System 다 ...
    • 손상엽
    • 2003.08.05 01:14
    • 3 COMMENTS
    • /
    • 0 LIKES
    • ^ㅡ^
      2003.08.05 01:27
      //도움이 되셨으면 합니다. var   RecFH : TextFile;   tmp_FILENM : Strin...
    • 손상엽
      2003.08.05 02:12
      님께서 답변해 주신게 저한테 딱 맞는 예제네요.. 정말 감솨감솨합니당.. 헤헤.. 아까 안되는게 있었는...
    • ^ㅡ^
      2003.08.05 07:29
      ★말씀을^^; 부끄^^a
    • 정경철
      2003.08.06 23:56
      2번 질문은 엑셀 파일인것 같은데.. 엑셀 자료는 델파이에서 그대로 불러 올수 있으며 여기 팁이나 질문에...
    • 안영범
      2003.08.09 06:35
      정경철님 좋은답변 감사드립니다. 꾸벅 ^^
    • 김은경
    • 2003.08.04 21:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 고니
      2003.08.04 23:57
      엑섹 화일이 읽기 속성으로 되어있는것 같군요 한번 확인해 보세요 아니면 WorkBooks.Open 할때 IgnoreRea...