MySQL外键约束简介

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

MySQL外键约束介绍

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

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

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

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

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

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

作者:小家电维修

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

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

(0)

相关推荐

  • 在Linux下加密授权无效的问题怎么排查

    技术在Linux下加密授权无效的问题怎么排查本篇内容主要讲解“在Linux下加密授权无效的问题怎么排查”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在Linux下加密授权无效

    攻略 2021年11月23日
  • 小字加偏旁,“少”字可以加什么偏旁

    技术小字加偏旁,“少”字可以加什么偏旁一小字加偏旁、加禾字旁,秒。miǎo 
    1、谷物种子壳上的芒,引申为细微,微小:~忽(喻细微)。 
    2、时间的计算单位,一分钟的六十分之一:~表。~针。 
    3、弧和角的计算单位

    生活 2021年10月30日
  • XamarinAndroid组件中RecylerView适配器如何使用动画

    技术XamarinAndroid组件中RecylerView适配器如何使用动画这篇文章主要介绍XamarinAndroid组件中RecylerView适配器如何使用动画,文中介绍的非常详细,具有一定的参考价值,感兴趣的小

    攻略 2021年12月3日
  • 体育模拟

    技术体育模拟 体育模拟import randomdef printInfo(): print("模拟体育竞技") print("学号后两位:26,曾俊谌")
    def getInputs():

    礼包 2021年11月14日
  • Mybatis @select like传值问题是怎样的

    技术Mybatis @select like传值问题是怎样的这篇文章给大家介绍Mybatis @select like传值问题是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。巧用CONCAT拼

    攻略 2021年10月20日
  • vue缓存使用方法(vue项目中什么时候用到缓存)

    技术vue的缓存实现方式有哪些这篇文章主要讲解了“vue的缓存实现方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的缓存实现方式有哪些”吧!

    攻略 2021年12月22日