2019-04-25
oltp系统建议采用外键约束吗?
用最常见的emp和dept表举例,ref table是dept表。emp表的deptno reference 了dept表的主键deptno。
使用外键约束,会导致emp表的insert有数据校验成本。
付出这个成本能给数据库带来别的查询上的收益吗?
收藏
分享
5条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
用最常见的emp和dept表举例,ref table是dept表。emp表的deptno reference 了dept表的主键deptno。
使用外键约束,会导致emp表的insert有数据校验成本。
付出这个成本能给数据库带来别的查询上的收益吗?
触发器、外键等一般是不建议用的,大部分约束最好还是由程序来控制,OLTP中高并发DML操作情况下很容易出现性能问题,如果再出现外键列上无索引,业务基本上就会挂起。
外键约束仅仅只是为了满足数据完整性,不会给SELECT带来收益,反而会给DML操作带来额外开销和维护成本。
评论
有用 0与阿文有不同意见,我是建议规范使用外键,数据最终落地是在数据库上,由数据库来保证数据约束的完整性是最靠谱的,通过应用程序反而不靠谱(不会merge的话,无法在一个原子操作中完成完整性判断并做出相应的DML动作)。
很多应用不使用外键的主要原因是没有专业的DBA为其设计把关,容易在生产环境产生较多性能问题,所以应用上就放弃了在表上建外键。
评论
有用 0我在外网上看到一个案例,外键是可以优化执行计划的,oltp还是建议使用外键。
没有dba把关设计,开发人员确实容易把外键玩坏😂
评论
有用 0
评论
有用 0
墨值悬赏