【发布时间】: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