建表规范

1、必须使用InnoDB存储引擎
解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高
2、必须使用UTF8字符集
解读:万国码,无需转码,无乱码风险,节省空间
3、数据表、数据字段必须加入中文注释
解读:以便后续维护
4、禁止使用存储过程、视图、触发器、Event
解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移吧
5、禁止存储大文件或者大照片
解读:大文件和照片存储在文件系统,数据库里存URI
6、禁止使用外键,如果有外键完整性约束,需要应用程序控制
解读:外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能,大数据高并发业务场景数据库使用以性能优先
7、单实例表数目必须小于500
8、单表列数目必须小于30
解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高
9、表必须有主键,例如自增主键
解读:
(1)主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用
(2)主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率
(3)无主键的表删除,在row模式的主从架构,会导致备库夯住
10、库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用
解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高
11、表明建议加前缀
12、禁用保留字,如 desc 、 range 、 match 、 delayed 等,请参考 MySQL 官方保留字
13、定长与变长分离
解读:核心且常用字段,宜建成定长(int、char、time),放在一张表。而varchar,text,blog,这种变长字段,适合单独放一张表,用主键与核心表关联起来。
14、常用字段和不常用字段要分离
解读:需要结合网站具体的业务来分析,分析字段的查询场景,查询频度低的字段,单独拆出。
13、用空间换时间
解读:在1对多,需要关联统计的字段上,添加冗余字段。