열 지향 저장 사용

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

저장 형태

두 개의 표. 첫 번째 표는 id와 species 목록입니다. 01 - panda. 02 - zebra. 03 - zebra. 04 - koala. 두 번째 표는 id와 age 목록입니다. 01 - 2. 02 - 3. 03 - 10. 04 - 5.

PostgreSQL에서 쿼리 성능 개선하기

분석 중심 - 잘 맞음

열 지향 저장 특성

  • 동일 열은 연속 저장
  • 모든 행 반환 빠름
  • 열 계산 빠름

분석에 적합

  • 개수, 평균, 계산
  • 리포팅
  • 열 집계

저장 형태

세 개의 표. 첫 번째 표는 id와 name 목록입니다. 01 - Bob. 02 - Sunny. 03- Beco. 04 - Coco. 두 번째 표는 id와 species 목록입니다. 01 - panda. 02 - zebra. 03 - zebra. 04 - koala. 세 번째 표는 id와 age 목록입니다. 01 - 2. 02 - 3. 03 - 10. 04 - 5.

PostgreSQL에서 쿼리 성능 개선하기

트랜잭션 중심 - 부적합

행 관계 유지

  • 모든 열 반환은 느림
  • 적재 속도 느림

트랜잭션 중심

  • 레코드 삽입/삭제 빠름

저장 형태

세 개의 표. 첫 번째 표는 id와 name 목록입니다. 01 - Bob. 02 - Sunny. 03- Beco. 04 - Coco. 두 번째 표는 id와 species 목록입니다. 01 - panda. 02 - zebra. 03 - zebra. 04 - koala. 세 번째 표는 id와 age 목록입니다. 01 - 2. 02 - 3. 03 - 10. 04 - 5.

PostgreSQL에서 쿼리 성능 개선하기

데이터베이스 예시

 

Postgres Citus Data, Greenplum, Amazon Redshift
MySQL MariaDB
Oracle Oracle In-Memory Cloud Store
Clickhouse, Apache Druid, CrateDB
PostgreSQL에서 쿼리 성능 개선하기

Information schema

열 수 줄이기

  • SELECT *는 최소화
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_catalog = 'schema_name'
AND table_name = 'zoo_animals'
column_name data_type
id integer
name text
species text
PostgreSQL에서 쿼리 성능 개선하기

Information schema

열 수 줄이기

  • SELECT *는 최소화
  • Information schema 사용
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_catalog = 'schema_name'
AND table_name = 'zoo_animals'
column_name data_type
id integer
name text
species text
PostgreSQL에서 쿼리 성능 개선하기

쿼리 작성 방법

 

  • 각 열을 별도 쿼리로 확인
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
-- 열 지향에 적합한 구조
SELECT MIN(age), MAX(age)
FROM zoo_animals
WHERE species = 'zebra'
-- 행 지향에 적합한 구조
SELECT *
FROM zoo_animals
WHERE species = 'zebra'
ORDER BY age
PostgreSQL에서 쿼리 성능 개선하기

연습해 봅시다!

PostgreSQL에서 쿼리 성능 개선하기

Preparing Video For Download...