MySQL数据库开发的三十六条军规

一、核心军规

  1. 尽量不在数据库做运算
  2. 原则: 不要在数据库层面上执行复杂的运算逻辑。
  3. 原因: 数据库的设计是为了高效地存储和检索数据,而不是进行复杂的业务逻辑处理。
  4. 建议: 将复杂的计算任务转移到应用程序端处理,这样可以充分利用应用程序服务器的计算资源,减轻数据库的压力。
  5. 示例: 使用 MD5 函数加密密码或者 ORDER BY RAND() 这样的随机排序,应该尽量避免在SQL语句中使用。

  6. 控制单表数据量

  7. 原则: 控制每个表的数据量,避免单一表中的数据量过大导致性能下降。
  8. 建议: 对于只包含整型的表,一年内的数据量不应超过1000万条;如果表中包含字符串,则该数字应降低至500万条。
  9. 实现方法: 可以通过合理地分表策略来实现,比如按照用户ID、日期、地区等维度进行分表。

  10. 保持表身段苗条

  11. 原则: 表中的字段数不宜过多。
  12. 好处: 提高I/O效率、减少表修复时间、加快 ALTER TABLE 操作速度等。
  13. 建议: 单表的字段数控制在20到50个之间是比较合适的范围。

  14. 平衡范式与冗余

  15. 原则: 在设计数据库时需要平衡第三范式与数据冗余之间的关系。
  16. 解释: 有时候为了提高查询性能,可能需要适当牺牲规范化的要求,在某些情况下加入一些冗余数据。
  17. 注意: 这种做法虽然可以提升性能,但会增加数据维护的复杂度。

  18. 拒绝3B

  19. 原则: 避免大SQL(Big SQL)、大事务(Big Transaction)以及大批量(Big Batch)的操作。
  20. 原因: 这些操作会导致数据库性能急剧下降,并可能引发各种问题。
  21. 示例: 大量的数据更新或删除操作可能会导致锁定时间过长,从而影响其他用户的访问。

二、字段类军规

  1. 用好数值字段类型
  2. 原则: 合理选择数值字段类型,例如 TINYINTSMALLINTMEDIUMINT 等。
  3. 注意: 避免使用 INT(1) 这样的写法,因为其意义不明;对于自增主键,推荐使用 INTBIGINT

  4. 将字符转化为数字

  5. 原则: 如果有可能,将字符型字段转化为数值型字段,以提高数据存储和查询效率。