更新表中的随机行

时间:2014-03-25 23:31:08

标签: mysql sql

我在这里得到了这段代码:

    UPDATE starinformation SET starOwner = -1 WHERE (
SELECT starinformation.starID
ORDER BY RAND( ) 
LIMIT 1
)

我想从表中更新一个随机行,其中包含从该表中提取的信息,并且仅影响1行。

1 个答案:

答案 0 :(得分:0)

这种方法存在很多问题:

  • MySQL不允许将修改外部查询与选择子查询组合以触及同一个表
  • ORDER BY RAND() LIMIT 1是一个主要的性能杀手:它将创建所有行的中间结果 - 即如果你的表包含1个megarows,你将触及它们中的每一个。

我的建议是

  • 总是有一个可排序的单场PK
  • 运行SELECT ROUND(RAND()*COUNT(*)) AS num FROM starinformation,返回$ num
  • 运行UPDATE starinformation SET starOwner = -1 ORDER BY [pk-field] LIMIT $num,1