失效链接处理 |
MySQL开发规范 PDF 下载
本站整理下载:
相关截图:
主要内容:
1.命名规范
[规则]库名、表名、字段名必须使⽤⼩写字⺟,并采⽤下划线分割。
[规则]库名、表名、字段名禁⽌超过32个字符。
说明:字段名⽀持最多64个字符,但为了统⼀规范、易于辨识以及减少传输量,禁⽌超过32个字符。
[规则]库名、表名、字段名必须⻅名知意。
[规则]库名、表名、字段名禁⽌使⽤MySQL保留字。
说明:当库名、表名、字段名等属性含有保留字时,SQL语句必须⽤反引号引⽤属性名称,这将使得SQL语句书写、
SHELL脚本中变量的转义等变得⾮常复杂。
[规则]临时库、表名必须以tmp为前缀,并以⽇期为后缀。例如 tmp_test01_20201111。 [规则]备份库、表必须以bak为前缀,并以⽇期为后缀。bak_test01_20201111。
2.基础规范
[规则]使⽤INNODB存储引擎。
说明:
INNODB引擎是MySQL5.5版本以后的默认引擘,⽀持事务、⾏级锁,有更好的数据恢复能⼒、更好的并发性
能,同时对多核、⼤内存、SSD等硬件⽀持更好,⽀持数据热备份等,因此INNODB相⽐MyISAM有明显优
势。
[规则]所有表都需要添加注释;除主键外的其他字段都需要增加注释。推荐采⽤英⽂标点,避免出现乱码。
[规则]禁⽌在数据库中存储图⽚、⽂件等⼤数据。
说明:
通常文件很大,会短时间内造成数据量快速增长,数据库进行数据库读取时,通常会进行大量的随机IO操作,文件很
大时,IO操作很耗时 通常存储于文件服务器,数据库只存储文件地址信息. [规则]每张表数据量建议控制在5000W以内。
说明:
5000万并不是MySQL数据库的限制,过大会造成修改表结构,备份,恢复都会有很大的问题,可以用历史数据归档
(应用于日志数据),可采用其他手段来控制数据量大小. [规则]禁⽌在线上做数据库压⼒测试。
[规则]禁⽌从测试、开发环境直连数据库。
3.库表设计
[强制]禁⽌使⽤分区表。
说明:
分区表对分区键有严格要求;分区表在表变⼤后,执⾏DDL、SHARDING、单表恢复等都变得更加困难。因此
禁⽌使⽤分区表,并建议业务端⼿动SHARDING。 [规则]将⼤字段、访问频率低的字段拆分到单独的表中存储,分离冷热数据。
说明:
有利于有效利⽤缓存,防⽌读⼊⽆⽤的冷数据,较少磁盘IO,同时保证热数据常驻内存提⾼缓存命中率。
[规则]推荐使⽤HASH进⾏散表,表名后缀使⽤⼗进制数,数字必须从0开始。
[规则]按⽇期时间分表需符合YYYY[MM][DD][HH]格式,例如20201111。年份必须⽤4位数字表⽰。例如按
⽇散表user_20201111、 按月散表user_202011。 [规则]采⽤合适的分库分表策略。例如千库⼗表、⼗库百表等。
4.字段设计
[规则]建议使⽤UNSIGNED存储⾮负数值。
说明:
同样的字节数,⾮负存储的数值范围更⼤。如TINYINT有符号为 -128-127,⽆符号为0-255。 [规则]建议使⽤INT UNSIGNED存储IPV4。
说明
⽤UNSINGED INT存储IP地址占⽤4字节,CHAR(15)则占⽤15字节。另外,计算机处理整数类型⽐字符串类
型快。使⽤INT UNSIGNED⽽不是CHAR(15)来存储IPV4地址,通过MySQL函数inet_ntoa和inet_aton来进⾏
转化。IPv6地址目前没有转化函数,需要使⽤DECIMAL或两个BIGINT来存储。例如:
SELECT INET_ATON('209.207.224.40'); 3520061480
SELECT INET_NTOA(3520061480); 209.207.224.40
[规则]INT类型固定占⽤4字节存储,例如INT(4)仅代表显⽰字符宽度为4位,不代表存储⻓度。
说明:
数值类型括号后⾯的数字只是表⽰宽度⽽跟存储范围没有关系,⽐如INT(3)默认显⽰3位,空格补⻬,超出时
正常显⽰,python、java客户端等不具备这个功能。
[规则]区分使⽤TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT数据类型。例如取值范围为0-80时,使⽤
TINYINT UNSIGNED。 [规则]强烈建议使⽤TINYINT来代替ENUM类型。
|