단계적 조인을 위한 활용
전체적인 일량을 줄이기 위해 사용하는 방법
- group by 후 조인
내가 추출할 그룹의 레벨인 테이블로 group by 한 후 조인하면 많은 불필요한 조인을 줄일 수 있습니다.
select y.상인이름
sum(x.판매수량),
sum(x.판매금액)
from 상품목록 x, 상인 y
where x.상인코드 = y.상인코드
and x.아이템코드 = @아이템코드
group by y.상인이름
상품 목록을 '상인' 레벨로 추출 후 조인하였습니다.
select y.상인이름, 수량, 금액
from (select 상인코드,
sum(판매수량) 수량,
sum(판매금액) 금액,
from 상품목록
where 아이템코드 = @아이템코드
group by 상인코드) x, 상인 y
where x.상인코드 = y.상인코드
이렇게 하면 1:m이 아니라 1:1 조인이 되어 join의 수가 줄어 듭니다.
- 유저 조회 예
다음과 같이 항목 두개를 입력 받아 검색하는 프로그램을 작성하세요.
idx1 : 계정id, idx2 : 유저이름
select ...
from 유저
where 계정id like @v1 +'%'
and 유저이름 like @v2 +'%'
위와 같이 쿼리를 작성하면 안됩니다. 실행 계획은 idx1 또는 idx2 인덱스를 사용할 것입니다. 실행 계획이 idx2를 사용하지만 검색어 입력이 계정id만 있고 유저 이름이 비어 있다면 index full scan해서 계정id를 찾고 보니 1건이 딱 나옵니다. 아니면 두 인덱스를 모두 읽어서 index로 풀릴 수도 있고 이것도 아니면 full table scan으로 실행 될 수도 있습니다.
입력 조건에 따라 실행 계획도 달라지게 쿼리를 작성해야 겠습니다.
다음과 같이 인라인 뷰를 사용하여 실행이 달라 지도록 할 수 있습니다.
select ...
from
(select ...
from 유저
where @v1 is not null
and 계정id like @v1 + '%'
union all
select ...
from 유저
where @v1 is null
and 유저이름 like @v2 + '%')
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - 게임 서버 프로그래머가 알아야 할 RDBMS
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - 옵티마이저 맛보기
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - 테이블 조인 하면 느리다?
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - 리커시브 모델의 활용
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - 아크 모델(exclusive or)에서의 주의점
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - 부분범위 처리와 전체 범위처리
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - 인덱스의 제대 사용하자
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - DB 옵티마이저
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - Nested Loop/Sort Merge/Hash Join
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - DB 테이블 클러스터링 팩터
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - DB 절차적 사고 VS 집합적 사고
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - SQL 집합의 가공
[데이터베이스/게임 서버 프로그래머가 알아야 할 RDBMS] - SQL IN의 특징과 IN의 활용
'서버 개발 > 프로그래머를 위한 RDBMS' 카테고리의 다른 글
게임 개발자가 알아야 할 RDBMS(데이터베이스, MSSQL) (0) | 2022.04.10 |
---|---|
서브 쿼리 활용 (0) | 2020.05.27 |
SQL IN의 특징과 IN의 활용 (0) | 2020.05.27 |
SQL 집합의 가공 (0) | 2020.05.27 |
DB 절차적 사고 VS 집합적 사고 (2) | 2020.05.27 |