我有以下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的输出总是值得的。 –