FireBird 1.5.2 에서는 left outer join하는 테이블도 인덱스를 탄다고 합니다. 아직, RC지만요. :)
http://firebird.sourceforge.net/index.php?op=devel&sub=engine&id=rnotes0152_06&nosb=1
egnes 님이 쓰신 글 :
: left join을 두게 쓰는 쿼리를 만들었는데.. 실행시키니 무려 12분이나 걸리네요.^^;;
:
: 일단, 예제로 실행시킨 쿼리를 보면...
:
: - 요놈은 5초 ----------------------------------------------------------------------------
: Statement: select M.회원코드, sum(S1.가격)
: from 멤버T M left join 판매T S1 On (S1.회원코드 = M.회원코드)
: where
: S1.판매일자 between '20040601' and '20040630'
: group by M.회원코드
:
: PLAN SORT (JOIN (M NATURAL,S1 INDEX (SALE_IDX01)))
: -----------------------------------------------------------------------------
:
: - 요놈은 1초 ----------------------------------------------------------------------------
: Statement: select M.회원코드,
: (select sum(S1.가격) from 판매T S1 where M.회원코드=S1.회원코드 and 판매일자 between '20040601' and '20040630')
: from 멤버T M
: order by M.회원코드
:
: PLAN (M ORDER MEMBERS_IDX01)
: PLAN (S1 INDEX (SALE_IDX01,RDB$PRIMARY51))
: -----------------------------------------------------------------------------
:
: 이렇게 나오는데.. left join 하면 index를 원래 안타는 겁니까?
: 그리고.. 제가 생각하기에는 두번째 쿼리가, 필드에 서브쿼리를 썻기에 더 느릴거 같은데 아닌가요?