2010-04-20 27 views
1

很慢我有2個表: 1.新聞(450K行) 2. news_tags(3M行)2K行上的更新是在MySQL

上有哪些更新的房源信息表更新一些觸發器。此SQL執行時間太長...

UPDATE news 
SET news_category = some_number 
WHERE news_id IN (SELECT news_id 
        FROM news_tags 
        WHERE tag_id = some_number); #about 3k rows 

我該如何讓它更快?

由於提前, S.

+0

請定義「慢」。什麼太久了?執行計劃的外觀如何?發現要更新的數據時出現問題(tag_id未編入索引),或者由於可能已死的緩慢觸發器而導致執行中的問題?你是CPU還是IO限制? – TomTom 2010-04-20 10:06:43

+0

這是生產數據庫的一次更新,需要超過5分鐘。我們的Web應用程序在執行查詢時返回504錯誤... SELECT news_id FROM news WHERE news_id IN(SELECT news_id FROM news_tags WHERE tag_id = some_number)需要1.04秒。所以問題在於觸發器,但我不能禁用它們。 – sergeik 2010-04-20 11:28:13

回答

0

如果這是一次更新,你會發現它更好地禁用觸發器,運行更新,然後運行執行你的觸發器散裝做一個聲明。

+0

喜羅賓, 是的,這是一次更新,但我必須更新生產分貝。因此,禁用觸發器是不可能的...... – sergeik 2010-04-20 11:17:44

+0

如果您禁用觸發器,運行更新,然後在事務中啓用所有觸發器,那麼表將被鎖定,並且不允許其他查詢運行。這假定它運行得足夠快,這是可能的。 – 2010-04-20 11:21:37

+0

我們決定只更新40行:)感謝您的幫助。 – sergeik 2010-04-20 13:16:38