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

时间:2017-07-29 10:15:03

标签: sql query-optimization rdbms database-optimization mpp

在传统的RDBMS中, 为什么多对多加入比多对一加入更多的资源消耗? 毕竟,不是多对多的关系就像两个多对一关系一样吗?

我观察到多对多查询在表中使用3-4千兆字节RAM的主流计算机慢慢超过大约10到1千5百万行。 在查询多对一关系时,我观察到即使有50百万行也没有减速。

  • 如何根据预期性能预测内存和CPU要求? (有任何基准可用吗?)
  • 过去哪个阈值值得使用其他解决方案? (MPP或NoSQL)

1 个答案:

答案 0 :(得分:0)

  

在传统的RDBMS中,为什么多对多连接比多对一连接更耗费资源?

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

  

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

不清楚你的意思和#34;就像"或者你认为它如何表明或证明任何事情。加入不是一种关系。 (表格代表一种关系。)

  
      
  • 如何根据预期性能预测内存和CPU要求? (有任何基准可用吗?)
  •   

许多SQL DBMS都有一个查询计划器/优化器EXPLAIN命令&其他人可以询问查询将会做什么或做什么或花费多少。

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

  
      
  • 过去哪个阈值值得使用其他解决方案? (MPP或NoSQL)
  •   
Re 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提供通用的直接查询,具有某些计算复杂性和优点。优化机会。相对而言,其他系统是专门的,某些方面的改进是以牺牲他人为代价的。