只记录自己不会滴

命名规范
1.普通索引以idx_col1_col2命名,唯一索引以uk_col1_col2命名
2.库名、表名、字段名支持最多64个字符,但为了统一规范、易于辨识以及减少传输量、禁止超过32个字符
3.临时库、表名须以tmp加日期为后缀

字符集规范
4.UTF8字符集存储汉字占用3个字节,存储英文字符占用一个字节
5.校对字符集使用默认的 utf8_general_ci;连接的客户端也必须使用UTF8MB4

库表规范
6.单表字段数上限30左右
7.主键尽量采用自增方式,InnoDB表实际是一棵索引组织表,顺序存储可以提高存取效率,充分利用磁盘空间
8.禁止使用外键参考,即使2个表的字段有明确的外键参考关系,也不使用 FOREIGN KEY,影响性能
9.单表数据量控制在3000w以内

字段规范
10.对于长度基本固定的列,如果该列恰好更新又特别频繁,适合char;
11.varchar虽然存储变长字符串,但不可太小也不可太大.UTF8最多能存21844个汉字或65532个英文
12.避免使用text和blob,尽可能把text/blob拆到另一个表中

13.使用tinyint来代替 enum和boolean;tinyint使用1个字节,一般用于status,type,flag的列
14.int使用固定4个字节存储(编译器定义),int(11)与int(4)只是显示宽度的区别

15.datetime 和 timestamp类型所占的存储空间不同,前者8个字节,后者4个字节,这样造成的后果是两者能表示的时间范围不同;前者范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,后者范围为 1970-01-01 08:00:01 到 2038-01-19 11:14:07,所以 TIMESTAMP 支持的范围比 DATATIME 要小
优先使用timestamp(范围小,空间小),datetime(范围大,空间大)也没问题

索引规范
16.如果是索引字段,一定要定义为not null ;因为null值会影响cordinate统计,影响优化器对索引的选择
17.单张表的索引数量控制在5个以内
18.主键是和数据放在一起的聚集索引,普通索引最终指向的是主键地址,所以把主键做最后一列是多余的;最好是不要使用主键作为索引