MySQL开发规范
2023-04-14 09:47:49
一、基本规范
1) 使用InnoDB存储引擎 2) UTF8用于数据库字符集,UTF8用于校对字符集general_ci 3) 尽量在所有表和字段中添加注释 4) 库名、表名、字段名使用小写字母,禁止使用超过32个字符,须见名知意 5) 不是唯一的索引 “idx_字段1_字段2” 唯一的索引必须命名 “uniq_字段1_字段2” 命名
二、查询规范
1) SQL语句尽可能简单,大SQL试图分成小SQL来实现 2) 不要使用SELECTT * ,查询具体使用的字段 3) 禁止like做where条件(会扫描全表,不能使用索引) 4) 避免使用,除非有必要 != 等等非等值操作符(会导致索引不可用) 5) 不要在Where条件下列出使用函数(不引用索引) 6) 当只有一个返回结果可以确定时,使用limit 1(LIMIT分页注重效率,LIMIT越大,效率越低) 7) 少用子查询,改为JOIN(子查询应在内存中建立临时表) 8) 多表JOIN字段,最大的区别字段放在前面 9) IN条件下的数据数量应尽可能少,超过200个用EXIST代替IN 10) 建议Where字句中同一表的不同字段组合小于5组(否则考虑分表) 11) 禁止单个句同时更新多个表 12) 事务要尽量简单,整个事务的时间长度不要太长
三、表设计规范
1) 用DECIMAL代替FLOAT和DOUBLE存储精确的浮点(精确数据) 2) 用TINYINT代替ENUM类型(迁移时容易兼容) 3) 尽量不要使用TEXT、BLOB类型(该数据类型不能设置默认值,不易排序,不易建立索引) 4) 具有相同意义的字段设计定义必须相同(便于联表查询) 5) 所有字段均定义为NOT NULL(避免使用NULL字段,NULL字段难以查询和优化,NULL字段的索引需要额外的空间,NULL字段的复合索引无效) 6) 表必须有主键,不要使用更新频繁的列作为主键,尽量不要使用字符串作为主键,尽量使用唯一的非空自增键作为主键
四、索引设计规范
1) 单表索引数量不超过10个 2) 单个字段不得超过两个索引 3) 新建的唯一索引不能与主键重复 4) 避免冗余和重复索引 5) 尽量不要在频繁更新列中建立索引 6) 索引不在低基数列上建立,例如,状态、类型等 7) 数学运算和函数运算不在索引列中(参与运算的列不会引用索引) 8) 复合索引必须建立符合最左前缀特征的索引(mysql从左到右使用复合索引) 9) where条件下的重要SQL字段必须索引 10) Where条件下的字段顺序与索引顺序无关,自动调整优化器 11) 索引选择性= Cardinality / Total Rows,即基数 &pide; 数据行数越接近1,使用索引的过滤效果越好 12) 在建立索引时,一定要先检查explain的使用情况