0
我有以下查詢其中MySQL的左連接優化
- A具有1個000 000行
- B,C,d爲150 000行,每行
- E具有50個000行
查詢本身似乎需要大約50秒才能完成。它通常會包含一個WHERE子句,因爲它正在搜索數據庫中的所有可能數據。有什麼辦法可以改進?
SELECT A.one, A.two, A.three
FROM A
LEFT JOIN B ON (A.id = B.id)
LEFT JOIN C ON (A.id = C.d)
LEFT JOIN D ON (A.id = D.id)
LEFT JOIN E ON (A.name = E.name
AND E.date <= A.date)
ORDER BY A.id ASC
解釋查詢:
+----+-------------+-------+--------+---------------+----------+---------+-----------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+----------+---------+-----------+--------+-------------+
| 1 | SIMPLE | A | index | NULL | PRIMARY | 17 | NULL | 357752 | |
| 1 | SIMPLE | B | eq_ref | PRIMARY | PRIMARY | 17 | db.A.id | 1 | Using index |
| 1 | SIMPLE | C | eq_ref | PRIMARY | PRIMARY | 17 | db.A.id | 1 | Using index |
| 1 | SIMPLE | D | eq_ref | PRIMARY | PRIMARY | 17 | db.A.id | 1 | Using index |
| 1 | SIMPLE | E | ref | Name,Date | Name | 62 | db.A.name | 1 | |
+----+-------------+-------+--------+---------------+----------+---------+-----------+--------+-------------+
它通常包含哪些WHERE子句?而且 - 你預計B,C,D和E每個行有多少行,每行A *有*? – ruakh
你可以嘗試只加入表A和E,看看需要多長時間?也許字符串匹配會讓事情變得緩慢。 – Atle