1、定长与变长分离
如 id int, 占4个字节, char(4) 占4个字符长度,也是定长, time. 即每一单元值占的字节是固定的.
核心且常用字段,也宜建成定长,放在一张表.
而varchar, text, blob,比如个人简介和留言,这种变长字段,适合单放一张表, 用主键与核心表关联起来.
2、常用字段与不常用字段分离
需要结合网站具体业务分析,分析字段的查询场景,查询频度低的字段,单拆出来.
3、合理添加冗余字段
看如下BBS的效果
每个版块里,有N条帖子,在首页,显示了版块信息,和版块下的帖子数.
这是如何做的?
注意:postnum(今日发帖数)在此作为一个冗余字段,却有利于快速查询
boardid | boardname | postnum |
8 | 开班信息 | 2 |
9 | 每日视频及代码 | 1 |
postid | boardid | title |
123 | 8 | 论坛开张了 |
129 | 8 | 灌水 |
133 | 9 | 来一帖 |
1、如果board表只有前2列,则需要取出版块后,
再查post表,select count(*) from post group by board_id,得出每个版块下的帖子数.
2、如果有postnum字段,每发一个帖子时,对postnum字段+1操作;
再查询版块下的帖子数时, 只需要1条语句直接查boardid
select boradid, boardname,postnum from board;
这是典型的”空间换时间”!