书写未来

命名规范

  1. 表名字段名均使用小写字母,单词间以下划线分割。
  2. 表名字段名长度禁止超过32个字符,最大支持为64个字符,为了统一规范,易于查询,超过的单词尽量可读缩略的形式进行书写。
  3. 普通索引名称以 idx 开头,唯一索引以 uk 开头。
  4. 外键尽量以被引用表名称加 _id 组成。

基础规范

  1. 统一使用 INNODB 存储引擎,除非某些特定原因再行商议。
  2. 表字符集统一使用 UTF8,UTF8 字符集存储汉字占用3个字节,存储英文字符占用一个字节,如果emoji等表情符号的存储需求,可申请使用 UTF8MB4 字符集。
  3. 字段统一添加注释,id 可除外,type 型需指明主要值的含义,如”1 公开课,2 线上课”。
  4. 使用 timestamp 存储时间。
  5. 表必需指定主键,尽量采用自增方式。
  6. 不强制使用外键约束,此过程由业务端实现,提高性能。
  7. 能不用 NOT IN 就不用 NOT IN,会把空和NULL给查出来。
  8. 尽可能少的使用 TEXT、BLOB 类型。

索引优化规范

  1. 对于复杂的查询,执行 explain,查看索引使用情况。
  2. 重要的 SQL 必须被索引,比如 UPDATE、DELETE 语句的WHERE条件列 ORDER BY、GROUP BY、DISTINCT的字段。
  3. 不在低基数列上建立索引,例如“性别”。
  4. 如果是索引字段,一定要定义为not null,因为 null 值会影响 cordinate 统计,影响优化器对索引的选择,不能保证有值,设置相应的默认值。
  5. 单表索引个数尽量限制在5个以内。
  6. 避免使大表的 JOIN。
  7. 最左前缀原则,mysql 使用联合索引时,从左向右匹配,遇到断开或者范围查询时,无法用到后续的索引列。
  8. 尽量减少直接使用 SELECT * 读取全部字段。
  9. 使用 like 模糊匹配,%不要放首位。

    本文参考