【开源中国】:浅显易懂之MYSQL开发使用规范
- 一、表规范
- 库名、表名、字段名必须使用小写字母,“_”分割,做到见名知意,建议使用名词
- 表必须定义主键,默认为ID,整型自增,ID字段作为自增主键,禁止上下文作为条件进行数据传
- 整形定义中不添加长度,比如使用INT,而不是INT(4),短数据类型使用TINYINT,比如status字段。
- VARCHAR(N),根据业务实际需要进行长度控制,N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字。
- 存储时间建议使用TIMESTAMP类型。
- 字段推荐定义为NOT NULL,设置默认值。
- 拒绝使用外键、推荐适当添加索引、聚集索引,索引列必须定义为not null,并设置default值;
- 多表中的相同列,必须保证列名定义一致
- 存储引擎推荐使用InnoDB,字符集选用utf8
- 表必须包含created、modified字段,表示必须包含记录创建时间和修改时间的字段
- 拒绝把图片流、大文本直接存入mysql,MySQL只保存索引信息
- 数据更新建议使用二级索引先查询出主键,再根据主键进行数据更新
- 不推荐使用procedure、function、触发器、视图、事件等MySQL高级功能
- 单表数据超过500万条记录,即可考虑拆库拆表
- 二、索引规范
- 索引名必须使用小写。非唯一索引推荐使用“idx字段名称字段名称[字段名]”进行命名,唯一索引推荐使用“uniq字段名称字段名称[字段名]”进行命名。
- 索引列必须not null
- 聚集索引字段数不超过3个,单边索引数不超过3个。
- 合理创建聚集索引(避免索引冗余),(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c)
- 对过长VARCHAR字段建立索引时,建议使用CRC32或者MD5散列,散列值再建立索引
- 三、SQL规范
- 拒绝硬编码,防止sql注入
- 拒绝select *,拒绝查询冗余
- 尽量减少SQL的IO交互
- WHERE条件中的非等值条件、会引起全表扫描(IN、BETWEEN、<、<=、>、>=)所以不推荐使用非等值条件,若使用放在where条件最后。
- 复杂sql书写完后,推荐EXPLAIN查看执行计划,优化后再使用