0

我需要有关如何更快地进行此类查询的建议的帮助

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 上放置了索引,但它仍然很慢

4

2 回答 2

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)
于 2013-04-18T09:46:23.950 回答
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)
于 2013-04-18T09:50:53.827 回答