如何区分数据库中的水平分表与垂直分表?

2026-05-27 20:351阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计647个文字,预计阅读时间需要3分钟。

如何区分数据库中的水平分表与垂直分表?

1. 水平分表是为了解决单表数据过大引起效率问题,可通过HASH、范围、取模段,将大表细分为小表片段。

2.垂直分表是将宽表变为多个窄表,实现数据记录的前后分离。

如何区分数据库中的水平分表与垂直分表?

1.水平分表

是为了解决单表数据过大引起效率问题,可以通过HASH、范围、取模邓手段拆分,将大表化小的手段

2.垂直分表

是将宽表变成几个窄表的手段,几个拆分前后的数据记录数未改变。通过将少量的重要字段剥离到窄表,让每个页容纳更多的行,减少跨页检索,减少磁盘扫描范围,达到高效的目的。

2.1 何时进行垂直拆分

  • 单标数据总量可能过千万
  • 字段超过20个
  • 包含超长varchar、text、clob、blob等占用空间的类型字段

2.2 那些字段适合放在小表

  • 数据查询条件、排序用到字段:商品ID、商户ID、分类编号、品牌编号、逻辑删除字段
  • 高频访问的字段:商品名、子标题、厂家信息、价格

2.3 哪些字段适合放在大表

  • 低频访问字段:配送信息、售后申明、最后更新时间
  • 大字段:图文详情、图片Base64\Json元数据

3.InnoDB 管理数据的机制

Row ->page(16K)->extent->segment->table space

  • row: 行 就是一条记录
  • page: 页,磁盘存储、固定大小为16KB,根据行数据不同大小,存储若干连续的行
  • extent: 区,固定大小为1MB ,也就是一个区只能保存64个连续的页
  • segment:段
  • table space: 表空间

innodb1.0后提供了压缩页的技术,可以让每页物理上存储更多的逻辑数据。跨页检索数据时的解压缩效率不算高,所以做表设计时,要尽量的在一个页中存储更多的行数据,来减少跨页检索的次数,来提高数据检索效率。

垂直拆分前:每行占1KB,需要625万页来存储。 垂直拆分后:每行占64B,只需要39万页来存储。 查询时需要检索的数据页数相差16倍。

本文共计647个文字,预计阅读时间需要3分钟。

如何区分数据库中的水平分表与垂直分表?

1. 水平分表是为了解决单表数据过大引起效率问题,可通过HASH、范围、取模段,将大表细分为小表片段。

2.垂直分表是将宽表变为多个窄表,实现数据记录的前后分离。

如何区分数据库中的水平分表与垂直分表?

1.水平分表

是为了解决单表数据过大引起效率问题,可以通过HASH、范围、取模邓手段拆分,将大表化小的手段

2.垂直分表

是将宽表变成几个窄表的手段,几个拆分前后的数据记录数未改变。通过将少量的重要字段剥离到窄表,让每个页容纳更多的行,减少跨页检索,减少磁盘扫描范围,达到高效的目的。

2.1 何时进行垂直拆分

  • 单标数据总量可能过千万
  • 字段超过20个
  • 包含超长varchar、text、clob、blob等占用空间的类型字段

2.2 那些字段适合放在小表

  • 数据查询条件、排序用到字段:商品ID、商户ID、分类编号、品牌编号、逻辑删除字段
  • 高频访问的字段:商品名、子标题、厂家信息、价格

2.3 哪些字段适合放在大表

  • 低频访问字段:配送信息、售后申明、最后更新时间
  • 大字段:图文详情、图片Base64\Json元数据

3.InnoDB 管理数据的机制

Row ->page(16K)->extent->segment->table space

  • row: 行 就是一条记录
  • page: 页,磁盘存储、固定大小为16KB,根据行数据不同大小,存储若干连续的行
  • extent: 区,固定大小为1MB ,也就是一个区只能保存64个连续的页
  • segment:段
  • table space: 表空间

innodb1.0后提供了压缩页的技术,可以让每页物理上存储更多的逻辑数据。跨页检索数据时的解压缩效率不算高,所以做表设计时,要尽量的在一个页中存储更多的行数据,来减少跨页检索的次数,来提高数据检索效率。

垂直拆分前:每行占1KB,需要625万页来存储。 垂直拆分后:每行占64B,只需要39万页来存储。 查询时需要检索的数据页数相差16倍。