database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41008 게시물 읽기
No. 41008
쿼리 속도 질문좀 드릴게요... (도와주십시오 ㅜㅜ)
작성자
검콤이(검콤이)
작성일
2015-11-20 08:17ⓒ
2015-11-20 09:32ⓜ
조회수
8,587

아래 처럼 parallel dml 주고,

nologging으로 했는데도 속도에 변화가 없는데..

 

어떻게 하면 조금 빨라질 수 있을까요?

 

감사합니다 ㅠ

 

 

 

 

 

이 글에 대한 댓글이 총 4건 있습니다.

1. a 와 b 를 아우터 조인 한 뒤 b 에 Where 조건을 주면
  - 아우터 조인이 무의미해 집니다.
2. 일자와 시간을 묶어 검색하면 인덱스를 못탑니다.
  - 일자 조건만 가지고 인덱스를 타도록 유도해보세요
3. 각 조건별로 따로 나누어 조회하여 합치지 마시고
  - 한번에 조회하여 나누는 방식으로 하세요.
4. 개선 후 쿼리에선 아예 빠진 부분이지만 개선전 쿼리에서의 소소한 문제점
  - COUNT(컬럼) 은 비효율입니다. COUNT(*) 하세요.
  - UNION 은 비효율입니다. UNION ALL 하세요.


SELECT '20140319' sikdate
     , pernr
     , work_name
     , COUNT(DECODE(gb, 1, 1))                     moncnt
     , COUNT(DECODE(gb, 1, 1)) * 1000              monpay
     , SUBSTR(MIN(DECODE(gb, 1, regi_time)), 1, 4) montm
     , COUNT(DECODE(gb, 2, 1))                     aftcnt
     , COUNT(DECODE(gb, 2, 1)) * 1000              aftpay
     , SUBSTR(MIN(DECODE(gb, 2, regi_time)), 1, 4) afttm
     , COUNT(DECODE(gb, 3, 1))                     evecnt
     , COUNT(DECODE(gb, 3, 1)) * 1000              evepay
     , SUBSTR(MIN(DECODE(gb, 3, regi_time)), 1, 4) evetm
     , COUNT(DECODE(gb, 4, 1))                     nigcnt
     , COUNT(DECODE(gb, 4, 1)) * 1000              nigpay
     , SUBSTR(MIN(DECODE(gb, 4, regi_time)), 1, 4) nigtm
  FROM (SELECT a.pernr, b.work_name, a.regi_time
             , CASE WHEN a.regi_date||a.regi_time >= '20140319060000'
                     AND a.regi_date||a.regi_time <= '20140319090000' THEN 1
                    WHEN a.regi_date||a.regi_time >= '20140319110000'
                     AND a.regi_date||a.regi_time <= '20140319130000' THEN 2
                    WHEN a.regi_date||a.regi_time >= '20140319170000'
                     AND a.regi_date||a.regi_time <= '20140319210000' THEN 3
                    WHEN a.regi_date||a.regi_time >= '20140319230000'
                     AND a.regi_date||a.regi_time <= '20140320030000' THEN 4
                END AS gb
          FROM from food001  a
         INNER JOIN Basic002 b
            ON a.term_id = b.Term_id
         WHERE b.work_name = '대전'
           AND a.regi_date >= '20140319'
           AND a.regi_date <= '20140320'
           AND a.regi_date||a.regi_time >= '20140319060000'
           AND a.regi_date||a.regi_time <= '20140320030000'
        )
 WHERE gb IS NOT NULL
 GROUP BY pernr, work_name
;

마농(manon94)님이 2015-11-20 09:17에 작성한 댓글입니다.
이 댓글은 2015-11-20 09:20에 마지막으로 수정되었습니다.

정말 감사드립니다!

많은 공부가 되었습니다!

좋은 하루 보내세요~!!

검콤이(검콤이)님이 2015-11-20 09:32에 작성한 댓글입니다.

마농님 그런데 한가지 더 여쭤볼게 있습니다

append paraller 과 nologging을 준 이유가

아카이브를 최대한 안쌓이게 하려고 준 것인데..

마농님이 개선해주신 것에 다시 nologging과 append parallel을 주면

아카이브가 눈이 보이게 주는게 될까요~?

감사합니다!

검콤이(검콤이)님이 2015-11-20 09:52에 작성한 댓글입니다.

저는 Select 구문만 개선해 드린 것입니다.
Insert 는 별개로 접근하셔야 합니다.
parallel 과 nologging 또한 각각 별개의 관점으로 접근하셔야 합니다.
각각의 사용법과 제약사항을 확인해 보시고
제대로 사용했는지 확인해 보세요.

마농(manon94)님이 2015-11-20 11:13에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41011오라클에서 다른 owner의 트리거 소스 볼 수 있는 권한 부여 방법 [1]
김광표
2015-11-24
8489
41010구간 시작 끝 묶음 및 일련번호 부여 문의 드립니다. [2]
김미림
2015-11-23
8287
41009번호 질문.. [3]
김하늘
2015-11-23
8166
41008쿼리 속도 질문좀 드릴게요... (도와주십시오 ㅜㅜ) [4]
검콤이
2015-11-20
8587
41006쿼리좀 도와주세여.. 부탁드립니다. [2]
초보
2015-11-19
8302
41005데이터 한줄 내려서 정렬하기 [3]
민식이
2015-11-16
8595
41004sql connec by 문의하나 할께요. [1]
이현정
2015-11-16
8235
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다