为什么多对多连接如此耗费资源以及如何预测需求与性能

问题描述:

在传统RDBMS中,为什么多对多连接比多对一连接耗费更多资源? 毕竟,不是多对多关系就像两个多对一关系?为什么多对多连接如此耗费资源以及如何预测需求与性能

我正在观察多对多的查询,使用主流计算机的内存为3-4千兆字节时,缓慢流过表中约10至15百万行。 查询多对一的关系,我发现即使有50百万行,也没有减速。

  • 如何预测内存和CPU要求与预期性能的关系? (是否有任何基准可用?)
  • 过去哪个阈值是否值得使用其他解决方案? (MPP或NoSQL的)
+1

如果您想了解如何执行查询,请学会使用'explai'。 –

+0

谢谢@ Gordon-Linoff。 explain指令是否可以预测内存和CPU的需求,并提供许多关于基准的基准? – user1767316

+1

一般来说,是的,但这取决于数据库。 –

在传统的RDBMS,为什么许多一对多加入这么多的资源消耗比多到一个连接?

的SQL FOREIGN KEY(FK)约束成立时列的列表子行值也会出现在别处为UNIQUE NOT NULL(超密钥)。因此,对于引用表中的每一行,引用表中只能有一个匹配行。所以一个FK &其超级键的相等的结果可以在FK表中每行输出最多一行。尽管一般而言,因为JOIN返回可以从满足ON条件的输入行生成的每个可能的行组合,通常可以有更多的行输出。

毕竟,不是多对多的关系就像两个多对一的关系吗?

目前尚不清楚“just like”是什么意思,或者你认为它是什么意思或说明什么是正当的。一个连接不是一个关系。 (A表表示的关系。)

  • 一个人如何预测与预期性能的内存和CPU的要求? (任何可用的标杆?)

许多SQL DBMS中有一个查询规划/优化EXPLAIN命令&别人询问什么样的查询会还是没做或成本。

阅读(逻辑&物理)关系查询优化/实现,通常在任何特定的DBMS中为&。维基百科恰好有a decent article。许多教科书都在线上。

  • 过去哪个阈值是值得使用其他解决方案?(MPP或NoSQL的)

重新NoSQL的搜索我的答案,其中最近期的是:
How to convert an existing relational database to a key-value store?
How does noSQL perform horizontal scaling and how it is more efficient than RDBMS scaling
Reasonable Export of Relational to Non-Relational Data

的RDBMS提供一定的计算complexitiy &优化通用简单查询机会。相对而言,其他系统专业化,某些方面的改进是以牺牲其他方面为代价的。