私は3つのテーブルを持っています:
表 1 :
id | name
1 | joe
2 | peter
3 | sandra
表 2 :
id | fkId | date_updated
1 | 1 | 2013-01-31
2 | 1 | 2013-04-01
3 | 2 | 2013-02-04
4 | 2 | 2013-01-02
表3 :
id | fkId | date_updated
1 | 1 | 2013-01-31
2 | 3 | 2013-04-01
3 | 3 | 2013-02-04
4 | 2 | 2013-01-02
私は次のものを持っています:
SELECT *
FROM
table1
LEFT OUTER JOIN
table2 ON table1.id = table2.fkId
LEFT OUTER JOIN
table3 ON table1.id = table3.fkId
GROUP BY
table1.id
HAVING
table2.date_updated = max(table2.date_updated)
AND table3.date_updated = max(table3.date_updated)
私の出力は次のようになります。
name | table2 | table3
joe | 2013-04-01 | 2013-01-31
peter | 2013-02-04 | 2013-01-02
sandra| | 2013-04-01
必要なデータを取得しましたが、このクエリは時間がかかりすぎます。テーブル インデックスを変更せずに最適化する方法はありますか?
指摘事項:
table2 と table3 は同じテーブルではありません。
日付だけでなく、table2 と table3 から "last_updated" だった行全体を取得する必要があります。
編集 **
WHERE table1.id = id
を使用して単一のレコードを返す場合、クエリは約 3 ~ 4 秒かかります。
Table1 には ~ 84000 のレコードがあります
Table2 には ~ 96000 のレコードがあります
Table3 には ~ 81000 のレコードがあります