重处理内部循环-如何优化?

erhoui1w  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(276)

我是新来的php和英语不是我的妈妈,所以对不起提前!
我正在创建一个php(5.6)脚本,cronjob将在每天凌晨3点调用该脚本,并在许可证过期时删除所有用户的数据(数据库和文件)。大约有10个不同的mysql表和400mb的文件和文件夹。
下面是一个简单的示例(伪代码),介绍了它目前的工作原理:

Select all users whose license expired

  While not end of list do

    Remove all files and folders from user i

    Delete all data from table1 where user = i

    Delete all data from table2 where user = i

    ...

    Delete all data from table10 where user = i

    Update data from tableUsers where user = i

  End While

End Select

每天可能会有10-20个用户来处理数据,所以我正在寻找一种方法来优化这个任务。这种处理有什么好的做法或建议吗?例如,将用户列表到一个数组中,释放查询结果并循环数组会有什么不同?
这是一个理论问题,我不需要代码,只需要想法。所以我可以用新的关键字做更多的研究。
谢谢您!

nwlls2ji

nwlls2ji1#

与许多用户和数据库一起工作的一些技巧是,您可以使用where IN 条款,文件在这里找到。基本上,您可以找到要删除的内容的所有用户id,并使用 'WHERE IN(' . implode( ',', $arrayOfUserIds ) . ')' 这将减少为每个循环调用数据库查询的数量。

eiee3dmh

eiee3dmh2#

将引用表1..10中用户的外键添加到tableusers,并在删除时进行级联更新。
这样,如果从tableusers中删除用户,它将自动从Table1..10中删除。
另外,删除许可证过期的所有用户的所有文件和文件夹,然后运行:

delete from tableusers where user in (Select all users whose license expired subquery);

这样,它将在一次查询中删除其许可证过期的所有用户。

相关问题