select *
from 사원 a, 계약 b
where a.사원ID = b.계약사원ID
and b.계약일자 = '20250403'
인덱스
계약_X01(계약사원ID, 계약일자)
계약_X02(계약일자, 계약사원ID)
결론부터 말하면 조인과정에서의 동작은 동일해 성능차이 없습니다
조인할 때 둘다 = 동등조건 검색이기 때문에
인덱스 스캔범위 동일합니다
select *
from 사원 a, 계약 b
where a.사원ID = b.계약사원ID
and b.계약일자 = '20250403'
인덱스
계약_X01(계약사원ID, 계약일자)
계약_X02(계약일자, 계약사원ID)
결론부터 말하면 조인과정에서의 동작은 동일해 성능차이 없습니다
조인할 때 둘다 = 동등조건 검색이기 때문에
인덱스 스캔범위 동일합니다
해당 댓글은 삭제되었습니다.
그냥 동일해요 조인이라고 다를게 없어요
일단 a쪽에서는 필터링 조건 없으니 풀스캔할거 같고 각 row마다 join짝 찾을거 같네 X01인 경우에는 b.계약사원ID로 먼저 인덱스 타고 계약일자는 체크 조건으로 인덱스 스캔함 X02인 경우에는 드리븐 테이블 먼저 인덱스로 필터링하고 b.계약사원ID 인덱스타서 조인짝 찾아갈거같음 맞냐? - dc App - dc App
X02에서 where로 필터링 먼저 함? 아니면 계약일자 계약사원ID 인덱스로 같이 체크함? - dc App
원문에서는 사원 테이블이 선행집합이라고 명시해놨어서 이런 관점은 아니였긴함
계약 테이블을 드라이빙하면서 계약_X02쓰면은 계약일자 = '20250403' 만족하는 레코드 읽고 테이블 액세스하고 사원 테이블하고 조인함
간혹 사원 테이블에도 사원 입사일자 같은 조건이 붙어있으면 계약 테이블에서 테이블 액세스를 생략하고 (계약일자, 계약사원ID)에서 계약사원ID를 이용해서 조인 후에 사원 입사일자까지 만족하는 레코드에 한해서 테이블 액세스 하도록 할 수도 있을 듯
이건 옵티마이저가 안해주던거 같은데 직접 인라인뷰에서 커버링 인덱스 사용해서 (계약일자, 계약사원ID)만 읽고 사원 테이블과 조인 사원입사일자 조건만족하는 레코드만 rowid 이용해서 다시 계약테이블과 조인할듯
좆고수네 - dc App
조건하나 붙으니까 지랄같이 어렵네 씨발,, 나선환 쿼리가 ㅈ으로 나온게 아녔노
좆나 이해안되는데 쿼리좀 보여주센