我需要有关如何更快地进行此类查询的建议
SELECT count(distinct tweet_id) count
FROM tweets
WHERE tweet_id NOT IN
(
SELECT distinct in_reply_to_status_id
FROM tweets_response
WHERE created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR))
AND created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR
)
我在tweet_id和created_at上放置索引,但它仍然很慢
答案 0 :(得分:3)
怀疑问题是索引(以及关于做解释的上述注释是100%正确的),但是不需要使用子选择。您的查询可以重写为: -
SELECT count(distinct tweet_id) `count`
FROM tweets
LEFT OUTER JOIN tweets_response
ON tweets.tweet_id = tweets_response.in_reply_to_status_id AND tweets_response.created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR)
WHERE tweets_response.in_reply_to_status_id IS NULL
AND tweets.created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR)
答案 1 :(得分:0)
这应该更好。 子选择往往很慢。
SELECT count(distinct tweet_id)
FROM tweets twt
LEFT OUTER JOIN tweets_response tr
ON twt.tweet_id = tr.in_reply_to_status_id
WHERE tr.in_reply_to_status_id IS NULL and (tr.created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR))
AND tr.created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR)