1

entity-attribute-value構造のテーブルがあります。例として、エンティティとして私はさまざまな国を持つことができます。私は次の属性を持つことができます:「に位置する」、「と国境を接している」、「首都」。

次に、「アジアに位置し」、「ロシアと国境を接している」国をすべて見つけたいと思います。これを行う簡単な方法は、エンティティを使用してテーブルをそれ自体と結合することです。これは、結合してからを使用するための列ですwhere

ただし、エンティティ列にロシアが含まれる20行がある場合、ジョイントテーブルよりも、ロシアをエンティティとして20 * 20=400行になります。そして、それはすべての国に当てはまります。だから、ジョイントテーブルは巨大になるでしょう。

元の表を使用してアジアにあるすべての国を抽出し、次にロシアと国境を接しているすべての国を抽出してから、両方の国にある要素を使用する方が効率的ではないでしょうか。

4

2 に答える 2

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'
于 2010-11-13T11:16:28.000 に答える
1

デカルト積との結合を混乱させています。結合には実際のデータよりも多くの行が存在することはありません。変更されるのは、どの要素/行が取得されるかだけです。

したがって、ロシア語の行が20行ある場合、結合の結果のテーブルに20を超えるロシア語のエントリを含めることはできません。

使用を提案する操作は、まさに結合が行うことです。適切なインデックスがあることを確認し、残りはMySQLに任せてください。

于 2010-11-13T11:13:10.050 に答える