MySQL数据库开发的三十六条军规
一、核心军规
- 尽量不在数据库做运算
- 原则: 不要在数据库层面上执行复杂的运算逻辑。
- 原因: 数据库的设计是为了高效地存储和检索数据,而不是进行复杂的业务逻辑处理。
- 建议: 将复杂的计算任务转移到应用程序端处理,这样可以充分利用应用程序服务器的计算资源,减轻数据库的压力。
-
示例: 使用
MD5
函数加密密码或者ORDER BY RAND()
这样的随机排序,应该尽量避免在SQL语句中使用。 -
控制单表数据量
- 原则: 控制每个表的数据量,避免单一表中的数据量过大导致性能下降。
- 建议: 对于只包含整型的表,一年内的数据量不应超过1000万条;如果表中包含字符串,则该数字应降低至500万条。
-
实现方法: 可以通过合理地分表策略来实现,比如按照用户ID、日期、地区等维度进行分表。
-
保持表身段苗条
- 原则: 表中的字段数不宜过多。
- 好处: 提高I/O效率、减少表修复时间、加快
ALTER TABLE
操作速度等。 -
建议: 单表的字段数控制在20到50个之间是比较合适的范围。
-
平衡范式与冗余
- 原则: 在设计数据库时需要平衡第三范式与数据冗余之间的关系。
- 解释: 有时候为了提高查询性能,可能需要适当牺牲规范化的要求,在某些情况下加入一些冗余数据。
-
注意: 这种做法虽然可以提升性能,但会增加数据维护的复杂度。
-
拒绝3B
- 原则: 避免大SQL(Big SQL)、大事务(Big Transaction)以及大批量(Big Batch)的操作。
- 原因: 这些操作会导致数据库性能急剧下降,并可能引发各种问题。
- 示例: 大量的数据更新或删除操作可能会导致锁定时间过长,从而影响其他用户的访问。
二、字段类军规
- 用好数值字段类型
- 原则: 合理选择数值字段类型,例如
TINYINT
、SMALLINT
、MEDIUMINT
等。 -
注意: 避免使用
INT(1)
这样的写法,因为其意义不明;对于自增主键,推荐使用INT
或BIGINT
。 -
将字符转化为数字
- 原则: 如果有可能,将字符型字段转化为数值型字段,以提高数据存储和查询效率。