MySQL/InnoDB 的外键约束

rya*_*zec 5 mysql innodb foreign-key

我尝试使用 varchar 外键与 int 外键进行一些性能测试,并想知道外键约束如何影响 MySQL 的性能。

我认为它们会在一定程度上影响插入/更新,但是我在测试中不担心这一点。我想知道它们是否会影响 SELECT 语句以及它们是否会影响数据/索引大小?

dte*_*ech 0

SELECT 语句不受 FKC 的影响,因为它们仅在数据更改(UPDATE、DELETE、INSERT 等)时强制执行。

在 MySQL 中,引用的 FK 列需要建立索引(为了性能),因此您可能有额外的索引。但无论哪种方式,您通常都会在 JOIN 中大量使用 FK,因此这是正常的 SELECT/INSERT-DELETE-UDPATE 速度权衡。

然而,在大多数应用程序中,改进的数据完整性保证很大程度上抵消了轻微的性能影响。

  • 实际上,在某些 DBMS 中,SELECT *可能* 会受到 FK 的影响,因为优化器可能会根据 FK 信息删除冗余连接 - 这通常用于提高语句的性能。据我所知,MySQL 还不够聪明,无法进行这样的优化。 (4认同)