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 に答える