2010-04-20 26 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