有什么比 MySQL 中的表连接更高效的方法吗?
-
09-10-2019 - |
题
我有一个具有实体属性值结构的表。举个例子,作为实体我可以有不同的国家。我可以拥有以下属性:“位于”、“与”、“首都”接壤。
然后我想找到所有“位于亚洲”并且“与俄罗斯接壤”的国家。最简单的方法是使用实体将表与其自身连接起来,实体是用于连接的列,然后使用 where
.
但是,如果实体列中有 20 行俄罗斯所在的行,那么在联合表中,我将有 20*20=400 行以俄罗斯为实体。每个国家都是如此。所以,联合表将会很大。
使用原始表提取所有位于亚洲的国家,然后提取所有与俄罗斯接壤的国家,然后使用位于两组国家中的元素,不是更有效吗?
解决方案
您最终不应该拥有大量记录,因此这应该可行
SELECT a.entity,
a.located_in,
a.border
FROM my_table a
WHERE a.border in (SELECT b.entity FROM my_table b WHERE b.entity = 'RUSSIA' )
AND a.located_in = 'ASIA'
其他提示
您对连接与笛卡尔积感到困惑。连接中的行数不可能多于实际数据中的行数,唯一改变的是 哪个 获取元素/行。
因此,如果有 20 个俄语行,则连接生成的表中的俄语条目永远不会超过 20 个。
您建议使用的操作正是联接所做的操作。只需确保您有适当的索引,然后让 MySQL 完成其余的工作。
不隶属于 StackOverflow