<학생>
학번(Key) 이름 학년 학과 연락처
<수강 내역>
학번 과목 성적
이런 형태의 테이블이 있을때 '성적이 90점 이상인 학생의 성적과 이름을 선택하라' 라는 문제가 있었습니다.
저같은 경우 학생 테이블의 학번과 이름을 먼저 Select 한 후 수강 내역 테이블과 Join하고 여기서 한번더 이름과 성적을 Select 하였습니다. 학생테이블에서 키 값인 학번과 이름만 선택하여 Join시 학과 연락처 같은 불필요한 속성이 Join 되어 성능 저하를 야기시킨다고 판단하여 두번의 Select를 실시했는데, 실무에서는 이런식으로 쓰지 않고 학생과 수강내역을 바로 Join해서 한번의 select로 데이터를 가져온다고 하더군요.
이러한 경우 Select를 한 후 join하는것이나 한번에 join하는것이나 성능 차이가 많이 나지 않는것인지, 아니면 성능차이는 나지만 쿼리문의 복잡성을 줄이는게 더 중요하다고 판단되어 바로 Join을 하는건지 알고싶습니다.
도움 부탁드리겠습니다. 감사합니다
1. 필요없는 항목까지 조인하므로 성능이 떨어진다?
성능에 가장 큰 영향을 주는 것은 I/O 입니다.
2개 항목만 조회한다고 해서 두개 항목만 I/O 가 발생하는 것은 아닙니다.
어차피 데이터는 컬럼 단위나 행단위가 아닌 블럭 단위로 I/O 가 발생합니다.
2. 생각하신 내용은 2개 컬럼만 메모리에 적재후 다시 조인하는 것인데요.
보통은 단계를 여러번 거칠수록 성능이 떨어지죠.
그래서 인라인뷰 안의 쿼리가 단순 조회쿼리인 경우 쿼리변형을 일으켜 인라인뷰를 해체해 버립니다.
따라서 인라인뷰를 쓰나 안쓰나 둘다 인라인뷰 안쓴 것처럼 동작합니다.
작성된 쿼리와 실행 쿼리가 다른 것이죠. 굳이 인라인뷰 쓸 필요가 없습니다.
Join의 순서는
10000 row > 1000row > 10row 보다(10000번의 access)
10 row > 1000row > 10000row가 낫다.(10~100번의 access?)
'[DBA] Database' 카테고리의 다른 글
[SQL] 실행 우선 순서 (0) | 2020.11.19 |
---|---|
[ERD] 관계선(실선, 점선) 차이 (0) | 2020.09.11 |
uuid를 pk로 사용하면서, 성능을 최대한 유지하기 (0) | 2020.09.11 |
최근댓글