繁体   English   中英

更新表中的随机行

[英]update a random row from a table

我在这里有此代码:

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

我想使用从该表中提取的信息更新表中的随机行,并且仅影响1行。

这种方法有很多问题:

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

我的建议是

  • 始终具有可排序的单字段PK
  • SELECT ROUND(RAND()*COUNT(*)) AS num FROM starinformation运行SELECT ROUND(RAND()*COUNT(*)) AS num FROM starinformation ,返回$ num
  • 运行UPDATE starinformation SET starOwner = -1 ORDER BY [pk-field] LIMIT $num,1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM