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 40813 게시물 읽기
No. 40813
UPDATE 쿼리인데 속도 문제
작성자
최인수(hinge)
작성일
2015-06-02 13:36
조회수
7,550

중복 고객 중 고객  ID를 기준으로 중복 순번을 모두 업데이트하는 쿼리인데 

아래 작성된 쿼리가 왜 이렇게 오래 걸리는지 모르겠네요.

고객은 약 10만정도이고 중복고객은 약 1,000건 정도밖에 안됩니다.

(5분이 지나도 끝나지 않길래 취소한 상태입니다.)

 

UPDATE T_CUST_MST A SET A.SAME_CUST_SEQ = ( 

    SELECT 

        Y.SAME_CUST_SEQ

    FROM

        T_CUST_MST X,

        (SELECT CUST_ID, ROW_NUMBER () OVER (PARTITION BY CUST_NM ORDER BY CUST_ID ASC) AS SAME_CUST_SEQ FROM T_CUST_MST WHERE SAME_CUST_YN = 'Y') Y

    WHERE X.CUST_ID = Y.CUST_ID

    AND X.CUST_ID = A.CUST_ID

); 

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

1. 해당 구문은 중복고객만을 대상으로 하고 있지 않습니다.
  - SAME_CUST_YN = 'Y' 조건은 서브쿼리에만 있습니다.
  - 메인 쿼리에는 조건이 없으므로 10만건이 업데이트 됩니다.
2. 서브쿼리는 메인쿼리 건수만큼 반복 수행됩니다.
  - 1000건에 대한 분석함수 수행 서브쿼리가 10만번 반복 수행됩니다.
  - 10만건 풀스캔하고 1000건 정렬하는 작업만 10만번 수행하는 것이죠.
  - 메인쿼리에 SAME_CUST_YN = 'Y' 조건을 추가한다고 해도 1000번 반복 수행됩니다.
3. 메인과 서브의 수행 순서를 바꿔야 합니다.
  - 서브쿼리가 먼저 수행되게 하려면 Merge 구문을 이용하세요.


MERGE INTO t_cust_mst a
USING
(
SELECT cust_id
     , ROW_NUMBER() OVER(PARTITION BY cust_nm ORDER BY cust_id) new_seq
  FROM t_cust_mst
 WHERE same_cust_yn = 'Y'
) y
ON (a.cust_id = y.cust_id)
WHEN MATCHED THEN
UPDATE SET same_cust_seq = y.new_seq
;

마농(manon94)님이 2015-06-02 14:33에 작성한 댓글입니다.

 감사합니다. 두번째 인라인뷰가 업데이트 한번될때마다 실행되고

그래서 느려지겠구나 하는 것을 글을 올리고 나서 알았습니다. 

최인수(hinge)님이 2015-06-02 14:52에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40816쿼리퀴즈입니다. SQL로 leaf node가 n개인 모든 이진 트리 구조를 구하기 [1]
김흥수
2015-06-03
9091
40815쿼리 정렬 질문 [3]
화생방
2015-06-03
7062
40814PK의 성능차이 문의드립니다. [1]
궁금
2015-06-02
8277
40813UPDATE 쿼리인데 속도 문제 [2]
최인수
2015-06-02
7550
40812쿼리 질문드립니다. [2]
2015-06-02
6767
40811퀴즈입니다. SQL로 구문트리화된 수식을 계산하기 [5]
김흥수
2015-06-01
10319
40810퀴즈입니다. 부분수열의 순열들을 모두 구하기 (공집합은 제외) [3]
김흥수
2015-05-29
8673
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다