오래간만에 들어와서 올리는 글이 질문글이네요. -_ㅡㅋ
예를 들어 아래와 같은 형태로 조회하는 쿼리가 있습니다. (조회조건과 이에 따른 룩업테이블은 더 추가 될 수 있습니다.)
----------------------------------------------------
SELECT C.년월명, B.부서명, SUM (A.가입여부) AS 가입건수
FROM 계약및가입정보 A, 부서정보 B, 년월정보 C
WHERE A.담당부서코드 = B.부서코드
AND A.가입년월코드 = C.년월코드
AND B.부서명 = '홍길동상회'
GROUP BY C.년월명, B.부서명
----------------------------------------------------
룩업테이블로 사용되는 [부서정보]와 [년월정보] 테이블의 구조가 각각 아래와 같다고 할 때;
[부서정보]
부서코드 CHAR(10)
부서명 CHAR(30)
[년월정보]
년월코드 CHAR(6)
년월명 CHAR(10)
----------------------------------------------------
다음 중 어떤 방식이 조회속도를 향상시킬 수 있을까요?
(1) PK(Primary Key)를 "~코드"에 건다.
(2) PK(Primary Key)를 "~명"에 걸고
인덱스(index)를 "~코드"에 건다.
첫댓글 두개다 해보시구 실행계획, 프로파일러등을 이용해서 시간을 확인해보시라고 할거 같은데..
눼. -_ㅡㅋ 혹시나 설명을 쫌 들을수 있을까 해서 올려본 질문이었다는 ...
일반적으로는 코드에다가 PK를 거는것이 일반적입니다. 나중에 코드명이 바뀌어 버리면 명이 다 엉켜버리기때문에 코드에다가 걸어서 명이 바뀌어도 저절로 바뀌는 걸로 나오게 하죠. 그리고 조회속도는 오라클처럼 힌트라는것이 없기 때문에 ms-sql은 옵티마이져가 최적의 실행계획을 뽑아서 실행합니다 코드에다가 PK를 걸면 어떻게 쿼리문을 짜든 속도는 똑같습니다. PK를 거는 위치에 따라서 실행 속도가 달라집니다. 최적의 PK는 저걸봐서는 알수 없지만. 일반적으로 유지보수나 관리 측면에서 코드에 거는것이 일반적입니다. ..... 라고 말씀 드리고 위 내용은 어디까지나 일반적으로 그렇다는겁니다.
답변 감사합니다. 위 게시글 머리말에 있듯이 "오라클"의 경우이구요. "룩업의 대상이 되는 코드명에 PK를 걸고 집계테이블과 조인이 되는 코드에 인덱스를 거는 것이 집계속도가 빨랐다"라고 해서 궁금했었습니다. 하나의 집계테이블을 중심으로 위와 같이 조인이 걸리는 룩업 테이블이 대략 150여개이며 어떤 룩업테이블은 AND 조건으로 또 어떤 룩업테이블은 OR 조건으로 쿼리를 날리거든요.
아 오라클이군요.. ㅋ 저 글자를 못 읽었다는..ㅋ 제가 알기로는 varchar PK 가 제일 빠른걸로 알고 있는데요.. 그리고 어떤 코드컬럼이랑 조인 거는 것이 중요하기보다는 마스터 드라이브 테이블이 어떤거냐에 따라서 속도 차이가 발생할꺼에요..
답변 감사드립니다. 많은 참고가 되었습니다.