建表三大原则:

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

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、牺牲空间换时间。

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

mysql优化1:建表原则的更多相关文章

  1. 点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...

  2. mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化

    可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非 ...

  3. 关于Hibernate 连接mysql不能自动建表的问题

    最近看旧书,李刚那本<轻量级J2EE>在讲解hibernate的时候遇到一个问题,就是与mysql连接后,明明配置了自动建表,却老是建不了表,上网查了发现是方言的原因,到底什么是方言?这里 ...

  4. MySQL基础2-创建表和主键约束

    1.创建表 在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行 主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习外 ...

  5. 【mysql优化1】表的优化与列类型选择

    数据类型及字节数参考http://www.cnblogs.com/qlqwjy/p/8590639.html -------------------------表的优化:--------------- ...

  6. django连接mysql数据库以及建表操作

    django连接mysql数据库需要在project同名的目录下面的__init__.py里面加入下面的东西 import pymysql pymysql.install_as_MySQLdb() 找 ...

  7. mysql workbench 导出建表语句

    导出建表语句和数据 server—–>data export—–>选中表  注意,export to dump project folder,这种方式是每个表对应一个sql文件.  导出建 ...

  8. mysql优化篇之表分区

             当表的数据量达到一定数量时(如单个.myd文件都达到10G,myd 是mysql的数据文件),这时候读取起来必然效率很低.          1.从业务角度可以解决(分表)      ...

  9. mysql添加索引(建表之后)

    一.使用ALTER TABLE语句创建索引 语法如下: alter table table_name add index index_name (column_list) ; alter table ...

随机推荐

  1. VMware Workstation Pro 15.5.0 官方版本及激活密钥

    0x01:下载连接: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-15.5.1-15018445.e ...

  2. 基于nodejs的一个实时markdown转html工具小程序

    1.版本一 - 1.1`npm install marked --save` 安装markdwon转html的包.- 1.2 使用watchFile监视 markdown文件 /** * Create ...

  3. UVA 822 Queue and A

    题目链接:https://vjudge.net/problem/UVA-822 翻译摘自:<算法禁赛入门经典> 题目大意 你的任务是模拟一个客户中心运作情况.客服请求一共有n(1 ≤ n ...

  4. spark优化——依赖包传入HDFS_spark.yarn.jar和spark.yarn.archive的使用

    一.参数说明 启动Spark任务时,在没有配置spark.yarn.archive或者spark.yarn.jars时, 会看到不停地上传jar,非常耗时:使用spark.yarn.archive可以 ...

  5. CTU OPEN 2017 Ice cream samples /// 尺取法

    题目大意: 给定n k 接下来n行 给定n个摊位的冰淇淋信息 首先给一个t 表示这个摊位有t个冰淇淋 接下来t个数表示对应冰淇淋的品种 走到连续的几个摊位 会买下走过的摊位的所有的冰淇淋 求 要买下所 ...

  6. elementUI 限制上传个数limit

    :limit='1' // 个数限制.

  7. netease-cloud-music : 依赖: libqt5x11extras5 (>= 5.1.0) 但是它将不会被安装

    修复一下依赖关系: sudo apt-get install -f #或者:sudo apt-get -f install 上面两条是修复依赖关系(depends)的命令,就是假如你的系统上有某个pa ...

  8. CSS中的块级元素和行内元素

    根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...

  9. phpstorm提示phalcon语法

    先安装phalcon,将phalcon的扩展php_phalcon.dll添加到PHP的ext目录下,这个不做赘述,网上教程很多 下面直接安装phalcon-devtools, 1,分别下载phalc ...

  10. ASP.NET MVC 学习笔记之TempData、HttpContext和HttpContextBase杂谈

    TempData本质上是Session 但是有一点不同的是,TempData被赋值之后,一旦被Action访问一次之后,马上就会清空. System.Web.HttpContext 和System.W ...