2010-11-13 25 views
1

我有一個表與實體屬性值結構。作爲一個例子,作爲實體我可以有不同的國家。我可以具有以下屬性:「位於」,「具有邊界」,「大寫」。有什麼比在MySQL中連接表更有效嗎?

那麼我想找到所有那些「位於亞洲」和「與俄羅斯接壤」的國家。做到這一點的直接方法是使用實​​體加入表格,然後使用where

但是,如果我有20行俄羅斯在實體列中,比在聯合表中我會有20 * 20 = 400行與俄羅斯爲實體。每個國家都是如此。所以,聯合表將變得非常龐大。

使用原始表格提取位於亞洲的所有國家,然後提取所有與俄羅斯接壤的國家,然後使用這兩個國家的這些元素,效率會不會更高?

回答

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' 
1

您在加入笛卡爾產品時感到困惑。在連接中永遠不會有更多的行,然後在實際的數據中,唯一被改變的是,其中元素/行被拍攝。

所以,如果你有20個俄羅斯行,由連接產生的表永遠不會有超過20個俄羅斯條目。

您建議使用的操作與連接完全相同。只要確保你有適當的索引並讓MySQL完成剩下的工作。

相關問題