본문 바로가기
프로젝트(종료)/SQLD 자격증 따기

UNION ALL 과 UNION DISTINCT

by 일말고프로젝트 2021. 3. 2.

1. 상황

- 유통 상품 데이터 중 서로 다른 기준의 분류체계 테이블 존재

- 두 카테고리 모두 상품 테이블이 각각 존재하며, 중복이 발생할 수 있음

 

테이블 A

소분류 소분류 코드 중분류 중분류 코드 대분류 대분류 코드
A 1233 요구르트 13 유제품 3
B 3133 과일음료 15 과채음료 2
C 2333 비타민음료 16 기능성음료 1

테이블 B

통합 소분류 통합 소분류 코드 채널 통합 중분류 통합 중분류 코드 통합 대분류 통합 대분류 코드
R 1232 마트 요구르트/발효유 1233 유제품 1233
D 2322 슈퍼 과채음료 15135 후레바 1523
Q 1555 편의점 비타민 163234 기능성 2452

2. 목적

특정 카테고리 내 상품 리스트 추출

3. 현재 코드

테이블 A의 카테고리 정보 중 카테고리 이름 컬럼, 카테고리 코드 컬럼을 가져오고, 테이블 B에서도 카테고리 이름 컬럼, 카테고리 코드 컬럼을 가져와 각각 상품 데이터 테이블에 붙여 결합 테이블을 생성한 뒤 UNION ALL 하고 다시 DINSTINCT 해서 유지중

 

3. 수정

UNION ALL -> DISTINCT 과정을 UNION DISTINCT로 일원화

 

*UNION의 처리과정

1. 최종 UNION 결과에 적합한 이미 테이블을 메모리 테이블로 생성
2. UNION 또는 UNION DISTINCT 의 경우, 임시 테이블의 모든 컬럼으로 Unique Hash 인덱스 생성
3. 서브쿼리1 실행 후 결과를 임시 테이블에 복사
4. 서브쿼리2 실행 후 결과를 임시 테이블에 복사
5. 3,4번 과정에서 임시 테이블이 특정 사이즈 이상으로 커지면 임시 테이블을 Disk Temporary 테이블로 변경
6. 임시 테이블을 읽어서 Client에 전송
7. 임시 테이블 삭제

이 과정이므로 데이터 테이블이 크면 클수록 DISTINCT의 경우 작업량이 훨씬 많아짐

**UNION과 UNION ALL 모두 SQL 작성상 그다지 좋은 쿼리가 아님

일단 UNION이 필요하다는 건 서로 다른 테이블이 사실은 하나의 통합된 테이블일 수도 있다는 뜻이므로. 애초에 테이블 통합을 고려해봐야함

***확인 결과

두 테이블은 성격 상 합쳐서 관리될 수 없는 테이블이었음. 

'프로젝트(종료) > SQLD 자격증 따기' 카테고리의 다른 글

PK와 FK  (0) 2021.03.04
DML, DDL, DCL, TCL에 대해  (0) 2021.03.03
ON DELETE CASCADE와 SET NULL  (0) 2021.03.03
0. 데이터 베이스 이해하기  (0) 2021.03.01
SQL 공부를 시작하기 전에  (0) 2021.03.01

댓글