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 |
댓글