大数跨境
0
0

回归基础-Mysq军规

回归基础-Mysq军规 二进制跳动
2020-07-11
1
导读:mysql军规-不忘初心


一.基础规范

●表存储引擎必须使用Innodb。   这是特别强调必须

●表字符集默认使用utf-8

画外音:通用,无乱码风险,汉字一般3个字节,英文1字节


●禁止使用存储过程、视图、触发器、Event

画外音:对数据库性能影响很大,能让站点层和服务层干的事情,不要交到数据库层


●禁止在数据库中存储大文件,比如说图片,可以将大文件存在对象存储系统中


●禁止在线上环境做压力测试


●测试、开发、线上数据库环境必须隔离开来


二、命令规范。

●库名,表名,列名必须使用小写

画外音: ABc、abC都是在给自己埋坑


●库名、表名、列名必须见名知其义

画外音: nanjing,pukou 谁知道你什么意思啊


●库备份必须以.bak为前缀,以日期为后缀

●从库必须-s为后缀

●备库必须以 -ss为后缀




三、表设计规范


●单实例表个数控制在2000个以内 


●单表分表个数必须控制在1024个以内


●表必须有主键,推荐使用UNSIGNED整数位主键


画外音:如果是row模式的主从复制模式,从库会挂。sql语句模式的还好


●禁止使用外键,如果要保证完整性,应该用程序来实现

画外音:使用外键,会影响update/delete的性能,有可能会造成死锁



四、列设计规范


●业务区分 tinyint/int/bigint 占用的大小为1/4/8字节


●根据业务区分 datetime/timestamp   

画外音:前者是5字节,后者是4个字节


●必须把字段定义为 not null并设默认值


画外音: 1.NULL muysql比较难优化

            2.NULL需要更大的存储空间

            3.NULL只能使用IS NULL或者IS NOT NULL 


●使用int unsigned 存储ipv4 ,不要直接用 char来定义


●使用varchar(20)存储手机号,不要使用整数

画外音:

(1)手机号不会用来做数学运算

(2)varchar可以模糊查询,例如 like'139%'


五、索引规范


●唯一索引使用 iniq_[字段名]命名

●非唯一索引使用idx_[字段名]来命名

●单张表索引数量建议控制在5个以内


画外音:

(1)互联网场景下,太多索引影响写性能

(2)索引太多,会导致mysql找不到最优索引

(3)异常复杂的查询需求,可以选择ES带替代



●不建议在频繁更新的字段上建立索引


●非必要不要进行join查询,如果实在要进行join查询,被join的字段必须类型相同,并建立索引


画外音:join的字段类型不同,可能会导致全表扫描


六、SQL规范

●禁止使用select *  只获取必要字段


●insert必须指定字段 ,禁止使用insert into T values()

画外音:表结构变更后,保证程序不会受影响



●禁止在where条件使用函数或者表达式


●禁止大表join和子查询


●同一个字段上的OR必须改写用IN,IN的值必须少于50个


●应用程序必须捕获SQL异常

画外音:方便定位线上问题



无状态:进程之间对等























.


.




【声明】内容源于网络
0
0
二进制跳动
15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
内容 739
粉丝 0
二进制跳动 15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
总阅读97
粉丝0
内容739