暂无图片
分享
周群博
2019-04-25
oltp系统建议采用外键约束吗?

用最常见的emp和dept表举例,ref table是dept表。emp表的deptno reference 了dept表的主键deptno。

使用外键约束,会导致emp表的insert有数据校验成本。

付出这个成本能给数据库带来别的查询上的收益吗?

收藏
分享
5条回答
默认
最新
章芋文

触发器、外键等一般是不建议用的,大部分约束最好还是由程序来控制,OLTP中高并发DML操作情况下很容易出现性能问题,如果再出现外键列上无索引,业务基本上就会挂起。

外键约束仅仅只是为了满足数据完整性,不会给SELECT带来收益,反而会给DML操作带来额外开销和维护成本。

暂无图片 评论
暂无图片 有用 0
lastwinner

与阿文有不同意见,我是建议规范使用外键,数据最终落地是在数据库上,由数据库来保证数据约束的完整性是最靠谱的,通过应用程序反而不靠谱(不会merge的话,无法在一个原子操作中完成完整性判断并做出相应的DML动作)。

很多应用不使用外键的主要原因是没有专业的DBA为其设计把关,容易在生产环境产生较多性能问题,所以应用上就放弃了在表上建外键。

暂无图片 评论
暂无图片 有用 0
周群博

我在外网上看到一个案例,外键是可以优化执行计划的,oltp还是建议使用外键。

没有dba把关设计,开发人员确实容易把外键玩坏😂

暂无图片 评论
暂无图片 有用 0
lastwinner
没错,业务逻辑模型设计,一定要有DBA帮助把关表结构设计,否则设计一旦定型,后续改起来成本就很高了。
暂无图片 评论
暂无图片 有用 0
章芋文
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏