SELECT DISTINCT CODE
BRAND_NM
FROM GOODS a
, SALE_DSNT b
WHERE a.GOODS_CODE = b.GOODS_CODE
AND a.DIV_CODE = '00'
AND b.ROWID = ( SELECT a.ROWID
FROM SALE_DSNT a
WHERE a.GOODS_CODE = b.GOODS_CODE
AND ROWNUM = 1
)
의견
GOODS 와 SALE_DSNT 테이블은 1:M 관계
M 테이블에 필요한 매칭 ROW는 각 GOODS_CODE 1개만 필요
왜냐하면 나중에 DISTINCT 로 UNIQUE 하게 만들기 때문이죠.
많은 ROW들을 SORT 하기 전에 정렬의 부담을 없애기 위해 ROWID를 활용하여 FILTER를 하는겁니다
가상을 그려 봅니당...
1. DRIVING 테이블이 GOODS 가 될것 같군용
2. DIV_CODE 인건이 100개정도가 됩니다(종류 겠죠)
3. 이제 SALE_DSNT 테이블에 팔렸는지 안 팔렸는지 확인을 위해
조인을 걸어 봅니다... GOOD_CODE를 활용하여...
4. 장사가 너무 잘되어서 매칭되는 건수가 10만건이네요...
근데 우리가 필요한 UNIQUE한 데이터는 90개 인데요...
10만건 SORT를 없애기 위해 B의 테이블에 매칭 되는 ROWID로 필터를 하게 됩니다.
5. FILTER 를 할때 GOODS_CODE의 INDEX를 이용할 테구요.
6. SINGLE BLOCK ACEESS를 하게된 서브쿼리는 정렬된 순서대로 SCAN을 하게 됩니다
7. 해당 GOODS_CODE의 INDEX의 최상단에 있는 애들만 맨날 걸리겠네요.
8. 우리가 원하던 90건만 추출을 해 냈습니다.
9. 상품의 브랜드는 상품 코드의 그룹이라 볼수 있겠네요.
10. 해당 코드와 브랜드는 90건중 20건 정도가 나올수가 있겠네요.
제가 유추해본봐에 의하면, 결론은 대량의 SORT로 인한 부하를 없애기 위한
ROWID를 활용한 FILTER 적용입니다.
허접하지만 답변을 달아 보았습니다 수고하세요^ㅡ^
이것이 아니라면, 고수분들이 더욱 자세한 답변을 달아 주실꺼예용