一、数据库设计
1、表结构设计
-表中的自增列(auto_increment属性)推荐使用bigint类型
-首选使用非空的唯一键, 其次选择自增列或发号器
不使用更新频繁的列,尽量不选择字符串列,不使用UUID MD5 HASH
-业务中选择性很少的状态status、类型type等字段推荐使用tinytint或者smallint类型
-业务中IP地址字段推荐使用int类型
-业务活跃的大表中必须有行数据的创建时间字段create_time和最后更新时间字段update_time
-表中所有字段必须都是NOT NULL属性,业务可以根据需要定义DEFAULT值
-用decimal存储精确浮点数(不要用浮点类型)
-不推荐使用enum,set,blob,text等类型,对于大表必须将text、blob等类型字段拆分或者独立建表
2、索引设计
-避免冗余索引 :避免将同一个字段都建立索引,索引的建立需要根据访问的SQL语句来评估
-一次查询,一个表只能用到一个索引,不要对每个查询条件的字段都单独建立索引
-单张表索引数量不超过7,单个索引字段数不超过5
-不在null列上加索引
-不在低基数列上建立索引,例如“性别”
-复合索引字段排序,区分度最大的字段放在前面
-核心SQL优先考虑覆盖索引
-对字符串使用前缀索引
-前缀长度不超过8个字符 ,必须是最左前缀
3、字符集及校验集
-数据库和表的字符集必须一致,且所有表的字符集必须一致,只能是utf8;数