2011-03-17 12 views
1

データベーステーブルでは、単純な検索クエリの数を減らすために、いくつかの数えられる列を保持しています。たとえば、usersテーブルには、書かれたレビュー数、アップロードされた写真数、友人、フォロワー数などの列があります。これらが同期していることを確認するため、これらのカウント列を定期的にチェックして更新するスクリプトがあります。MySQLの更新クエリの効率を向上させる

問題は、私たちのデータベースが大幅に成長したので、私たちが使っていたクエリは完全に非効率的なので、実行には永遠にかかるということです。それが更新で可能であるならば、これは私だけの参加使用するselect文だったら

update users 
    set photos=(select count(*) 
        from photos 
        where photos.status="A" 
         AND photos.user_id=users.id) 
    where users.status="A"; 

が、私はわからない:私たちは、それが効率だどのように改善できるかをお勧めするために自分自身よりもMySQLの知識を持つ人をいただければ幸いです。

ご協力いただきありがとうございます。

答えて

4

あなたはあなたが

  • (photos.status、photos.user_id)のインデックスを必要とするこの

    UPDATE users u 
         JOIN (SELECT user_id, 
            COUNT(*) AS c 
          FROM photos 
          WHERE status = "A" 
          GROUP BY user_id) pc 
         ON pc.user_id = u.id 
    SET u.photos = pc.c 
    

  • (photos.user_id)
  • (ユーザーのような何かを行うことができます。 id)
+0

これはそのトリックでした。私はあなたがそのようにJOINを使うことができるのか分からなかった。あなたは毎日何か新しいことを学ぶと思います。あなたの助けをありがとう! –

+0

クールな音、良い仕事と投票を続けてください。 – Pentium10

関連する問題