MySQL数据库应不应该拿掉所有的外键约束?


RT
拿掉外键好像是,能增加效率减少约束。

数据库 数据库性能优化 mysql 数据库设计 sql

到叔叔这里来 10 years, 3 months ago
  1. 作为写了8年 PHP 的程序员来讲, 我个人的习惯是不使用外键。
  2. 因为我们所接触的绝大多数业务需求,并没有严谨到需要双层数据验证(第一层是在 PHP 代码里)。
    即使是对数据一致性稍有要求的电子商务网站,我也接触过只用 MyISAM 表的,除了程序逻辑本身经过严格的单元测试和使用场景测试去保证数据一致性之外,我们还准备了完善的 logging 系统,在 pdo 层面对站点数据的每一次 CURD 做日志,针对管理员和会员的每一个操作也做日志,方便意外情况的随时排查。
  3. 选型过程中没有使用 Innodb 的其它原因还包括:缓存的设计十分合理、命中率十分高,并且经过了数据验证,综合应用流量,我们可以大胆不去考虑锁表问题;外键确实增加了数据库开销,相对于我们站点的规模来讲,增加的开销无法忽略;绝大多数 PHP Java 前端人员水平良莠不齐,我们不想为数据库基础不好的同学做科普。
  4. 说句题外话,当一个应用需要考虑是否拿掉外键,提高效率的时候。需要重构代码或增加中间件( mongo , redis 之类)以应付数据库开销了。
stand answered 10 years, 3 months ago

Your Answer