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
운영게시판
최근게시물
MS-SQL Q&A 6637 게시물 읽기
No. 6637
쿼리 속도 문제인데요..
작성자
초보입니다.(fightinggood)
작성일
2013-02-27 10:38ⓒ
2013-02-27 10:50ⓜ
조회수
8,067

 안녕하세요...

쿼리 속도 때문에 이렇게 문의를 드립니다.

DB는 제가 잘 몰라서요. 기본적인 것만 하다보니 ㅠㅠ

 

 

=========================== 사용중인 쿼리====================================

SELECT DISTINCT STCK.BASI_DT, DLCO.DLCO_NM, INFO.GDS_NM, '['+ LEFT(CLFCD.CLF_NM,2) +']' AS CLF_NM ,  

'PRE_GB' = CASE WHEN STCK.PRE_GB = 'A' THEN '미' WHEN STCK.PRE_GB = 'B' THEN '선'  WHEN STCK.PRE_GB = 'C' THEN '대여' END, 

CYOVQ , EWHQ , XWHQ , HYOVQ, 

CASE WHEN RMK IS NULL THEN '' ELSE '(' + REPLACE(RMK, ' ', '') + ')' END RMK 

FROM TBL_PRE_DD_STCK STCK 

LEFT JOIN (SELECT DLCO_CD, DLCO_NM FROM VDLCO) DLCO ON STCK.DLCO_CD = DLCO.DLCO_CD 

LEFT JOIN TBL_GDS_INFO INFO ON STCK.GDS_CD = INFO.GDS_CD 

LEFT JOIN (SELECT DTLS_CD_NM AS CLF_NM , DTLS_CD_VAL AS CLF_CD FROM TBL_COM_CD_DTLS WHERE GRP_CD = '00043') AS CLFCD 

ON STCK.GDS_CLF = CLFCD.CLF_CD   

WHERE STCK.BASI_DT > '20090101'  

AND INFO.MAK_CD = '1' 

AND NOT HYOVQ = 0 

AND EXISTS 

( SELECT * FROM 

( SELECT MAX(BASI_DT) AS BASI_DT, DD.DLCO_CD, GDS_CD, PRE_GB 

FROM TBL_PRE_DD_STCK DD 

JOIN (SELECT DLCO_CD FROM VDLCO) DLCO ON DD.DLCO_CD = DLCO.DLCO_CD 

WHERE NOT (EWHQ = 0 AND XWHQ = 0) AND DD.DLCO_CD <> 0                  

GROUP BY DD.DLCO_CD, GDS_CD, PRE_GB ) A 

WHERE STCK.DLCO_CD = A.DLCO_CD 

AND STCK.GDS_CD = A.GDS_CD 

AND STCK.BASI_DT = A.BASI_DT 

AND STCK.PRE_GB = A.PRE_GB 

 )  

ORDER BY STCK.BASI_DT, DLCO_NM, GDS_NM, CLFCD.CLF_NM, STCK.PRE_GB

VDLCO 는 뷰 입니다. 인덱스는 걸려 있지 않습니다.

 

===========================================================================================

현재 사용중인 쿼리 입니다..

그런데 이쿼리가 속도가 너무 안나오네요.. 5분이 지나도 안나옵니다.

제가 만든건 아니고 기존에 있던 쿼리 인데요.. 이쿼리를 실행 하면 DB 가 뻗을 정도네요..

이것저것 보고는 있는데.. 잘 안되네요..

혹시 쿼리 수정 이나 테이블 인덱스 부분을 수정해서 속도가 좀 나아질까요.??

필요하시면 테이블 인덱스 부분 올려 드리겠습니다.

고수님들 초보좀 도와주세요~~!!

 

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

시간이 꽤 많이 지났네요...제가 이제봐서...전에 해결하셨으면 됬구요 ^^;  내공이 아직 적다 보니 쿼리만으로 업무를 파악하는데 어려움이 있어 다소 추상적이지만 그래도 혹시나 도움이 되진 않을까 끄적여 봅니다. 현재 쿼리에서 하나의 테이블을 두번이상 스캔작업이 일어나고 있는데 딱 한번의 스켄 작업만 일어나게 해주시고 조건절에 부정형 조건이 있는데 아무리 인덱스로 비교를 한다해도 부정형 조건은 인덱스를 타지 않습니다. 또한 뷰 자체가 물리적으로 테이블이 아닌 스크립트 즉 쿼리 형태로 저장되어 있으니 특정 컬럼을 뽑아내기  위한 서브 쿼리는 무의미 하다고 봅니다. 마지막으로 어느정도의 데인타인지는 모르겠으나 초보자 이신 경우엔 DISTINCT 보다는 GROUP BY 를 추천해 드리겠습니다.

김한결(jackal)님이 2013-05-03 12:20에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6641데이블간 조회..방법.. [1]
초보입니다.
2013-03-19
7731
6640두 테이블 간의 비교 [1]
김정례
2013-03-14
8282
6638ms-sql datetime 값의 변환 방법을 문의합니다. [2]
차동박
2013-03-04
8463
6637쿼리 속도 문제인데요.. [1]
초보입니다.
2013-02-27
8067
6636MS-SQL Express 정말 무료 인가요? [2]
장병주
2013-02-25
10229
6635MS SQL 2012 쿼리 작성 문의 [1]
박승한
2013-02-24
8097
6634아래 질문 다시 올립니다. [2]
dididic
2013-02-20
7656
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다