我在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