2014-02-08 31 views
0

MySQL查詢時間超過1天,如何speet起來:MySQL查詢需要1天以上

update posts set category_id = (
    SELECT keyword_id 
    FROM post_keywords 
    where keyword_id IN (
     SELECT keyword_id 
     FROM post_keywords 
     where id_post = posts.id_post) 
    group by keyword_id 
    order by count(keyword_id) DESC 
    limit 0,1 
); 

任何解決方案?

+1

解釋計劃 - 突破所有較小的選擇並單獨測試 - 添加索引 – Randy

+0

表post_keywords的行數有多少? – sdespont

+0

你有關於keyword_id和id_post的索引嗎? – sdespont

回答

2

這不完全是一回事,但結果仍然是你想要的那樣。我主要好奇如何(IF !?)這可能會影響性能。

UPDATE posts 
    SET category_id = (
         SELECT pkw.keyword_id 
          FROM post_keywords pkw 
          JOIN (
            SELECT keyword_id, cnt = COUNT(*) 
             FROM post_keywords 
            GROUP BY keyword_id) cnts 
          ON cnts.keyword_id = pkw.keyword_id 
         WHERE pkw.id_post = posts.id_post 
         ORDER BY cnt DESC 
         LIMIT 0,1 

        ) 
+0

謝謝,我會試試:) – saad

+0

它就像一個魅力,謝謝@deroby – saad

+0

嗯,我想它只需要做一次聚合現在。我不知道mysql如何處理這個問題,但似乎按預期工作。無論如何,如果您認爲這可以解決您的問題,請不要忘記關閉該問題。祝你好運。 – deroby