我在PHP中遇到这个查询的问题。速度太慢,执行后几分钟无法连接到服务器。我一直在从主查询中移除单独的子查询,并发现它在完成最后一个内部查询后非常顺利。缓慢的子查询mysql查询
表“u”有30.000行,表“u_r”在17.000左右,表“u_s”在13.000左右,表“s”在100左右。即使表“u_r”和“u_s”有很多行,只有2 -3行具有与条件匹配的相同“id_u”。
我希望,我提供了足够的信息。如果您需要了解其他信息,请随时在评论中提问。
SELECT DISTINCT id_p
FROM u
WHERE
'$x' IN(
SELECT id_p
FROM u_p
WHERE id_u=u.id_u
)
AND
(
'$y' IN (
SELECT id_r
FROM u_r
WHERE id_u=u.id_u
)
OR
'$y' IN (
SELECT DISTINCT id_r
FROM s
WHERE id_s IN (
SELECT id_s //without this query, everything works fine
FROM u_s
WHERE id_u=u.id_u
)
)
)
不使用IN,它的缓慢。因为IN不使用JOIN语法对结果进行索引。 – jtheman
这只是一个猜测,但看起来像嵌套子查询,所以这势必会让事情变得更慢。这意味着每行都运行“$ y”的子查询,然后针对“$ y”的子查询的每个结果运行子子查询。也许你应该在查询上运行解释,看看发生了什么 – Gohn67
我不清楚你的查询想要做什么。但也许你不需要所有这些子查询,并可以使用连接? – Gohn67