我正在查看一个280万个记录表,并试图找到一种方法来有效地随机更新MySQL中10%的记录中标有“ x”的“ Control”列。
一种方法是使用select创建单独的表:
从表顺序中通过rand()选择* * <0.10
,然后通过引用新的较小的表来更新我的原始表,但是我想知道是否存在一种更简单/更快速的方法。
答案 0 :(得分:3)
我会这样:
UPDATE MyTable SET control='x' WHERE RAND() < 0.10;
在大约10%的行中,WHERE子句中的条件为true。
这样,您无需复制表格。
顺便说一句,使用SELECT并不是必需的,因为您可以就地更新表的10%,但是对于它的价值而言,您在问题中提出的SELECT并不会像您想的那样。您可能认为它可以完成以下操作:
SELECT * FROM MyTable WHERE RAND() < 0.10;
或者:
SELECT * FROM MyTable ORDER BY RAND() LIMIT ?
其中参数是等于表中行数的1/10的数字。