数据库建表和查询规范

建表规范

存储引擎:

  • 表的存储引擎必须选择InnoDB
  • 每一个Innodb表都必须要有主键

字符集:

  • 表的字符集都选择utf-8
  • 如果有需要存储emoji可以使用utf8mb4

索引:

  • 单表的索引个数最好不要超过5个
  • 尽量使用复合索引,而不是添加新的索引
  • 不要在索引列上使用数学运算和函数运算
  • 注意组合索引的顺序,以便利用索引的最左原则

字段:

  • 一张表的字段个数最好不要超过50个
  • 所有表和字段都需要添加中文注释
  • DECIMAL代替FLOATDOUBLE存储精确浮点数
  • 使用TINYINT来代替ENUM类型
  • 字段长度尽量按实际需要进行分配,不要随意分配一个很大的容量
  • 字段定义为NOT NULL要提供默认值
  • 尽可能不使用TEXT、BLOB类型
  • 每张表数据量建议控制在5000W以内
  • 区分使用TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT数据类型。例如取值范围为0-80时,使用TINYINT UNSIGNED
  • 区分使用DATETIME和TIMESTAMP。存储年使用YEAR类型。存储日期使用DATE类型。 存储时间(精确到秒)建议使用TIMESTAMP类型

存储:

  • 不在数据库中存储图片、文件等大数据
  • 避免使用存储过程、视图、触发器、事件

外键:

  • 避免使用外键,外键用来保护参照完整性,可在业务端实现

查询规范

  • 禁止使用select *,要查询数据后面必须紧跟字段值
  • 避免使用负向查询,例如 not in、!=、not like,否则容易造成全表扫描
  • 避免使用%前导查询,例如:like “%abc”,无法利用到索引
  • SQL中避免出现now()、rand()、sysdate()、current_user()等不确定结果的函数
  • 拆分复杂SQL为多个小SQL,避免大事务
  • 禁止使用order by rand()
  • 尽量用IN来替换OR
  • 尽量避免多表Join查询

猜你喜欢

转载自blog.csdn.net/u012460314/article/details/89928825