代码之家  ›  专栏  ›  技术社区  ›  Roman

有没有比在MySQL中加入表更有效的方法?

  •  1
  • Roman  · 技术社区  · 14 年前

    我有一个具有实体属性值结构的表。例如,作为实体,我可以拥有不同的国家。我可以有以下属性:“位于”、“有边框”、“大写”。

    然后我想找到那些“位于亚洲”和“与俄罗斯接壤”的国家。要做到这一点,最简单的方法是使用实体将表与其自身连接起来,这是用于连接的列,然后使用 where

    但是,如果我在实体列中有20行,而不是在联合表中,我将有20*20=400行,其中俄罗斯是实体。每个国家都是如此。所以,联合桌会很大。

    使用原始表格提取所有亚洲国家,然后提取所有与俄罗斯接壤的国家,然后使用这两组国家中的元素,这不是更有效吗?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Zack Bloom    11 年前

    你不应该最终拥有大量的记录,所以这应该有效。

    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'
    
        2
  •  1
  •   Zack Bloom    14 年前

    您会混淆笛卡尔积的连接。在联接中永远不会有比实际数据更多的行,唯一要更改的是 哪一个 获取元素/行。

    因此,如果您有20个俄语行,那么由join生成的表中的俄语条目永远不会超过20个。

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