我有以下SQL查詢運行相當好,但它似乎停滯時,返回60,000-70,000行的類別。我希望得到關於如何優化這個的技巧,無論是服務器端還是代碼本身,都可以儘可能快地運行。雖然它通常會被緩存,但是這個語句將在每天有100,000次命中的網絡上使用,並且我需要它平滑或至少完成查詢執行。優化join/union sql?
SELECT * FROM
(
(
SELECT DISTINCT
vc.category_id, t.tube_title, v.*, COUNT(vc.video_id) AS total_clicks
FROM video_click vc
JOIN tube t ON vc.tube_id = t.tube_id
JOIN video v ON v.video_id = vc.video_id
WHERE
vc.time >= 1313153417
AND
vc.category_id = 123
GROUP BY vc.video_id
)
UNION
(
SELECT DISTINCT
vd.category_id, t.tube_title, v.*, COUNT(NULL) as total_clicks
FROM
video_data vd
JOIN tube t ON vd.tube_id = t.tube_id
JOIN video v ON v.video_id = vd.video_id
WHERE
vd.category_id = 123
GROUP BY vd.video_id
)
) AS final_video
GROUP BY final_video.video_id
ORDER BY total_clicks DESC
我欣賞任何提示或幫助,讓上述運行在較大的數據庫選擇。 謝謝!
一個提示:我認爲DISTINCT是一個昂貴的限定符,因爲在GROUP BY數據集返回後它是一個單獨的操作。您可能會更好地設計您的表,以便GROUP BY只有一個返回值(如果您能夠)。 – Pete855217
發佈EXPLAIN的輸出總是值得的。 –