列式與橫式儲存與分割區

改進 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 的查詢效能

列導向資料庫的方法

分割區(Partitions)

  • 將一個(父)資料表拆成多個較小(子)資料表的方法

索引(Indexes)

  • 建立排序欄位鍵以加速查詢的方法

 

使用分割區與索引

  • 需要設定與維護
  • 是否存在可由資料庫管理員或文件得知
改進 PostgreSQL 的查詢效能

分割區結構

一個動物園動物的父資料表,含四筆記錄:id、name、species、habitat、received 年份。01 - Bob - Panda - age - habitat - received。02 - Sunny - Zebra - 3 - Africa - 2018。03 - Beco - Zebra - 10 - Africa - 2017。04 - Coco - Macaw - 5 - South America - 2016。依 habitat 欄分成 3 個子表:Asia 表有 Bob 1 筆;Africa 表有 Sunny 與 Beco 2 筆;South America 表有 Coco 1 筆。

  • 父資料表
    • 可在資料庫前端看見
    • 在此撰寫查詢
  • 子資料表
    • 不會在資料庫前端顯示
    • 查詢會搜尋這些表
改進 PostgreSQL 的查詢效能

分割區結構

一個動物園動物的父資料表,含四筆記錄:id、name、species、habitat、received 年份。01 - Bob - Panda - age - habitat - received。02 - Sunny - Zebra - 3 - Africa - 2018。03 - Beco - Zebra - 10 - Africa - 2017。04 - Coco - Macaw - 5 - 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...