【发布时间】:2012-08-13 20:43:37
【问题描述】:
此查询需要 10 秒才能完成。但是当我手动执行子查询并将t1.id 限制更改为该列表时,它会在 0.00 秒内完成。如何让 MySQL 更快地执行查询?
SELECT t1.col1, t2.col2, t3.col3
FROM t1, t2, t3
WHERE t1.t2id = t2.id AND t1.t3id = t3.id
AND t1.id IN ( SELECT id FROM t4 WHERE blah = 123 )
另外,为什么会这样?我想 MySQL 在过滤 t1.id 之前以某种方式连接了所有三个表。
t1、t2 和 t3 分别包含 3000、15 和 80 行。子查询返回 2-10 行。
【问题讨论】:
-
尝试
explain select ...并使用像inner join ...这样的显式连接 -
@juergend 从评论分数来看你似乎是对的,但使用明确的
INNER JOIN加入 t2 和 t3 似乎没有任何改变。 -
使用
explain查看查询的执行计划。然后你可以看到它在哪里消耗了那么多时间。 -
用 INNER JOIN 连接 t1 和 t2,或 t1 和 t3 不会有任何改变。
FROM t1, t2, t3与使用INNER JOIN相同。 -
@juergend 抱歉,我对此不是很有经验。我可以看到两个部分包含数千行,并且它们在没有键的情况下“使用 where”。我还是不明白为什么会这样。
标签: mysql performance join subquery innodb