在数据库表结构设计中,“避免慢”主要是指在数据量增长、并发增加时,仍能保持查询、写入、更新高效,防止出现慢查询、锁等待、全表扫描等问题。
下面从表结构设计层面(不是单纯加索引)系统讲怎么避免慢。
不要在主表里放:
✅ 正确做法:
user(id, name, age)
user_profile(user_id, bio, avatar)
| 场景 | 推荐 |
|---|---|
| 状态 | TINYINT |
| 数量 | INT / BIGINT |
| 金额 | DECIMAL(10,2) |
| 时间 | DATETIME / TIMESTAMP |
❌ 错误示例:
status VARCHAR(20) -- 慢、占空间
✅ 正确:
status TINYINT
WHERE phone = 13800000000
-- phone 是 VARCHAR
✅ 解决:
✅ 建议:
❌ 不适合索引:
WHERE DATE(create_time) = '2024-01-01'
✅ 改成:
WHERE create_time >= '2024-01-01'
AND create_time < '2024-01-02'
❌:
INDEX(sex, user_id)
✅:
INDEX(user_id, sex)
counter_0 ~ counter_15
✅ 示例:
order_202401
order_202402
✅:
BIGINT AUTO_INCREMENT
或
雪花 ID
❌:
UUID(随机写,页分裂)
✅ 建议:
status TINYINT NOT NULL DEFAULT 0
问自己:
这个表 80% 的查询是什么?
然后:
表结构设计避免慢 = 小、窄、定、序、分
如果你愿意,可以:
我可以直接帮你改表设计。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。