MySQL数据库设计规范
命名规范
-
表名字段名均使用小写字母,单词间以下划线分割。
-
表名字段名长度禁止超过32个字符,最大支持为64个字符,为了统一规范,易于查询,超过的单词尽量可读缩略的形式进行书写。
-
普通索引名称以 idx_ 开头,唯一索引以 uk_ 开头。
-
外键尽量以被引用表名称加 _id 组成。
基础规范
-
统一使用 INNODB 存储引擎,除非某些特定原因再行商议。
-
表字符集统一使用 UTF8,UTF8 字符集存储汉字占用3个字节,存储英文字符占用一个字节,如果emoji等表情符号的存储需求,可申请使用 UTF8MB4 字符集。
-
字段统一添加注释,id 可除外,type 型需指明主要值的含义,如”1 公开课,2 线上课”。
-
使用 timestamp 存储时间。
-
表必需指定主键,尽量采用自增方式。
-
不强制使用外键约束,此过程由业务端实现,提高性能。
-
能不用 NOT IN 就不用 NOT IN,会把空和NULL给查出来。
-
尽可能少的使用 TEXT、BLOB 类型。
索引优化规范
-
对于复杂的查询,执行 explain,查看索引使用情况。
-
重要的 SQL 必须被索引,比如 UPDATE、DELETE 语句的WHERE条件列 ORDER BY、GROUP BY、DISTINCT的字段。
-
不在低基数列上建立索引,例如“性别”。
-
如果是索引字段,一定要定义为not null,因为 null 值会影响 cordinate 统计,影响优化器对索引的选择,不能保证有值,设置相应的默认值。
-
单表索引个数尽量限制在5个以内。
-
避免使大表的 JOIN。
-
最左前缀原则,mysql 使用联合索引时,从左向右匹配,遇到断开或者范围查询时,无法用到后续的索引列。
-
尽量减少直接使用 SELECT * 读取全部字段。
-
使用 like 模糊匹配,%不要放首位。
本文参考
原文地址:https://segmentfault.com/a/1190000007616456