我有一个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