在MySQL中,我有许多相关的表:


tableA在tableB中有很多行
tableB在tableC中有很多行
tableC在tableD中有很多行


我将需要非常定期地从tableA遍历到tableD,例如在列出tableA中的记录以及tableD中相关记录的计数时。这将导致繁琐的代码和潜在的性能瓶颈。

一种替代方法是在tableD中创建一个引用tableA的FK。严格来说,这将是一个冗余密钥,但是我认为我可以轻松地管理对值的更新(以避免数据完整性问题)。我认为性能改进将是重大的,并且代码将更具可读性。

我要进入这个痛苦的世界吗?还是在其他地方看到过这种模式?我计划给密钥加上标签,因此很显然,这只是为了方便,而不是规范性参考。

最佳答案

这通常不是您要做的。在tableBtableC上使用正确的索引,联接的性能应该足够好。

如果您发现这还不够,那么您应该尝试更多的英勇措施-例如复制外键。在这种情况下,即使在出现任何性能问题之前,我也没有理由过早地优化数据库。

10-06 03:48