1

私のホストは、次の SQL クエリがサーバーに過負荷をかけているため、サーバーの実行が遅くなり、アカウントが無効になる恐れがあると主張しています。ボトルネックを見つけることができないようです - 誰でもそれがどこから来たのかを見つけるのを手伝ってくれますか?

データベースで 1 分前に 8 秒間実行 --> mydb_name.

SELECT * FROM tsk_posts 
    LEFT JOIN tsk_term_relationships ON
        (tsk_posts.ID = tsk_term_relationships.object_id) 
    LEFT JOIN tsk_term_taxonomy ON 
        (tsk_term_relationships.term_taxonomy_id = tsk_term_taxonomy.term_taxonomy_id) 
    WHERE 
        tsk_posts.post_status = 'publish' 
    AND 
        tsk_posts.post_type = 'post' 
    AND 
        tsk_term_taxonomy.taxonomy = 'category' 
    AND 
        ( tsk_term_taxonomy.term_id = 4 OR tsk_term_taxonomy.term_id = 103 OR
          tsk_term_taxonomy.term_id = 19 OR tsk_term_taxonomy.term_id = 20 OR 
          tsk_term_taxonomy.term_id = 5 OR tsk_term_taxonomy.term_id = 2 OR 
          tsk_term_taxonomy.term_id = 14 )
    ORDER BY RAND()
    LIMIT 1

どうもありがとうございました。

4

1 に答える 1

2

"order by rand" はかなり高価なクエリになる可能性があります。乱数を生成し、結果セットへのアクセスに使用する必要があります。

各テーブルには何行ありますか? インデックスはありますか?説明計画を実行して、コストがどこにあるかをよりよく理解します。

于 2013-04-25T13:39:06.740 に答える