### MySql规范详解(系列一) #### 一、核心规范 1. **不在数据库做计算**:为了提高数据库的性能和响应速度,应该将复杂的计算逻辑移动到应用层处理。这样可以减少数据库的压力,并且提高整体系统的性能。 2. **控制单表数据量**:单表的数据量应该控制在千万级别以内,超过这个规模可能会影响查询性能和维护成本。可以通过分表等方式来降低单表的数据量。 3. **平衡范式与冗余**:虽然遵循数据库规范化原则有助于减少数据冗余和提高数据一致性,但在某些情况下,适当增加数据冗余可以提高查询效率。因此,在设计数据库时需要找到两者之间的平衡点。 4. **拒绝3B**:指的是大SQL、大事务和大批量操作,这些操作可能会对数据库造成较大的压力,应该尽量避免。 #### 二、基础规范 1. **禁止使用存储过程、视图、触发器**:尽管这些特性可以提供便利性,但它们可能会增加系统的复杂性和维护难度,特别是在高并发环境下,可能会影响性能。 2. **禁止存储文件和图片**:这类数据通常体积较大,不适合存放在数据库中。可以考虑使用专门的文件存储服务或对象存储服务。 3. **必须使用InnoDB存储引擎**:InnoDB支持事务处理、行级锁定和外键约束等功能,适合大多数应用场景。 4. **必须使用utf8mb4字符集**:这种字符集支持更多字符编码,包括表情符号,适合全球化应用的需求。 5. **数据表、数据字段必须加入中文注释**:有助于团队成员更好地理解和维护代码。 6. **数据库连接使用内网域名**:相比于IP地址,域名更易于管理和变更。 7. **命名规范**:库名、表名、字段名采用小写加下划线风格,不超过四个单词,确保名称具有明确含义,禁止拼音英文混用。 8. **表名、索引名规范**:表名使用`hj_`前缀,非唯一索引名使用`idx_`,唯一索引名使用`uniq_`。 9. **控制单库的表数量和每个表的字段数量**:单库的表数量不超过500张,每个表的字段数量不超过30个,以简化数据库结构,便于管理和维护。 #### 三、表设计规范 1. **禁止使用TEXT、BLOB类型**:这类类型主要用于存储大量文本或二进制数据,一般建议使用独立的服务进行存储。 2. **禁止使用小数存储货币**:考虑到货币计算的准确性,应以分为单位存储。 3. **禁止使用ENUM**:可以使用`TINYINT`代替,以提高查询性能。 4. **禁止使用外键**:虽然外键可以提供数据完整性约束,但可能会影响性能,可以在应用程序层面实现类似的功能。 5. **禁止使用NULL**:将字段定义为`NOT NULL`并提供默认值,如`age` int NOT NULL DEFAULT 0。 6. **建立主键ID**:使用自增ID作为主键,确保每条记录都有唯一的标识。 7. **新建表必备字段**:新建表必须包含`id`、`create_time`、`remark`三个字段,可选`update_time`、`operator`字段。 8. **统一日期类型**:日期类型必须使用`datetime(3)`,插入值为`now(3)`,其中“3”表示毫秒精度。 9. **使用合适的数字类型**:例如状态类型使用`TINYINT(1Byte)`存储0、1等。 10. **建立非空约束、唯一索引、联合索引**:确保数据的完整性和查询效率。 #### 四、索引类规范 1. **合理使用索引**:索引不是越多越好,需要根据实际需求和查询模式合理创建。 2. **建立组合索引**:将区分度高的字段放在前面,同时注意索引字段数量不要太多。 3. **避免在索引上进行列运算**:例如`SELECT * FROM table WHERE age + 1 = 10;`这样的查询可能无法利用索引。 4. **避免覆盖记录条数过多不适合建索引**:对于只有很少几种值的字段(如性别),建立索引意义不大。 #### 五、SQL使用规范 1. **禁止使用SELECT***:只获取必要的字段,减少网络传输和处理时间。 2. **禁止使用属性隐式转换**:确保查询语句中的类型匹配,提高查询效率。 3. **禁止在WHERE条件的属性上使用函数或者表达式**:这类操作可能会导致无法使用索引。 4. **禁止负向查询**:例如`SELECT * FROM table WHERE id NOT IN (1, 2, 3);`这种查询方式可能比正向查询慢很多。 5. **禁止大表使用JOIN查询**:对于大数据量的表,使用JOIN查询可能会非常慢。 6. **数据库类型和JAVA类型保持一致**:确保数据类型的一致性,减少类型转换带来的问题。 7. **SQL语句尽可能简单**:避免复杂的SQL语句,可以将其拆分为多个简单的语句执行。 8. **简单的事务**:例如上传图片等操作不应该加入到事务中,以免增加不必要的事务开销。 9. **OR改写为IN()**:`OR`的操作效率较低,而`IN()`则相对高效。 #### 六、行为规范 1. **不要直接连接主数据库**:优先使用读库进行查询操作,减少对主库的压力。 2. **避免批量更新生产数据**:批量更新操作可能会影响到其他依赖该数据的应用,应该在测试环境中测试无误后再执行。 3. **修改数据之前必须有备份习惯**:防止意外情况导致数据丢失。 4. **业务需要修改生产数据**:需要通过邮件发送,并且抄送给相关人员,确保数据安全。 以上规范是针对MySQL数据库设计和使用的最佳实践,遵循这些规范有助于提高数据库的性能、可靠性和安全性,同时也能够降低后期的维护成本。
剩余17页未读,继续阅读
- 粉丝: 4
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助