여러분이 적은 것과 SQL이 보는 것은 다릅니다

PostgreSQL에서 쿼리 성능 개선하기

Amy McCarty

Instructor

대수 연산의 우선순위

 

  • 표기 순서(적힌 대로)
  • 논리 순서(실행 순서)

 

PEMDAS BODMAS
괄호(Parenthesis) 괄호(Brackets)
지수(Exponents) 순서(Order)
곱셈/나눗셈 나눗셈/곱셈
덧셈/뺄셈 덧셈/뺄셈
PostgreSQL에서 쿼리 성능 개선하기

연산 순서 적용하기

 

표기:

$$ 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 $$

PostgreSQL에서 쿼리 성능 개선하기

SQL 논리적 실행 순서

순서 목적
1 FROM 조인이 있으면 테이블 경로 제공
2 WHERE 레코드 필터/제한
3 GROUP BY 레코드를 범주로 묶음
4 SUM(), COUNT() 집계
5 SELECT 반환할 열 지정
SELECT COUNT(*) FROM tableA WHERE col1 = 77
PostgreSQL에서 쿼리 성능 개선하기

GROUP BY와 집계

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
PostgreSQL에서 쿼리 성능 개선하기

GROUP BY와 집계의 처리 순서

SELECT elements, storm, COUNT(*)
FROM weather_events
GROUP BY elements
순서 SQL 절 사용 가능한 열
1 FROM weather_events 전체
3 GROUP BY elements elements
4 COUNT elements
PostgreSQL에서 쿼리 성능 개선하기

GROUP BY는 집계와 일치해야 합니다

SELECT elements, storm, COUNT(*)
FROM weather_events
GROUP BY elements, storm
PostgreSQL에서 쿼리 성능 개선하기

GROUP BY는 집계와 일치해야 합니다

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
PostgreSQL에서 쿼리 성능 개선하기

SQL 논리적 실행 순서 (계속)

순서 목적
...
5 SELECT 반환할 열 지정
6 DISTINCT 중복 제거
7 ORDER BY 결과 정렬
8 LIMIT 행 제한
PostgreSQL에서 쿼리 성능 개선하기

DISTINCT와 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
PostgreSQL에서 쿼리 성능 개선하기
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
PostgreSQL에서 쿼리 성능 개선하기
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 전체
PostgreSQL에서 쿼리 성능 개선하기
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 전체
PostgreSQL에서 쿼리 성능 개선하기
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
PostgreSQL에서 쿼리 성능 개선하기
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
PostgreSQL에서 쿼리 성능 개선하기
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
PostgreSQL에서 쿼리 성능 개선하기
순서 목적 제한
1 FROM 테이블 지정
2 WHERE 레코드 필터링/제한 행 수
3 GROUP BY 레코드를 범주로 묶음 열 수
4 SUM, COUNT, 등 집계 행 수
5 SELECT 반환할 열 지정 열 수
6 DISTINCT 중복 제거 행 수
7 ORDER BY 결과 정렬
8 LIMIT 레코드 제한 행 수
PostgreSQL에서 쿼리 성능 개선하기

연습해 봅시다!

PostgreSQL에서 쿼리 성능 개선하기

Preparing Video For Download...