2011-03-17 168 views
1

在我們的數據庫表中,我們保留了許多計數列,以幫助減少簡單查詢查詢的數量。例如,在我們的用戶表中,我們列出了撰寫的評論數量,上傳的照片,朋友,關注者等。爲了確保這些數據保持同步,我們有一個腳本定期運行以檢查和更新這些計數列。提高MySQL更新查詢效率

現在的問題是,現在我們的數據庫已經大大增加了,我們一直在使用的查詢是永遠運行的,因爲它們完全沒有效率。我希望有人更MySQL的知識比我建議我們怎樣才能提高它的效率:

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

如果這是一個select語句我只想用一個連接,但我不知道這是可能的更新。

在此先感謝您的幫助!

回答

4

你可以做這樣的事情

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.status,photos.user_id)指標
  • (photos.user_id)
  • (用戶。 ID)
+0

這樣做的伎倆。我不知道你可以用這種方式使用JOIN。我想你每天都會學到新的東西。非常感謝你的幫助! – 2011-03-17 16:48:06

+0

聽起來很酷,保持良好的工作和投票。 – Pentium10 2011-03-17 16:53:46