【问题标题】:Is there something more efficient than joining tables in MySQL?有没有比在 MySQL 中加入表更有效的方法?
【发布时间】:2010-11-13 11:00:38
【问题描述】:

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

然后我想找到所有“位于亚洲”和“与俄罗斯接壤”的国家。直接的方法是使用实​​体将表与自身连接起来,然后使用 where 连接列。

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

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

【问题讨论】:

    标签: mysql join performance self-join


    【解决方案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'
    

    【讨论】:

      【解决方案2】:

      您将 join 与笛卡尔积混淆了。连接中的行数永远不会超过实际数据中的行数,唯一被更改的是 采用了哪些元素/行。

      因此,如果您有 20 个俄语行,则连接生成的表永远不会有超过 20 个俄语条目。

      您建议使用的操作正是连接的作用。只需确保您有适当的索引,然后让 MySQL 完成其余的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        相关资源
        最近更新 更多