PostgreSQL에서 쿼리 성능 개선하기
Amy McCarty
Instructor
| PEMDAS | BODMAS |
|---|---|
| 괄호(Parenthesis) | 괄호(Brackets) |
| 지수(Exponents) | 순서(Order) |
| 곱셈/나눗셈 | 나눗셈/곱셈 |
| 덧셈/뺄셈 | 덧셈/뺄셈 |
$$ x = 2 + (8 + 4) \div 2 $$
$$ x = 10 + 4) \div 2 $$
$$ x = 14 \div 2 $$
$$ x = 7 $$
$$ x = 2 + (8 + 4) \div 2 $$
$$ x = 2 + \frac{12}{2} $$
$$ x = 2 + 6 $$
$$ x = 8 $$
| 순서 | 절 | 목적 |
|---|---|---|
| 1 | FROM | 조인이 있으면 테이블 경로 제공 |
| 2 | WHERE | 레코드 필터/제한 |
| 3 | GROUP BY | 레코드를 범주로 묶음 |
| 4 | SUM(), COUNT() 등 | 집계 |
| 5 | SELECT | 반환할 열 지정 |
SELECT COUNT(*) FROM tableA WHERE col1 = 77
| event_location | storm | elements | days |
|---|---|---|---|
| Russia | blizzard | water | 1 |
| Argentina | tornado | water | 1 |
| Argentina | tornado | wind | 1 |
| Australia | tornado | wind | 1 |
| Kuwait | haboob | wind | 2 |
| USA | haboob | wind | 2 |
SELECT elements, storm, COUNT(*)
FROM weather_events
GROUP BY elements
No output -
your code generated an error
column "storm" must appear in the
GROUP BY clause or be used in an
aggregate function
SELECT elements, storm, COUNT(*)
FROM weather_events
GROUP BY elements
| 순서 | SQL 절 | 사용 가능한 열 |
|---|---|---|
| 1 | FROM weather_events | 전체 |
| 3 | GROUP BY elements | elements |
| 4 | COUNT | elements |
SELECT elements, storm, COUNT(*)
FROM weather_events
GROUP BY elements, storm
SELECT elements, storm, COUNT(*)
FROM weather_events
GROUP BY elements, storm
결과
| elements | storm | count |
|---|---|---|
| water | blizzard | 1 |
| water | tornado | 1 |
| wind | tornado | 2 |
| wind | haboob | 2 |
| 순서 | 절 | 목적 |
|---|---|---|
| ... | ||
| 5 | SELECT | 반환할 열 지정 |
| 6 | DISTINCT | 중복 제거 |
| 7 | ORDER BY | 결과 정렬 |
| 8 | LIMIT | 행 제한 |
| row_no | location | storm | elements | days |
|---|---|---|---|---|
| 1 | Russia | blizzard | water | 1 |
| 2 | Argentina | tornado | water | 1 |
| 3 | Argentina | tornado | wind | 1 |
| 4 | Australia | tornado | wind | 1 |
| 5 | Kuwait | haboob | wind | 2 |
| 6 | USA | haboob | wind | 2 |
SELECT DISTINCT storm, elements
FROM weather_events
ORDER BY storm LIMIT 3
| row_no | location | storm | elements | days |
|---|---|---|---|---|
| 1 | Russia | blizzard | water | 1 |
| 2 | Argentina | tornado | water | 1 |
| 3 | Argentina | tornado | wind | 1 |
| 4 | Australia | tornado | wind | 1 |
| 5 | Kuwait | haboob | wind | 2 |
| 6 | USA | haboob | wind | 2 |
SELECT DISTINCT storm, elements
FROM weather_events
ORDER BY storm LIMIT 3
| row_no | location | storm | elements | days |
|---|---|---|---|---|
| 1 | Russia | blizzard | water | 1 |
| 2 | Argentina | tornado | water | 1 |
| 3 | Argentina | tornado | wind | 1 |
| 4 | Australia | tornado | wind | 1 |
| 5 | Kuwait | haboob | wind | 2 |
| 6 | USA | haboob | wind | 2 |
SELECT DISTINCT storm, elements
FROM weather_events
ORDER BY storm LIMIT 3
| 순서 | SQL 절 | 사용 가능한 행 |
|---|---|---|
| 1 | FROM weather_events | 전체 |
| row_no | storm | elements |
|---|---|---|
| 1 | blizzard | water |
| 2 | tornado | water |
| 3 | tornado | wind |
| 5 | haboob | wind |
SELECT DISTINCT storm, elements
FROM weather_events
ORDER BY storm LIMIT 3
| 순서 | SQL 절 | 사용 가능한 행 |
|---|---|---|
| 1 | FROM weather_events | 전체 |
| 5 | SELECT storm, elements | 전체 |
| row_no | storm | elements |
|---|---|---|
| 1 | blizzard | water |
| 2 | tornado | water |
| 3 | tornado | wind |
| 5 | haboob | wind |
SELECT DISTINCT storm, elements
FROM weather_events
ORDER BY storm LIMIT 3
| 순서 | SQL 절 | 사용 가능한 행 |
|---|---|---|
| 1 | FROM weather_events | 전체 |
| 5 | SELECT storm, elements | 전체 |
| 6 | DISTINCT | 1, 2, 3, 5 |
| row_no | storm | elements |
|---|---|---|
| 1 | blizzard | water |
| 5 | haboob | wind |
| 2 | tornado | water |
| 3 | tornado | wind |
SELECT DISTINCT storm, elements
FROM weather_events
ORDER BY storm LIMIT 3
| 순서 | SQL 절 | 사용 가능한 행 |
|---|---|---|
| 1 | FROM weather_events | 전체 |
| 5 | SELECT storm, elements | 전체 |
| 6 | DISTINCT | 1, 2, 3, 5 |
| 7 | ORDER BY storm | 1, 5, 2, 3 |
| row_no | storm | elements |
|---|---|---|
| 1 | blizzard | water |
| 5 | haboob | wind |
| 2 | tornado | water |
SELECT DISTINCT storm, elements
FROM weather_events
ORDER BY storm LIMIT 3
| 순서 | SQL 절 | 사용 가능한 행 |
|---|---|---|
| 1 | FROM weather_events | 전체 |
| 5 | SELECT storm, elements | 전체 |
| 6 | DISTINCT | 1, 2, 3, 5 |
| 7 | ORDER BY storm | 1, 5, 2, 3 |
| 8 | LIMIT 3 | 1, 5, 2 |
| 순서 | 절 | 목적 | 제한 |
|---|---|---|---|
| 1 | FROM | 테이블 지정 | |
| 2 | WHERE | 레코드 필터링/제한 | 행 수 |
| 3 | GROUP BY | 레코드를 범주로 묶음 | 열 수 |
| 4 | SUM, COUNT, 등 | 집계 | 행 수 |
| 5 | SELECT | 반환할 열 지정 | 열 수 |
| 6 | DISTINCT | 중복 제거 | 행 수 |
| 7 | ORDER BY | 결과 정렬 | |
| 8 | LIMIT | 레코드 제한 | 행 수 |
PostgreSQL에서 쿼리 성능 개선하기