SELECT i.*, i.id IN (
SELECT id
FROM w
WHERE w.status='active') AS wish
FROM i
INNER JOIN r ON i.id=r.id
WHERE r.member_id=1 && r.status='active'
ORDER BY wish DESC
LIMIT 0,50
這是我試圖運行的查詢。它不能很好地擴展,我想知道這裏有人能告訴我我能在哪裏改進。我不加入到r和我,因爲我需要顯示我在w中沒有代表的行。我嘗試了左連接,但是表現不佳。這樣比較好,但並不理想。所有三張桌子都非常大。所有這三個都在我加入並選擇的字段上編制索引。需要涉及多個表的SQL查詢幫助 - 不加入選項
任何評論,指針或建設性的批評將不勝感激。
編輯加法:
我應該把它放在我原來的問題。這是SQLYog返回的EXPLAIN。
id|select_type |table|type |possible_keys|key |key_len|ref |rows|Extra|
1 |PRIMARY |r |ref |member_id,id |member_id|3 |const|3120|Using where; Using temporary; Using filesort
1 |PRIMARY |i |eq_ref |id |id |8 |r.id |1 |
2 |DEPENDENT SUBQUERY|w |index_subquery|id,status |id |8 |func |8 |Using where
編輯樂dorfier - 更多評論...
我應該指出,用W鍵是(member_id,ID)。所以每個id可以在w中存在多次,我只想知道它是否存在。
-1用於請求優化幫助而不發佈表的DDL或查詢的EXPLAIN計劃。 – 2009-02-03 23:24:37