数据库优化——表结构优化

🔹 表结构优化

选择合适的数据类型(如用 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)

分库(不仅是分表,而是分多个数据库)

垂直水平分表,减少单表数量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值