有没有比在MySQL中连接表更有效的东西?

时间:2010-11-13 11:00:38

标签: mysql join performance self-join

我有一个包含entity-attribute-value结构的表。例如,作为实体,我可以拥有不同的国家。我可以拥有以下属性:“位于”,“有边界”,“大写”。

然后我想找到所有“位于亚洲”和“与俄罗斯接壤”的国家。直接的方法是使用实​​体加入表格,然后使用where来加入表格,然后使用{{1}}。

但是,如果我在实体列中有20行俄罗斯,那么在联合表中我将以20 * 20 = 400行与俄罗斯作为实体。每个国家都是如此。因此,联合表将是巨大的。

使用原始表格提取所有位于亚洲的国家,然后提取所有与俄罗斯接壤的国家,然后使用这两个国家的元素,是否效率更高?

2 个答案:

答案 0 :(得分:1)

您对使用笛卡儿产品感到困惑。在连接中永远不会有更多行,然后在实际数据中,唯一被改变的是 元素/行被采用。

因此,如果您有20个俄罗斯行,则加入的表格永远不会超过20个俄语条目。

您建议使用的操作正是连接所做的操作。只要确保你有适当的索引,让MySQL完成剩下的工作。

答案 1 :(得分:1)

你不应该有大量的记录,所以这应该工作

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'