[英]Slow mysql query with subqueries
我在PHP中遇到此查詢問題。 太慢了,執行完幾分鍾后我無法連接到服務器。 我一直在從主查詢中刪除單獨的子查詢,發現在刪除最后一個內部查詢后,它的工作非常順暢。
表“ 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
)
)
)
我認為您可以更改:
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
至
SELECT s.id_s
FROM u_s
INNER JOIN s ON u_s=id_u=u.id_u
WHERE u_s.id_u = u.id_u
GROUP BY s.id_r
未經測試,因為我試圖將頭纏繞在結構上。
還記得檢查索引。 作為粗略的指導,您應該在“ WHERE”中包含任何內容,並在“ ON”中包含任何索引內容:
u_p.id_u
u_r.id_u
u_s.id_u
s.id_s
測試是否會產生相同的結果-應該更快。
select distinct id_p from u inner join u_p on u.id_u = u_p.id_u and u_p.id_u = '$x' inner join ( select id_r.id_u from u_r where id_r = '$y' union select id_r from s inner join u_s on s.id_u = u_s.id_u where id_r = '$y' ) as subq on u.id_u = subq.id_u
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.