資料表分割

資料庫設計

Lis Sulmont

Curriculum Manager

為何要分割?

資料表會成長(數百 GB/TB)

問題:查詢與更新會變慢

原因:例如索引放不進記憶體

解法:把表拆成較小部分(= 分割

依日期歸檔的檔案影像

資料庫設計

資料建模複習

 

1. 概念資料模型

2. 邏輯資料模型

對分割而言,邏輯模型相同

3. 物理資料模型

分割屬於物理資料模型的一部分

資料庫設計

垂直分割

垂直分割

就算已完全正規化也可拆分資料表

資料庫設計

垂直分割:範例

垂直分割範例

例如把 long_description 存在較慢的媒體上

資料庫設計

水平分割

水平分割

資料庫設計

水平分割:範例

水平分割:範例資料表

資料庫設計

水平分割:範例

 

水平分割:範例

 

CREATE TABLE sales (
    ...
    timestamp DATE NOT NULL
)
PARTITION BY RANGE (timestamp);

CREATE TABLE sales_2019_q1 PARTITION OF sales FOR VALUES FROM ('2019-01-01') TO ('2019-03-31'); ... CREATE TABLE sales_2019_q4 PARTITION OF sales FOR VALUES FROM ('2019-10-01') TO ('2020-01-31');
CREATE INDEX ON sales ('timestamp');
資料庫設計

水平分割的優缺點

優點

  • 高使用頻率分割的索引可放入記憶體
  • 可放到指定媒體:慢速或高速
  • 可用於 OLAP 與 OLTP

缺點

  • 既有資料表做分割可能很麻煩
  • 有些約束無法設定
資料庫設計

與 sharding 的關係

分片

資料庫設計

一起來練習吧!

資料庫設計

Preparing Video For Download...