尝试快速选择并更新相同的行

时间:2010-05-30 17:44:45

标签: php mysql

我有一个非常频繁更新的MySQL表。本质上,我试图同时使用多个PHP脚本获取500行,并且我不希望PHP脚本获取相同的行。我不使用ORDER BY RAND(),因为它的服务器负载有数千行。

所以,我想简单地让每个脚本将每一行的状态设置为“1”(因此不会再次抓取)。所以,我想获取500行,其中status = 0(我使用asc的SELECT顺序),然​​后将那些确切的500行设置为状态“1”,这样另一个脚本就不会抓住那些。

由于表一直在更新,我不能按asc顺序选择500行,然后按asc行更新500行,因为在启动脚本并执行SELECT时需要更多行加入。

因此,我需要一种方法来选择500行,然后以某种方式“记住”我选择的行并更新它们。

如何像我描述的那样快速进行SELECT和UPDATE?

1 个答案:

答案 0 :(得分:0)

为每个脚本生成一个唯一的ID(只是一个随机整数通常可以用于这些目的)。

从每个进程运行UPDATE table SET status = <my random id> WHERE status = 0 LIMIT 500查询。

然后让每个进程运行SELECT ... FROM table WHERE status = <my random id>以实际获取行。

实质上,您将行“锁定”到当前脚本首先,然后检索已成功锁定的行。