mysql建表时建外键约束_数据库建表时一定要设置外键约束关系吗?
如果被引用的表需要做分库分表,那么无法建立外键约束。
使用外键会降低数据库性能,这个说法并不细致。需要详细分析。
建立外键,那么一般引用字段上需要建立索引。如果不建立索引,被引用的表上删除数据,会全表扫描引用表。被引用表上删除数据速度奇慢。(如果引用表从来不删除数据不修改主键可以不建立这个索引)。
索引会降低插入删除速度,降低(修改了索引字段值的)修改操作的速度。
从这个角度来说,建立了外键,无论是否建立外键字段上的索引,总有速度变慢了。但是,如果外键字段上本身也有查询需求,这个索引就不能省了。
另外,还有一个流行的说法是:数据库扩容不易,容易成为瓶颈,所以将数据完整性校验交给应用层做,不适用数据库(外键机制)来做。
这个说法是不准确的。 OLTP使用场景的数据库,主要是消耗磁盘IO。数据库的瓶颈一般也是磁盘IO。无论是应用层做校验,还是外键机制校验,磁盘IO是省不的。
内存和CPU很难成为数据库的瓶颈,因为PC服务器已经可以支持128核CPU,若干T的内存。
了解完外键对数据库性能的影响。那么我们就能容易的得到结论:
如果被引用的表需要做分库分表,那么无法建立外键约束。
如果数据量很大,但不会分库分表。引用字段不会作为查询条件(无建立索引需求),可以考虑不使用外键。但是仍然建议使用。因为不使用外键会额外增加代码量增加人工成本,人比较贵,cpu/内存/磁盘比较便宜。
一般系统,单表记录数不超过千万的。强烈建议使用外键约束来检查数据完整性。
ps: 一个人经验,企业应用,数据库没有外键的,运行几年后,95%的系统数据库里的数据对不上。
mysql建表时建外键约束_数据库建表时一定要设置外键约束关系吗?相关推荐
- Visio 的uml数据库表示方法中容器无法设置外键?
最近在写大论文,需要在Visio中用自带的uml数据库表示方法来画数据库的关系.如果你不知道怎么找到这个表示方法,那么请看第1节,会的话直接跳到第2节即可. 一.打开Visio中用自带的uml数据库表 ...
- mysql gtid 主键冲突_数据库开启gtid时,需要注意的问题
1.slave不能执行任何sql,包括超级用户 2.read_only=on,这个必须要开启,避免业务执行sql 3.保证当前slave的事务id为1 当slave同步出现问题时,手动跳过,需要考虑的 ...
- mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1
问题描述:Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法: 在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sq ...
- sql组合键设置外键_学习SQL:外键
sql组合键设置外键 In the previous article, we talked about the primary key (PK). In this one, we'll check w ...
- mysql创建表时设置外键_mysql创建表时设置外键约束的方法
mysql创建表时设置外键约束的方法 发布时间:2020-06-17 15:54:11 来源:亿速云 阅读:312 作者:元一 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中, ...
- 数据库建表时一定要设置外键约束关系吗?
数据库建表时一定要设置外键约束关系吗? 我们都知道每张数据表都有一个能够确定每行数据唯一性的字段,也就是主键.而在关系数据库中,常常有两表存在一定关系的情况.即一张表的主键跟另一张的外键存在对应关系, ...
- mysql外键约束脚本_如何在MySQL中设置外键约束
(1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...
- 在mysql中如何添加外键约束_如何在MySQL中设置外键约束
(1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...
- mysql外键约束的作用_如何在MySQL中设置外键约束以及外键的作用
1.外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: #创建表student,并添加各种约 ...
最新文章
- ACM网络赛金华赛区的一道关于树的题:Family Name List
- idea安装Maven Helper
- Python程序开发——第三章 列表与元组
- JAVA单向链表实现
- 关于阿里云服务器本地访问不了的问题
- 谈身份管理之基础篇 - 保障云上安全,从[规范账号使用]开始
- Laravel框架登录功能实例
- python multiprocessing多进程执行for循环的代码
- delphi 登录界面 主窗体 切换_.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)
- 转ORA-28002: the password will expire within 7 days 解决方法
- python学习精华——成长篇(二)
- 物理计算机仿真实验报告,大学物理实验实验报告模板
- 装机、资料库结构与文件备份方案
- 阿里P10、腾讯T4、华为18都是怎样的神级收入?
- 这是个转贴,QB教程,很不错
- Java编程思想之高内聚低耦合
- 画论88 高秉《指头画说》
- 0507 #2 NYIST 括号配对问题
- Oracle 中启动 Scott 用户 的方法
- linux硬盘故障注入,用软件中断实现的Linux内核故障注入方法.pdf
热门文章
- python生成随机验证码(字母加数字的组合)
- 作者:Gopakumar Gopalakrishnan,男,印度科技大学管理学博士,印孚瑟斯技术有限公司高级研究科学家。...
- 作者:​徐优俊(1990-),男,北京大学前沿交叉学科研究院博士生。
- 【2017年第1期】金融大数据标准规范体系比较研究
- 【数据结构与算法】顺序表V3.0的Java实现
- Scrapy 爬虫框架五—— 常见的反爬虫技术
- 17款优秀的Vue UI组件库汇总
- 搞一个兼容浏览器的事件函数
- ctrl+shift+f被搜狗输入法占用的解决方法
- 大数据利器2018版