我想加入一個表中的數據的子集與另一個表中的數據(下面的例子),並從性能的角度來看,我想知道什麼是最好的方式來做到這一點,什麼是最可擴展的。加入何處數據,或放在where子句中?
表我想加入這個樣子的(其它表已經在查詢)。
vid kid uid 1 34 12 1 34 15 2 22 18 2 34 18 2 22 15
我的查詢是這樣的
SELECT * FROM similar RIGHT OUTER JOIN(SELECT event.stuff, eventdate.stuffshows FROM events JOIN evendate ON events.eid=eventdate.eid WHERE location= 'Paris' AND event.date BETWEEN '2009-08-14' AND '2009-08-17' GROUP BY event.date ORDER BY event.date LIMIT 0 , 5 ) mystuff ON event.bid = similar.id AND event.date=similar.date
我想我可以把它變成
SELECT * FROM similar RIGHT OUTER JOIN(SELECT event.stuff, eventdate.stuffshows FROM events JOIN evendate ON events.eid=eventdate.eid WHERE user.vid=events.vid AND user.uid=15 AND user.kid=22 location= 'Paris' AND event.date BETWEEN '2009-08-14' AND '2009-08-17' GROUP BY event.date ORDER BY event.date LIMIT 0 , 5 ) mystuff ON event.bid = similar.id AND event.date=similar.date
我擔心的是,我有點混合使用其中一個連接。性能是否值得爲user.vid = events.vid設置第二個JOIN?或者做一個WHERE而不是一個連接更好?
對此有何建議?
pedalpete:我有點被你最後一個WHERE子句拋出(event.date = similar.date)。我建議您將該語句移到OUTER JOIN條件或子查詢本身。就目前而言,event.date不應該對外部查詢可見。 – 2009-09-21 18:20:16