Mysql Select查询非常慢,有时会挂起数据库

Mysql Select查询非常慢,有时会挂起数据库,mysql,sql,Mysql,Sql,我需要帮助,就如何更快地提出这样的问题提出建议 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))

我需要帮助,就如何更快地提出这样的问题提出建议

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\u id上放置了索引,并在上创建了索引,但仍然很慢

我怀疑问题在于索引(上面关于进行解释的评论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)

怀疑问题在于索引(上面关于进行解释的注释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)
这应该更好。 子选择往往非常缓慢

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)
这应该更好。 子选择往往非常缓慢

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)

在以这种方式前缀的控制台中运行查询
\W;解释..
中的扩展选择计数(distinct tweet\u id)计数并粘贴它的输出heredintinc在子查询中是冗余的确保您在in\u reply\u to\u status\u id上有索引,忘记在in\u reply\u to\u status\u id上添加索引。我同意,子查询中的distinct是冗余的。它现在像魔术一样快速工作。感谢您在控制台中以这种方式运行您的查询
\W;解释..
中的扩展选择计数(distinct tweet\u id)计数并粘贴它的输出heredintinc在子查询中是冗余的确保您在in\u reply\u to\u status\u id上有索引,忘记在in\u reply\u to\u status\u id上添加索引。我同意,子查询中的distinct是冗余的。它现在像魔术一样快速工作。谢谢,汉克斯,我来看看这张牙床,我也来看看这张