我有一個MySQL問題的真正mindbender,我現在認爲沒有答案。請幫助我,你是我唯一的希望!MySQL查詢加入2個表和2個關係表
剝離到基礎,我有兩個表,「人」和「活動」。這兩個表格可能會涉及到兩個不同的關係表:people_activity和entity_activity 我需要對活動表執行一個查詢,以便將人員記錄鏈接到活動記錄基於兩個關係表。
這是我有,但它是對大量數據的大規模慢:
select * from activity
left join peopleactivity on peopleactivity.activityid = activity.activityid
left join entityactivity on entityactivity.activityid = activity.activityid
left join people on (peopleactivity.peopleid = people.peopleid OR
entityactivity.entityid = people.peopleid)
一些更多的注意事項 - 我也試圖創建一個視圖兩個關係表的結果結合起來,而不是加盟人們和活動通過這個觀點。這也適用,但也仍然大量慢
更改關係/ s的工作如何consolodate一個表是一個大難題
我也嘗試了工會樣這一點 -
select * from activity
left join peopleactivity on peopleactivity.activityid = activity.activityid
left join people on (peopleactivity.peopleid = people.peopleid)
union
select * from activity
left join peopleactivity on peopleactivity.activityid = activity.activityid
left join people on (entityactivity.entityid= people.peopleid)
這也適用,但由於其他原因導致我的問題。我真的需要在一個查詢中做到這一點,而不會改變太多的底層。
有沒有人有任何超級驚人的想法,我已經錯過了??!
在第二個查詢(UNION)中,它看起來像是UNIONing兩個相同的查詢。我認爲其中的一個應該涉及'entityactivity'表,而不是'peopleactivity'表。另外,'UNION ALL'運算符可以比'UNION'運算符有更多的性能優勢。 – spencer7593 2012-07-10 21:27:07
每個單獨查詢的性能如何?每個人「大幅減速」還是他們分別「非常快」?對每個查詢進行EXPLAIN,並在組合查詢上回答諸如正在使用哪些索引等問題。有時需要兩個單獨的查詢才行。 – spencer7593 2012-07-10 21:29:59