我需要更新除前1000条记录之外的表格。我的查询是这样的:
UPDATE tableA
SET price = 100
WHERE price = 200 AND
item_id =12 AND
status NOT IN (1,2,3);
我知道子查询approcah将在这里工作,但我有一个巨大的表,其中200000条记录满足WHERE
条件,并且它正在增长。所以我认为如果我遵循子查询方法,它将不会随着DB的增长而扩展。
此外,我在LIMIT
查询中看到了UPDATE
,但它达到了一定的限制。在我的情况下,它是在一定的偏移后,应更新所有记录。
还可以找到总计数并使用LIMIT指定它。但是COUNT()
查询失败了。
答案 0 :(得分:1)
您可以使用用户定义的变量:
SET @X = (SELECT ID FROM tableA
WHERE price = 200 AND item_id =12 AND status NOT IN (1,2,3)
ORDER BY ID LIMIT 1000,1 );
UPDATE tableA SET price = 100
WHERE price = 200 AND item_id =12 AND status NOT IN (1,2,3)
AND ID>@X;
是的,你需要一些方法来定义“前N行是什么”。用户定义的变量为您提供了更多选项。如果你不能在某些选择查询中有效地做到这一点,你需要考虑如何重做这样的表的一些方法。也许不同的索引方法,拆分表,缓存一些值等等。
答案 1 :(得分:0)
我不确定这是否是一个正确的解决方案,但如果您的表中有一个唯一的ID
列;例如,我们可以说ID
,然后您可以非常轻松地放置谓词WHERE ID > 1000
。这将只考虑第1001位的行,如
UPDATE tableA SET price = 100
WHERE price = 200
AND item_id = 12
AND ID > 1000