2012-09-27 242 views
1

我必须创建一个MySQL查询了大量的查询(约150,000)更新MySQL查询优化

眼下的查询是:

UPDATE table SET activated=NULL 
WHERE (
     id=XXXX 
    OR id=YYYY 
    OR id=ZZZZ 
    OR id=... 
    ... 
) 
AND activated IS NOT NULL 

你知道做一个最好的方法那好吗?

+0

哪里有ID的距离,它是用户驱动或数据驱动的未来? – jTC

+1

数据驱动,为什么它很重要? – ke20

+0

因为不是有一个巨大的或构造函数,你可以做更新[表]设置激活= null从[表]吨加入myIDs我对i.id = t.id这将比运行一个语句快很多数百条记录上有数百条或条件。 – jTC

回答

3

如果您在谈论数以千计的项目,IN子句可能不起作用。在这种情况下,你将要插入的项目到一个临时表,然后它加入了更新,像这样:

UPDATE table tb 
JOIN temptable ids ON ids.id = tb.id 
SET tb.activated = NULL 
1
UPDATE table 
SET activated = NULL 
WHERE id in ('XXXX', 'YYYY', 'zzzz') 
AND activated IS NOT NULL