mysql - 使用外键是否加速表连接

标签 mysql performance join foreign-keys

我认为我的标题非常 self 解释,但我将在下面概述我正在做的事情。

一个人与一个城镇相连。这个镇与一个县相连。县与国家相连。一个国家有很多县。一个县也有很多城镇。话虽如此,很多人可能来自同一个城镇。

在我的数据库中,我有一个单独的表,用于显示人员、城镇、县和国家/地区。为了获得完整的用户记录,我在记录集上对表进行了 LEFT JOIN。这是我作为一个单一的人所做的事情的简化版本,分布在更多的 table 上。使用外键会加快查询的执行速度吗?即使只是速度略有提高或资源使用量减少,我也会感兴趣。

我计划的规模非常大,因此执行时间和资源使用量可能会有用。对于从数据库返回的一个人,我有大约 5-6 个连接用于多个表。

编辑 到目前为止的答案我想指出我正在使用主键和唯一键为每个表编制索引。此外,数据集可能会在一个表(人员)中快速添加多达数百万行,因此性能是关键。

最佳答案

外键不会直接加速查询的执行。它们确实有间接的影响,因为它们保证被引用的列被索引。而索引会对性能产生影响。

正如您描述的问题,所有连接关系都应包括其中一个表的主键。生成的查询应该非常有效地执行。

我不会担心查询有 5 或 6 个连接——除非您有非常大量的数据(不止一个表有数百万行)。或者您处于内存严重受限的环境中。

关于mysql - 使用外键是否加速表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399065/

相关文章:

mysql - 本地主机上的站点速度快,服务器上的速度慢

performance - 只检查一次的语句?Haskell

php - 如何从单个字段中查找超时和超时并将其值提取到 SQL 中的另一个表

mysql - 除了 auto_increment 列之外,还有任何 MySQL 命令可以重复行吗?

c++ - 如何在 C++ 中高效地构建 Python 字典

java - 内部连接上的 Hibernate 选择错误

mysql - 将表 1(外键)中的 2 列连接到表 2(主键) - 如何避免 JOIN BUFFER?

SQL : where vs. 加入中

mysql - 仅当表更新时触发

mysql - 为唯一用户提供多密码的数据库设计