目录
一.命名规范:
二.表结构规范:
三.索引使用规范:
四.SQL编写规范:
1
库
a.不使用MySQL保留字
b.使用小写字母
c.清晰明了,根据业务线,环境进行定义
d.使用_分割
2
表
a.不使用MySQL保留字
b.使用小写字母
c.清晰明了,根据业务进行定义
d.使用_分割
3
字段
a.不使用MySQL保留字
b.使用小写字母
c.清晰明了,根据存储内容进行定义
d.使用_分割
4
索引
a.二级索引: idx_column1_column2
b.唯一索引: uniq_column1_column2
1
类型简单化
越简单的类型占用越少的CPU周期和IO, int优于varchar
2
数据类型尽量小
越小的数据类型占用越少的CPU周期和IO,tinyint优于int
3
字符串类型
a.varchar(x) x代表字符数,尽量使用正确的长度,utf8下,一个汉字字符占用三个字节,utf8mb4下,一个汉字字符占用四个字节;
b.varchar(25)优于varchar(255):存储同样长度的字段时,占用相同的磁盘资源,但是varchar(255)占用更多的内存
c.varchar(255)优于varchar(256) :varchar会使用额外的空间来记录自身的长度,varchar(255)使用一个字节,varchar(256)使用两个字节;在进行表结构变更时,varchar(255)比varchar(256)更快速,不会影响服务器性能;utf8mb4下,建议varchar(191);
d.使用varchar来记录电话号码,以兼容+86等情况
4
枚举类型
a.使用tinyint来存储枚举类型,性能要高于enum及varchar类型
5
数字类型
a.可以为整数类型指定宽度,但是没有意义,不会限制值的合法范围
b.可以使用unsigned只存正数,来提升存储范围,有符号和无符号使用相同的存储空间,具有同样的性能
c.ipv4地址建议用int类型存储 int占用4字节,char(15)占用至少15字节,一亿行记录下存储空间会多出1.1G
6
时间类型
a.尽量使用timestamp类型:timestamp占用4个字节存储,优于datetime占用8个字节存储;datetime由date和time两个函数组成,耗费更多的CPU周期;timestamp具有时区功能
b.每行需增加行创建时间: create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
c.每行需增加行更新时间: modify_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
d.timestamp的可存储时间范围为 ‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’ ,当超出这个范围,可以使用datetime替换timestamp
7
行定义
a.字段必须定义NOT NULL
b.字段必须有默认值,建议:数字是0,字符串可以是 ''
c.主键尽量使用系统默认的自增主键:ID bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键'
d.禁止使用外键
e.适当进行列的冗余,在范式设计和性能之间进行平衡
f.每个字段必须填写注释,枚举类型字段,要注释清楚枚举值:COMMENT='实名状态,0 … 1… …9…'
8
其他
a.建表:ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表'
b.默认使用utf8mb4字符集: DEFAULT CHARSET=utf8mb4
c.默认使用InnoDB存储引擎: ENGINE=InnoDB
d.表结构必须填写表的注释:COMMENT='用户表'
1.使用过多的索引会降低表的插入速度,建议索引总数量不超过5个
2.辨识度低的列,不需要使用索引,如性别
3.尽量复用索引,不要造成冗余索引
4.联合索引必须控制列的数量,建议联合索引的长度不超过4个字段
5.建立联合索引需要根据复用及辨识度选择列的顺序
6.为提升性能,尽量在其他条件允许下使用覆盖索引
1.只允许简单查询,不允许join及子查询,join操作请放在应用端实现
2.禁止使用函数,函数运算在应用端进行,在索引列中作运算, 无法利用索引
3.高频的query应加入到缓存当中
4.禁止使用触发器及存储过程,视图
5.禁止使用like %xx这样无法使用到索引的模糊查询,建议这种使用场景使用ES存储
6.禁止使用select * ,需指定具体需要取出的列
7.insert必须指定字段,不能单纯使用insert .. values()
8.update、delete必须指定where,必须加limit
9.必须正确的使用字段类型,字符串必须加‘’
10.禁止负向查询 NOT != <> !<等 ,可以改为 in 等查询方式
11.控制in()的数量,不要超过500,过大会导致性能问题
相关知识
架构之路
三层架构和MVC 模式
宠物呼吸麻醉机的架构组成系统
银豆之路
大航海之路宠物在哪捉 大航海之路宠物位置大全
探秘宠物店的组织架构:了解宠物店内部的职能分工和管理层级
宠物店组织架构及分工
wordpress最佳架构
洛克王国守护者之路
超凡之路宠物攻略
网址: 架构之路 https://m.mcbbbk.com/newsview411775.html
上一篇: DAO的vc编程中,在app文件 |
下一篇: 【尝试向】猫咪呼噜+火焰燃烧=安 |