58到家MySQL军规升级版
一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读: (1)通用,无乱码风险,汉字3字节,英文1字节 (2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它 禁止使用存储过程,视图,触发器,Event 解读: (1)对数据库性能影响较大,互联网业务,能让站点层和服务层干的事情,不要交到数据库层 (2)调试,排错,迁移都比较困难,扩展性较差 禁止在数据库中存储大文件,例如照片,可以将大文件存储在对象存储系统,数据库中存储路径 禁止在线上环境做数据库压力测试 测试,开发,线上数据库环境必须隔离 二、命名规范 库名,表名,列名必须用小写,采用下划线分隔 解读:abc,Abc,ABC都是给自己埋坑 库名,表名,列名必须见名知义,长度不要超过32字符 解读:tmp,wushan谁TM知道这些库是干嘛的 库备份必须以bak为前缀,以日期为后缀 从库必须以-s为后缀 备库必须以-ss为后缀 三、表设计规范 单实例表个数必须控制在2000个以内 单表分表个数必须控制在1024个以内 表必须有主键,推荐使用UNSIGNED整数为主键 潜在坑:删除无主键的表,如果是row模式的主从架构,从库会挂住 禁止使用外键,如果要保证完整性,应由应用程式实现 解读:外键使得表之间相互耦合,影响update/delete等SQL性能