MySQL外键约束简介

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

MySQL外键约束介绍

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

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

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

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

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

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

作者:小家电维修

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

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

(0)

相关推荐

  • Redis中sentinel故障转移的示例分析

    技术Redis中sentinel故障转移的示例分析这篇文章主要为大家展示了“Redis中sentinel故障转移的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Red

    攻略 2021年10月28日
  • Python解释器种类以及特点是什么

    技术Python解释器种类以及特点是什么这篇文章将为大家详细讲解有关Python解释器种类以及特点是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python解释器是

    攻略 2021年12月4日
  • python安装wxgl库的教程(playwright python 实战)

    技术Python的Playwright怎么安装使用这篇文章主要介绍“Python的Playwright怎么安装使用”,在日常操作中,相信很多人在Python的Playwright怎么安装使用问题上存在疑惑,小编查阅了各式

    攻略 2021年12月17日
  • C语言 存款预算

    技术C语言 存款预算 C语言 存款预算本关任务:编写一个小程序,计算初始时该存入银行多少钱。任务具体描述如下: 假设银行一年整存整取的月息为1.875%,现在某人手头有一笔钱,他打算在今后5年中,每年年

    礼包 2021年11月27日
  • 清除ehcache缓存方法(ehcache分布式缓存怎么清除)

    技术如何使用@CacheEvict清除指定下所有缓存这篇文章将为大家详细讲解有关如何使用@CacheEvict清除指定下所有缓存,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了

    攻略 2021年12月25日
  • 春节放假几天,今年春节放假有什么安排

    技术春节放假几天,今年春节放假有什么安排谢谢邀请春节放假几天,先前安排好的节日出行在防疫要求下让道,但是我也要说出来和大家分享一下不能实现的安排。1、86岁的母亲告诉我,没有坐过白天的飞机,言下之意想坐一次!基于这个想法

    生活 2021年10月27日