在MYSQL中更新表的10%

时间:2018-07-11 16:28:09

标签: mysql sql

我正在查看一个280万个记录表,并试图找到一种方法来有效地随机更新MySQL中10%的记录中标有“ x”的“ Control”列。

一种方法是使用select创建单独的表:

  

从表顺序中通过rand()选择* * <0.10

,然后通过引用新的较小的表来更新我的原始表,但是我想知道是否存在一种更简单/更快速的方法。

1 个答案:

答案 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的数字。