MySQL外键进阶

外键

InnoDB是目前MySQL中唯一支持外键的内置存储引擎,外键引用的列应该具有逐渐约束或者唯一性约束。

使用外键的成本:

  • 外键通常要求每次在修改数据时都要在另外一张表多执行一次查找操作。
  • 虽然外键有索引,但是如果选择性外键列选择性比较低,其实索引无意义。
  • 如果向字表中写入一条记录外键约束会让InnoDB检查对应的父表的记录,也就需要对父表对应记录进行加锁操作,来确保这条记录不会再这个事务完成之时就被删除了。这会导致额外的锁等待,甚至会导致一些锁。因为没有直接访问这些表,这类死锁问题往往难排查。

外键的优点

  • 如果想要确保两个相关表始终有一致的数据,那么使用外键比在应用程序中检查一致性的性能要高得多。
  • 外键在相关数据的删除和更新上,也比在应用中维护要更高效。

建议:

  • 有时可以使用触发器来代替外键:对于相关数据的同时更新更新使用外键是合适的,但是如果外键只是用作数值约束,那么触发器或者显式地限制取值会更好些。(可以直接使用ENUM类型)。
  • 外键只做约束,在应用程序中实现该约束更好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值