행 지향 저장과 파티션

PostgreSQL에서 쿼리 성능 개선하기

Amy McCarty

Instructor

데이터베이스 저장 유형

행 지향 저장

  • 컬럼 간 관계 유지

열 지향 저장

  • 행 간 관계 유지
id name species age habitat received
01 Bob panda 2 Asia 2018
02 Sunny zebra 3 Africa 2018
03 Beco zebra 10 Africa 2017
04 Coco koala 5 Australia 2016
PostgreSQL에서 쿼리 성능 개선하기

행 지향

행 지향 저장

  • 컬럼 간 관계 유지

 

id name species age habitat received
01 Bob panda 2 Asia 2018
PostgreSQL에서 쿼리 성능 개선하기

열 지향

열 지향 저장

  • 행 간 관계 유지  

두 테이블. 첫 번째는 id와 name 목록: 01 - Bob, 02 - Sunny, 03 - Beco, 04 - Coco. 두 번째는 같은 id에 species 목록: 01 - panda, 02 - zebra, 03 - zebra, 04 - koala.

PostgreSQL에서 쿼리 성능 개선하기

행 지향 저장

 

  • 한 행이 같은 위치에 저장
  • 전체 레코드 추가/삭제가 빠름
  • 모든 컬럼 반환이 빠름
    • 모든 행 반환은 느림
PostgreSQL에서 쿼리 성능 개선하기

행 줄이기

행 수 줄이기

  • WHERE 필터
  • INNER JOIN
  • DISTINCT
  • LIMIT
PostgreSQL에서 쿼리 성능 개선하기

행 지향 DB의 방법

파티션

  • 하나의 (부모) 테이블을 여러 작은 (자식) 테이블로 분할하는 방법

인덱스

  • 검색 향상을 위한 정렬된 컬럼 키 생성 방법

 

파티션과 인덱스 사용

  • 설정과 유지보수 필요
  • 데이터베이스 관리자 또는 문서로 존재 여부 파악
PostgreSQL에서 쿼리 성능 개선하기

파티션 구조

동물원 동물 부모 테이블에 id, name, species, habitat, received 연도 4개 레코드가 있음. 01 - Bob - Panda - Asia - 2018. 02 - Sunny - Zebra - Africa - 2018. 03 - Beco - Zebra - Africa - 2017. 04 - Coco - Macaw - South America - 2016. habitat 컬럼에 따라 3개의 자식 테이블이 있음. Asia 테이블은 Bob 1건, Africa 테이블은 Sunny와 Beco 2건, South America 테이블은 Coco 1건.

  • 부모 테이블
    • DB 프런트엔드에서 보임
    • 여기서 쿼리 작성
  • 자식 테이블
    • DB 프런트엔드에서 보이지 않음
    • 쿼리는 여기서 검색
PostgreSQL에서 쿼리 성능 개선하기

파티션 구조

동물원 동물 부모 테이블에 id, name, species, habitat, received 연도 4개 레코드가 있음. 01 - Bob - Panda - Asia - 2018. 02 - Sunny - Zebra - Africa - 2018. 03 - Beco - Zebra - Africa - 2017. 04 - Coco - Macaw - South America - 2016. habitat 컬럼에 따라 3개의 자식 테이블이 있음. Asia 테이블은 Bob 1건, Africa 테이블은 Sunny와 Beco 2건, South America 테이블은 Coco 1건. Africa 테이블이 빨간색으로 강조됨.

SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'
PostgreSQL에서 쿼리 성능 개선하기

파티션 개요

무엇

  • 하나의 테이블을 여러 작은 테이블로 분할

이유

  • 저장 유연성
  • 더 빠른 쿼리

대상

  • 자주 필터하는 컬럼
    • 날짜, 위치
PostgreSQL에서 쿼리 성능 개선하기

파티션 쿼리 평가

쿼리 플래너

큰 냄비 주변의 여러 요리사

EXPLAIN
SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'

쿼리 플랜

Seq Scan on zoo_animals  (cost=0.00..
17.70 rows=2 width=182)
  Filter: (state_code = 15)
  • 비용(시간) 추정치
PostgreSQL에서 쿼리 성능 개선하기

연습해 봅시다!

PostgreSQL에서 쿼리 성능 개선하기

Preparing Video For Download...