如果被引用的表需要做分库分表,那么无法建立外键约束。

使用外键会降低数据库性能,这个说法并不细致。需要详细分析。

建立外键,那么一般引用字段上需要建立索引。如果不建立索引,被引用的表上删除数据,会全表扫描引用表。被引用表上删除数据速度奇慢。(如果引用表从来不删除数据不修改主键可以不建立这个索引)。

索引会降低插入删除速度,降低(修改了索引字段值的)修改操作的速度。

从这个角度来说,建立了外键,无论是否建立外键字段上的索引,总有速度变慢了。但是,如果外键字段上本身也有查询需求,这个索引就不能省了。

另外,还有一个流行的说法是:数据库扩容不易,容易成为瓶颈,所以将数据完整性校验交给应用层做,不适用数据库(外键机制)来做。

这个说法是不准确的。 OLTP使用场景的数据库,主要是消耗磁盘IO。数据库的瓶颈一般也是磁盘IO。无论是应用层做校验,还是外键机制校验,磁盘IO是省不的。

内存和CPU很难成为数据库的瓶颈,因为PC服务器已经可以支持128核CPU,若干T的内存。

了解完外键对数据库性能的影响。那么我们就能容易的得到结论:

如果被引用的表需要做分库分表,那么无法建立外键约束。

如果数据量很大,但不会分库分表。引用字段不会作为查询条件(无建立索引需求),可以考虑不使用外键。但是仍然建议使用。因为不使用外键会额外增加代码量增加人工成本,人比较贵,cpu/内存/磁盘比较便宜。

一般系统,单表记录数不超过千万的。强烈建议使用外键约束来检查数据完整性。

ps: 一个人经验,企业应用,数据库没有外键的,运行几年后,95%的系统数据库里的数据对不上。

mysql建表时建外键约束_数据库建表时一定要设置外键约束关系吗?相关推荐

  1. Visio 的uml数据库表示方法中容器无法设置外键?

    最近在写大论文,需要在Visio中用自带的uml数据库表示方法来画数据库的关系.如果你不知道怎么找到这个表示方法,那么请看第1节,会的话直接跳到第2节即可. 一.打开Visio中用自带的uml数据库表 ...

  2. mysql gtid 主键冲突_数据库开启gtid时,需要注意的问题

    1.slave不能执行任何sql,包括超级用户 2.read_only=on,这个必须要开启,避免业务执行sql 3.保证当前slave的事务id为1 当slave同步出现问题时,手动跳过,需要考虑的 ...

  3. mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1

    问题描述:Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法: 在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sq ...

  4. sql组合键设置外键_学习SQL:外键

    sql组合键设置外键 In the previous article, we talked about the primary key (PK). In this one, we'll check w ...

  5. mysql创建表时设置外键_mysql创建表时设置外键约束的方法

    mysql创建表时设置外键约束的方法 发布时间:2020-06-17 15:54:11 来源:亿速云 阅读:312 作者:元一 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中, ...

  6. 数据库建表时一定要设置外键约束关系吗?

    数据库建表时一定要设置外键约束关系吗? 我们都知道每张数据表都有一个能够确定每行数据唯一性的字段,也就是主键.而在关系数据库中,常常有两表存在一定关系的情况.即一张表的主键跟另一张的外键存在对应关系, ...

  7. mysql外键约束脚本_如何在MySQL中设置外键约束

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  8. 在mysql中如何添加外键约束_如何在MySQL中设置外键约束

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  9. mysql外键约束的作用_如何在MySQL中设置外键约束以及外键的作用

    1.外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: #创建表student,并添加各种约 ...

最新文章

  1. ACM网络赛金华赛区的一道关于树的题:Family Name List
  2. idea安装Maven Helper
  3. Python程序开发——第三章 列表与元组
  4. JAVA单向链表实现
  5. 关于阿里云服务器本地访问不了的问题
  6. 谈身份管理之基础篇 - 保障云上安全,从[规范账号使用]开始
  7. Laravel框架登录功能实例
  8. python multiprocessing多进程执行for循环的代码
  9. delphi 登录界面 主窗体 切换_.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)
  10. 转ORA-28002: the password will expire within 7 days 解决方法
  11. python学习精华——成长篇(二)
  12. 物理计算机仿真实验报告,大学物理实验实验报告模板
  13. 装机、资料库结构与文件备份方案
  14. 阿里P10、腾讯T4、华为18都是怎样的神级收入?
  15. 这是个转贴,QB教程,很不错
  16. Java编程思想之高内聚低耦合
  17. 画论88 高秉《指头画说》
  18. 0507 #2 NYIST 括号配对问题
  19. Oracle 中启动 Scott 用户 的方法
  20. linux硬盘故障注入,用软件中断实现的Linux内核故障注入方法.pdf

热门文章

  1. python生成随机验证码(字母加数字的组合)
  2. 作者:Gopakumar Gopalakrishnan,男,印度科技大学管理学博士,印孚瑟斯技术有限公司高级研究科学家。...
  3. 作者:​徐优俊(1990-),男,北京大学前沿交叉学科研究院博士生。
  4. 【2017年第1期】金融大数据标准规范体系比较研究
  5. 【数据结构与算法】顺序表V3.0的Java实现
  6. Scrapy 爬虫框架五—— 常见的反爬虫技术
  7. 17款优秀的Vue UI组件库汇总
  8. 搞一个兼容浏览器的事件函数
  9. ctrl+shift+f被搜狗输入法占用的解决方法
  10. 大数据利器2018版