建表三大原则:

  • 定长和变长分离
  • 常用字段和不常用字段分离
  • 使用冗余字段或冗余表

1、定长与变长分离

如 id int,占4个字节,char(4)占4个字符长度,也是定长,time

即每一个单元值占的字节是固定的。在磁盘上查找时,由于每一行长度固定,比如长度为10000,查下一条时只需查+10001位置的数据。

而varchar,text,blog等变长字段,适合单放一张表,用主键和核心表关联起来。

2、常用字段和不常用字段分离

需要结合具体业务分析,分析字段的查询场景,查询场景频度低的字段,单拆出来。

3、在1对多,需要关联统计的字段上,添加冗余字段

这一条与一般的设计理念冲突。但是在某些业务场景下,很好使用。

比如,有两张表,表1用户表,表2用户-订单表,在查询表1用户时,同时需要知道用户下订单数量的总数,为了获取这个总数需要在表2上count一下。这种情况可以在表1增加一个用户订单总数的冗余字段,每往表2插入一个用户订单时,表1的用户订单总数冗余字段加1。这样查询用户下订单总数时,可以直接用该冗余字段,不需要额外查表2.

添加冗余字段,是一种“牺牲空间来换取时间”的方法。

在计算机的优化中,说来说去其实就两个优化:1、牺牲时间换空间;2、牺牲空间换时间。

多年前,内存宝贵时,空间小,程序员不得不一个字节一个字节扣,尽量少使用内存;如今硬件是白菜价,更倾向于用空间来换时间,东西都往内存里扔,换来时间响应的提升。

最新文章

  1. bzoj1103树状数组水题
  2. sessionid如何产生?由谁产生?保存在哪里?
  3. POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)
  4. LINQ教程
  5. java环境基础步骤 jdk tomcat eclipse
  6. 毕向东Java基础:day09_3-4
  7. CSS 命名规范及标题供参考与学习
  8. java中ExecutorService接口
  9. hdu 4712 Hamming Distance bfs
  10. Redhat6.4下配置本地yum
  11. Atom 编辑器系列视频课程
  12. centos服务器如何监控访问ip,并将非法ip通过防火墙禁用
  13. mybatis加载属性
  14. C++11 AUTO 类型实践
  15. python3.6利用pyinstaller模块打包程序为.exe可执行程序
  16. DRF之接口文档以及Xadmin
  17. 玩转X-CTR100 l USB功能-HOST鼠标键盘
  18. JS获取对象“属性”的方法
  19. 关于RAM与ROM的区别与理解
  20. AppDomain.CurrentDomain.AssemblyResolve

热门文章

  1. sqlserver2012分页注意事项
  2. webstorm 去点右边白线
  3. Eclipes更改字体颜色
  4. SpringBoot集成Thymeleaf模板
  5. 推荐几个顶级的IT技术公众号,坐稳了!
  6. 8种常见SQL错误用法,你中招了吗?
  7. leetcode.矩阵.240搜索二维矩阵II-Java
  8. ubuntu中搭建基本的开发环境
  9. 知识点整理01- 引用对象被子方法赋值后不改变;CheckBox 取消选择不可用问题
  10. Tomcat启动后中文乱码,怎么解决这个问题