表分区

数据库设计

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

缺点

  • 现有表再分区较麻烦
  • 部分约束无法设置
数据库设计

与分片的关系

分片

数据库设计

开始练习!

数据库设计

Preparing Video For Download...