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