列指向ストレージの活用

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

保存形式

2つの表。1つ目はidとspeciesの一覧。01 - panda。02 - zebra。03 - zebra。04 - koala。2つ目はidとageの一覧。01 - 2。02 - 3。03 - 10。04 - 5。

PostgreSQLでクエリ性能を改善する

分析に好適 — 良い適合

列指向ストレージの特性

  • 同一列は同じ場所に格納
  • 全行の取得が高速
  • 列計算が速い

分析に最適

  • 件数、平均、各種計算
  • レポート
  • 列集計

保存形式

3つの表。1つ目はidとnameの一覧。01 - Bob。02 - Sunny。03 - Beco。04 - Coco。2つ目はidとspeciesの一覧。01 - panda。02 - zebra。03 - zebra。04 - koala。3つ目はidとageの一覧。01 - 2。02 - 3。03 - 10。04 - 5。

PostgreSQLでクエリ性能を改善する

トランザクション中心 — 不適合

行の関係は保持

  • 全列の取得は遅い
  • データの読み込みが遅い

トランザクション中心

  • 追加・削除が高速

保存形式

3つの表。1つ目はidとnameの一覧。01 - Bob。02 - Sunny。03 - Beco。04 - Coco。2つ目はidとspeciesの一覧。01 - panda。02 - zebra。03 - zebra。04 - koala。3つ目は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...