【问题标题】:SQL JOIN OPTIMIZATIONSQL 连接优化
【发布时间】:2016-09-27 14:59:35
【问题描述】:

我正在解决一个普遍问题,我只获得了我拥有的多个表的架构定义。

现在我必须通过连接多个表来检索某些列,从而最大限度地减少连接数。

示例:假设我有 3 个表,这是它们所拥有的列的列表。

表1:(1,2,3,4,5), 表2:(5,6,7), 表3:(5,6,7,8)

现在假设我有一个查询,我想要所有列 1、2、3、4、5、6、7、8。

现在我可以加入 表 1、表 2 和表 3表 1 和表 3。在这两种情况下,我都会获得所需的信息,但在其他情况下,连接表 1 和表 3 只需要 1 次连接,而不需要 2 次连接。

我尝试的是一种贪心算法,首先我会考虑具有最大数量的所需列的表,然后消除查询和表之间的公共列(来自查询和表),然后考虑更新的所需列并更新桌子等等。但我想它会很慢。

那么是否有一个通用的算法,或者是否有人可以在这个方向上给我任何提示?

【问题讨论】:

  • 发布的任务在 SQL 域中毫无意义。同一组列名并不能保证相同的内容。

标签: sql algorithm join optimization


【解决方案1】:

首先,不得不提的不是“加入”,而是“联合”。 然后我不得不提一下,如果你想使用贪心算法,你必须先加入最短的2个,因为当你加入一个表2次时,它会是o(n),所以你会有2n个操作做,所以如果 n 越小越好。 除此之外,以下链接可能对您有用: Merging 3 tables/queries using MS Access Union Query

【讨论】:

  • 它只是一个连接,因为我可能使用 2 个连接(我可以在第 5 列连接表 1 和表 2,然后在第 6 列连接表 2 和表 3)或单个连接(表1和第5列的表3)获取所有列1,2,3,4,5,6,7,8
猜你喜欢
  • 2018-10-30
  • 2012-06-28
  • 2018-03-24
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多