mysql优化1:建表原则
建表三大原则:
- 定长和变长分离
- 常用字段和不常用字段分离
- 使用冗余字段或冗余表
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:建表原则的更多相关文章
- 点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)
下载原版阿里JAVA开发手册 [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...
- mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化
可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非 ...
- 关于Hibernate 连接mysql不能自动建表的问题
最近看旧书,李刚那本<轻量级J2EE>在讲解hibernate的时候遇到一个问题,就是与mysql连接后,明明配置了自动建表,却老是建不了表,上网查了发现是方言的原因,到底什么是方言?这里 ...
- MySQL基础2-创建表和主键约束
1.创建表 在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行 主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习外 ...
- 【mysql优化1】表的优化与列类型选择
数据类型及字节数参考http://www.cnblogs.com/qlqwjy/p/8590639.html -------------------------表的优化:--------------- ...
- django连接mysql数据库以及建表操作
django连接mysql数据库需要在project同名的目录下面的__init__.py里面加入下面的东西 import pymysql pymysql.install_as_MySQLdb() 找 ...
- mysql workbench 导出建表语句
导出建表语句和数据 server—–>data export—–>选中表 注意,export to dump project folder,这种方式是每个表对应一个sql文件. 导出建 ...
- mysql优化篇之表分区
当表的数据量达到一定数量时(如单个.myd文件都达到10G,myd 是mysql的数据文件),这时候读取起来必然效率很低. 1.从业务角度可以解决(分表) ...
- mysql添加索引(建表之后)
一.使用ALTER TABLE语句创建索引 语法如下: alter table table_name add index index_name (column_list) ; alter table ...
随机推荐
- Push to GitHub:could not resolve host: github.com
系统:Mac os x 10.11.3 操作:Push to GitHub 错误如下: git push origin ssh: Could not resolve hostname ssh.gith ...
- jmeter 不同线程组之间传递变量3
jemter编写脚本要点: 1.切记:BeanShell PostProcessor写在关联函数 Regular Expression Extractor的后面 2.header HTTP Head ...
- CTU OPEN 2017 Pond Cascade /// 思维
题目大意: 给定N F 给定N个水池的大小 每个水池都以流量F开始注水 当位置较前的水池注满后 水会溢出到下一个水池 求 最后一个水池开始溢出的时间 和 所有水池全部注满的时间 1.最后一个n水池开始 ...
- Javascript高级程序设计--读书笔记之面向对象(一)
哈哈哈万物皆对象,终于到了js的面向对象篇. 一.属性类型 (1)数据属性 数据属性包含一个数据值的位置,在这个位置可以写入和读取数值,数据属性有四个描述器行为的特性 [[Configurable]] ...
- 如何在MySQL中删除表中指定列的唯一键?
语法结构如下: alter table table_name drop index column_name;
- 【CSS】input 框的一些事情
1.input框光标太长与不居中的问题 如果input框height:40px 为了字体垂直居中line-height也设为40px 问题来了,这样光标在刚刚focus时候是占据整个input框并且输 ...
- Dubbox服务的消费方配置
在src/main/resources下创建applicationContext-web.xml <?xml version="1.0" encoding="UTF ...
- #define和const的区别(转)
这个区别用从几个角度来说: 角度1:就定义常量说的话:const 定义的常数是变量 也带类型, #define 定义的只是个常数 不带类型. 角度2:就起作用的阶段而言:define是在编译的预处理阶 ...
- Web UI开发神器—Kendo UI for jQuery数据管理之过滤操作
Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...
- Hive SQL之分区表与分桶表
Hive sql是Hive 用户使用Hive的主要工具.Hive SQL是类似于ANSI SQL标准的SQL语言,但是两者有不完全相同.Hive SQL和Mysql的SQL方言最为接近,但是两者之间也 ...