我有一个非常频繁更新的MySQL表。本质上,我试图同时使用多个PHP脚本获取500行,并且我不希望PHP脚本获取相同的行。我不使用ORDER BY RAND(),因为它的服务器负载有数千行。
所以,我想简单地让每个脚本将每一行的状态设置为“1”(因此不会再次抓取)。所以,我想获取500行,其中status = 0(我使用asc的SELECT顺序),然后将那些确切的500行设置为状态“1”,这样另一个脚本就不会抓住那些。
由于表一直在更新,我不能按asc顺序选择500行,然后按asc行更新500行,因为在启动脚本并执行SELECT时需要更多行加入。
因此,我需要一种方法来选择500行,然后以某种方式“记住”我选择的行并更新它们。
如何像我描述的那样快速进行SELECT和UPDATE?
答案 0 :(得分:0)
为每个脚本生成一个唯一的ID(只是一个随机整数通常可以用于这些目的)。
从每个进程运行UPDATE table SET status = <my random id> WHERE status = 0 LIMIT 500
查询。
然后让每个进程运行SELECT ... FROM table WHERE status = <my random id>
以实际获取行。
实质上,您将行“锁定”到当前脚本首先,然后检索已成功锁定的行。