🔹 表结构优化
选择合适的数据类型(如用 INT 而不是 BIGINT)
尽量避免 NULL 字段(会降低某些引擎性能)
垂直/水平分表,减少单表数据量
很好,这个问题很关键,尤其在你的系统数据量变大时 —— 垂直分表/水平分表 是数据库优化中常用的表结构设计策略,目的是:
📌 减少单表的数据量,提升查询、写入、维护的性能和效率。
🔹 为什么要分表?
当一个表的数据太多时(比如千万行、上亿行):
查询会变慢(尤其是涉及全表扫描或多字段排序时)
索引会膨胀,维护成本变高
写入/更新容易造成锁表、阻塞
备份/恢复会很慢
所以我们会用 “分表” 的方式,让表变“小”,数据库跑得更快。
✅ 一、垂直分表(Vertical Partitioning)
按字段(列)进行拆分,每个表包含原表的一部分字段。
适用场景:
表字段很多,且某些字段不常用(比如大文本、图片路径等)
查询时只用少量字段
📌 举个例子:
原始表 user:
| id | name | email | bio(个人介绍) | avatar_url |
假如 bio 和 avatar_url 很少被用,读取频率很低。
我们可以这样拆表:
表1:user_base(经常访问的字段)
id, name, email
表2:user_profile(不常访问的大字段)
id, bio, avatar_url
这样常用查询只扫小表,快很多。
✅ 二、水平分表(Horizontal Partitioning)
按行进行拆分,表结构相同,但每个表只放部分数据。
适用场景:
数据行数太多(比如订单表、日志表)
查询或写入越来越慢
某个字段可以作为“分片键”来切分
📌 举个例子:
表 orders 有几千万条订单记录,你可以这样按用户ID水平分表:
orders_0 --> 存用户ID % 4 = 0 的订单
orders_1 --> 存用户ID % 4 = 1 的订单
orders_2 --> ...
orders_3
或者按时间分:
orders_2023
orders_2024
orders_2025
这样:
每个表更小,查询更快
可以并行写入多个表
更容易分布到多台数据库服务器(实现分库)
✅ 对比总结:
对比点 垂直分表 水平分表
拆分方式 按字段 按数据行
表结构 不同 相同
目的 减字段数量、避免大字段拖慢查询 减少每表的数据行数
应用场景 大字段、多字段的宽表 超大数据量、高频插入表
难点 要处理跨表 join 要设计好分片规则,处理查询路由
✅ 什么时候考虑分表?
单表超过 100万行:开始评估优化
单表超过 1000万行:建议分表
查询、写入、索引操作开始明显变慢时
🚀 提升数据库性能除了分表,还有这些方式:
建立合适的索引
读写分离(主从数据库)
缓存(Redis)
分库(不仅是分表,而是分多个数据库)
垂直水平分表,减少单表数量

被折叠的 条评论
为什么被折叠?



