티스토리 뷰
8강 UNION을 사용한 쓸데없이 긴 표현
1, 정확한 판단 없는 UNION 사용 회피
SELECT item_name, year, price_tax_ex AS price
FROM Items
WHERE year <= 2001
UNION ALL
SELECT item_name, year, price_tax_in AS price
FROM Items
WHERE year >= 2002;
UNION 을 사용했을 때
-쓸데 없이 긴 SQL문, Items 테이블에 2회 접근 + 그때마다 TABLE ACCESS FULL 발생
-> 쓸데없는 테이블 접근을 발생시키며 SQL의 성능을 나쁘게 만듦
2. WHERE 구에서 조건 분기
"조건 분기를 WHERE 구로 하는 사람들은 초보자다. 잘 하는 사람은 SELECT 구만으로 조건 분기를 한다."
3. SELECT 구문에서 CASE 식을 사용한 조건분기
SELECT item_name, year,
CASE WHEN year <= 2001 THEN price_tax_ex
CASE WHEN year >= 2002 THEN price_tax_in END AS price
FROM Items;
-> Items 테이블에 대한 접근이 1회로 줄어듦
'구문'에서 '식'으로 사고를 변경하기
9강 집계와 조건 분기
1。 집계 대상으로 조건 분기
- UNOIN을 사용한 방법
SELECT prefecture, SUM(pop_men) AS pop_men, SUM(pop_men) AS pop_wom
FROM (SELECT prefecture, pop AS pop_men. null AS pop_wom
FROM Population
WHERE sex = '1'
UNOIN
SELECT prefecture, NULL AS pop_men, pop AS pop_wom
FROM Population
WHERE sex = '2') TMP
GROUP BY prefecture;
WHERE 구에서 sex 로 분기, 결과를 UNOIN으로 머지
Population 테이블에 풀 스캔이 2회 수행됨
- CASE 식을 사용한 방법
SELECT prefecture,
SUM(CASE WHEN SEX = '1' THEN pop ELSE 0 END) AS pop_men,
SUM(CASE WHEN SEX = '2' THEN pop ELSE 0 END) AS pop_wom
FROM Population
GROUP BY prefecture;
외관이 간단해질 뿐만 아니라 성능도 향상
Population 테이블로의 풀 스캔이 1회로 감소
10강 그래도 UNOIN이 필요한 경우
1. UNION 을 사용할 수밖에 없는 경우
- 머지 대상이 되는 SELECT 구문들에서 사용되는 테이블이 다른 경우
SELECT col_1
FROM Table_A
WHERE col_2 = 'A'
UNOIN ALL
SELECT col_3
FROM Table_B
WHERE col_4 = 'B';
2. UNOIN을 사용하는 것이 성능적으로 더 좋은 경우
-UNION을 사용했을 때 좋은 인덱스를 사용하지만, 이외의 경우에는 테이블 풀 스캔이 발생하는 경우
인덱스 설정
CREATE INDEX IDX_1 ON ThreeElements (date_1, flg_1);
CREATE INDEX IDX_2 ON ThreeElements (date_2, flg_2);
CREATE INDEX IDX_3 ON ThreeElements (date_3, flg_3);
11강 절차 지향형과 선언형
예외적인 몇 가지 상황을 제외하면 UNOIN을 사용하지 않는 것이 성능적으로도 좋고 가독성도 좋다는 것
1. 구문 기반과 식 기반
대부분 처음 배우는 프로그래밍 언어가 절차 지향형 프로그래밍 언어이기 때문에 절차 지향에 익숙하지만, SQL의 기본 적인 체계는 '선언형' --> '구문' 이 아니라 '식'
절차 지향형 언어가 CASE 구문으로 분기하는 것을, SQL은 CASE식으로 분기
SQL 구문의 각 부분(SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY)에 작성하는 것은 모두 식
2. 선언형의 세계로 도약
절차 지향형 세계에서 선언형 세계로 도약하는 것이 곧 SQL 능력 향상의 핵심
'SQL' 카테고리의 다른 글
SQL 5장 - 반복문 (1) | 2023.10.08 |
---|---|
SQL 레벨업 4장 - 집약과 자르기 (1) | 2023.09.30 |
SQL 레벨업 - 2장 SQL 기초 (1) | 2023.09.16 |
SQL 레벨업 - 1장 DBMS 아키텍쳐 (2) | 2023.09.07 |
SQL - SQL 최적화 기본 원리 (0) | 2023.09.02 |
- Total
- Today
- Yesterday
- 로깅
- 준영속
- 스프링 커뮤니티
- elasticsearch
- 로그아웃
- 백준
- 인텔리제이
- 프론트엔드
- JPA
- 다이나믹 프로그래밍
- DP
- EnumType.ORDINAL
- SQL 레벨업
- 웹MVC
- 지연로딩
- 커뮤니티
- 스프링 북마크
- 비영속
- 파이썬
- 회원탈퇴
- SQL
- 영속
- 자바 스프링
- 자바
- 백준 파이썬
- 스프링
- 웹 MVC
- 북마크
- 스프링부트
- SQLD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |