文档章节

mysql数据库设计规范

蓝狐乐队
 蓝狐乐队
发布于 2017/02/20 14:50
字数 696
阅读 80
收藏 2

1    设计规范详情

1.1  基本命名和约束规范

1.1.1   统一表字符集为UTF8,如果需要存储emoj表情,需要使用UTF8mb4(mysql5.5.3以后才支持)

1.1.2   存储引擎采用InnoDB

1.1.3   变长字符串尽量使用varchar varbinary

1.1.4   不在数据库中存储图片、文件等

1.1.5   单表数据量控制在1亿以下

1.1.6   库名、表名、字段名不使用保留字

1.1.7   库名、表名、字段名、索引名使用小写字母,以下划线分割 ,需要见名知意

1.1.8   表名不宜设计过长,尽可能用最少的字符表达出表的用途

1.2  字段设计规范

1.2.1   所有字段均定义为NOT NULL

1.2.2   字段类型在满足需求条件下越小越好,使用UNSIGNED存储非负整数 ,实际使用时候存储负数场景不多

1.2.3   使用datatime类型存储时间

1.2.4   使用varchar类型存储变长字符串 ,当然要注意varchar(M)里的M指的是字符数不是字节数;使用UNSIGNED INT存储IPv4 地址而不是CHAR(15) ,这种方式只能存储IPv4,存储不了IPv6

1.2.5   使用DECIMAL存储精确浮点数,用float有的时候会有问题

1.2.6   尽量少用blob或text类型

1.3  索引设计规范

1.3.1   单个索引字段数不超过5,单表索引数量不超过5,索引设计遵循B+ Tree索引最左前缀匹配原则

1.3.2   选择区分度高的列作为索引

1.3.3   建立的索引能覆盖80%主要的查询,不求全,解决问题的主要矛盾

1.3.4   DML和order by和group by字段要建立合适的索引

1.3.5   避免索引的隐式转换和避免冗余索引

 

1.4  SQL设计规范

1.4.1   尽量不使用存储过程、触发器、函数等

1.4.2   避免使用大表的JOIN,MySQL优化器对join优化策略过于简单

1.4.3   避免在数据库中进行数学运算和其他大量计算任务

1.4.4   SQL合并,主要是指的DML时候多个value合并,减少和数据库交互

1.4.5   合理的分页,尤其大分页

1.4.6   UPDATE、DELETE语句不使用LIMIT ,容易造成主从不一致

1.5   补充说明

1.5.1   表字段为什么定义不使用Null

1.5.1.1     浪费存储空间,因为InnoDB需要有额外一个字节存储

1.5.1.2     表内默认值Null过多会影响优化器选择执行计划

1.5.2   关于使用datatime和timestamp

1.5.2.1     现在在5.6.4之后又有了变化,使用二者存储在存储空间上大差距越来越小 ,并且本身datatime存储范围就比timestamp大很多,timestamp只能存储到2038年

© 著作权归作者所有

蓝狐乐队
粉丝 106
博文 322
码字总数 89813
作品 0
昌平
程序员
私信 提问
MYSQL数据库命名及设计规范

1.设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单...

万里虎
2014/12/04
387
0
MySQL 高性能表设计规范

原文出处:高广超 良好的逻辑设计和物理设计是高性能的基石, 应该根据系统将要执行的查询语句来设计schema, 这往往需要权衡各种因素。 一、选择优化的数据类型 MySQL支持的数据类型非常多,...

高广超
2017/07/27
0
0
58到家数据库30条军规的详细解读

军规适用场景:并发量大、数据量大的互联网业务军规:介绍内容解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及内...

爱编程厨师
01/21
0
0
58到家数据库30条军规解读,你认可几条?

这里面都是一些很简单的规则,看似没有特别大的意义,但真实的不就是这么简单繁杂的工作吗? 军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重...

鉴客
2017/02/16
1K
12
mysql表设计规范和字段设计规范和开发使用规范

表设计规范: 每个innodb表都要有一个主键, 限制表上索引的数量,避免简历重复和冗余索引 注意合理选择符合索引键值的顺序 字段类型: 优先选择符合存储需要的最小的数据类型。 1、尽量将字...

王峰芝
2018/06/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部