아래와 같이 쿼리 만들었을때, 이건 풀 스캔에 해당되나요? 잘못된 방법인가요?
제가 sql을 체계적으로 배우지 못해서,,,^^
예1)
SELECT A1.*, JQTY
FROM
( SELECT * FROM SDB1..ITEMAS WITH (NOLOCK)) A1
LEFT JOIN
( SELECT ITCOD, SUM(BQTY+IQTY-OQTY)JQTY
FROM SDB2..JEGO WITH (NOLOCK)
GROUP ITCOD) B1 ON A1.ITCOD=B1.ITCOD
WHERE A1.ITNAM LIKE '%상품%'
ORDER BY ITCOD
상황에 따라 database를 바꿔서 해야 해서 보통 위와 같이 많이 합니다.
이유라면, 프로그램 개발시 데이타를 연결할 query콤포 넌트가 기본적으로 한개의 database에 connetion되어져 있어서
SQL에서 DataBase를 바꿔서 하는데, 이런경우
제Database가 아닌경우 오류를 발생해서 위와 같이 ( )와 같이 subquery로 해주면 괜찮거든요..
예2)
SELECT A1.*, JQTY
FROM SDB1..ITEMAS A1 WITH (NOLOCK)
LEFT JOIN
( SELECT ITCOD, SUM(BQTY+IQTY-OQTY)JQTY
FROM SDB2..JEGO WITH (NOLOCK)
GROUP ITCOD) B1 ON A1.ITCOD=B1.ITCOD
WHERE A1.ITNAM LIKE '%상품%'
ORDER BY ITCOD
보통은 예2)와 같이 하나 경우에 따라서는 예1)과 같이 하기도 하거든요~
예1), 예2) 어떠한 경우가 체계적인 sql인지..아니면 둘다 괜찮은건지..
sql고수님들 조언좀 부탁합니다 .
체계적인 sql 이라는 것은 없습니다.
다만 cpu memory disk 를 조금이라도 작게 써 어떤 쿼리가 더 효율적인 쿼리가 될까 고민 하는것이 되겠지요
흔히들 선배들이 subquery 에 무슨 한이라도 맺힌것 처럼 이야기 하지만 subquery 가 훨씬 효율적인 경우도 있고
커서가 apply가 없을때는 가장 효율적인 쿼리인 경우도 있었죠......
또 같은 테이블 구조에서도 데이터에 따라 틀리게 되므로 데이터 분포도가 있어야 최적의 쿼리를 디자인할 수 있습니다.
위 두 sql 은 옵티마이저가 같은 쿼리로 인식하게 되는 경우가 될 듯 합니다. 혹시 두 쿼리의 성능이 틀리던가요?
성능이 틀리다면 실제 실행계획을 둘 다 올려주세요~