MySQL外键约束简介

技术MySQL外键约束简介 MySQL外键约束简介InnoDB是目前MySQL中唯一支持外键的内置存储引擎,所以如果需要外键支持那选择 就不多了(PBXT也有外键支持)。使用外键是有成本的。比如外键通常

MySQL外键约束介绍

InnoDB是目前MySQL中唯一支持外键的内置存储引擎,所以如果需要外键支持,选择不多(PBXT也支持外键)。

使用外键是有成本的。例如,外键通常要求每次修改数据时,应该在另一个表中再执行一次查找操作。尽管InnoDB强制外键使用索引,但它仍然不能消除约束检查的开销。如果外键列的选择性低,将导致非常大且低的选择性指数。例如,在一个非常大的表中有一个状态列,您希望限制该状态列的值。如果这个列只能取三个值3354,虽然这个列本身很小,但是如果主键很大,那么这个索引就会很大3354,除了外键限制,这个索引就没有其他功能了。

但是,在某些情况下,外键可以提高一些性能。如果您想确保两个相关的表始终具有一致的数据,那么使用外键的性能比在应用程序中检查一致性要高得多。此外,外键在删除和更新相关数据方面比维护应用程序更有效。但是外键维护是逐行进行的,这样的更新会比批量删除更新慢。

外键约束要求对其他一些表的额外访问,这也意味着额外的锁。如果一条记录被写入子表,外键约束会让InnoDB检查对应父表的记录,因此需要锁定父表的对应记录,以确保事务完成时不会删除这条记录。这将导致额外的锁等待,甚至一些死锁。因为不能直接访问这些表,所以这种死锁问题通常很难解决。

有时,可以使用触发器来代替外键。对于相关数据,同时更新外键更为合适,但如果外键仅作为数值约束,则最好触发或显式限制该值。(这里可以直接使用ENUM类型。)

如果只使用外键作为约束,通常最好在应用程序中实现该约束。外键会带来很多额外的消耗。这里没有相关的基准数据,但是我们遇到了很多案例。在分析性能时,我们发现外键约束是瓶颈,删除外键后性能立即得到了很大的提升。

作者:小家电维修

有时候,见面之后,就没有时间了。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/88689.html

(0)

相关推荐

  • TestComplete中如何使用VBScript脚本实现对容器控件中子对象的遍历

    技术TestComplete中如何使用VBScript脚本实现对容器控件中子对象的遍历这篇文章给大家分享的是有关TestComplete中如何使用VBScript脚本实现对容器控件中子对象的遍历的内容。小编觉得挺实用的,

    攻略 2021年11月1日
  • 大数据总线平台DBus设计思路与工作原理

    技术大数据总线平台DBus设计思路与工作原理大数据总线平台DBus设计思路与工作原理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、背景企

    攻略 2021年12月3日
  • Python是怎么将中文转拼音的

    技术Python是怎么将中文转拼音的这篇文章主要介绍“Python是怎么将中文转拼音的”,在日常操作中,相信很多人在Python是怎么将中文转拼音的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年10月27日
  • nh4电子式,电子式要怎么写,和离子式的区别?

    技术nh4电子式,电子式要怎么写,和离子式的区别?电子式一般针对单个的分子或原子出题,让你写出他们的电子式,即各自外部电子的分布或排布情况nh4电子式。离子式一般用在写离子方程式上,离子即物质溶于水后所形成的粒子,比如说

    生活 2021年10月20日
  • 星期二英语怎么写,星期一到星期天用英文怎么写

    技术星期二英语怎么写,星期一到星期天用英文怎么写Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六

    生活 2021年10月21日
  • 简述ddos的特点及常用手段(技术分享ddos介绍与防御)

    技术怎么使用CMD和工具如何进行DDoS分析怎么使用CMD和工具如何进行DDoS分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。当涉及到安全时,您就注意系

    攻略 2021年12月21日