使用laravel从大表中删除重复项[关闭]

Posted

技术标签:

【中文标题】使用laravel从大表中删除重复项[关闭]【英文标题】:Remove duplication from big table with laravel [closed] 【发布时间】:2021-02-08 10:21:19 【问题描述】:

我有一个包含 500 万条记录的表,它有重复的行 我想删除重复项。 这是我的代码

$userRoles = Model::groupBy('phone','user_id','name')->get();
$userRolesId = array_column($userRoles ->toArray(), 'id');
Model::whereNotIn('id', $userRolesId )->delete();

URL 存在,但加载五分钟后返回错误。当我尝试将它用于一张小桌子时,它完美无缺。

【问题讨论】:

控制器功能的路由定义了吗?你清除路由缓存了吗? 404与代码无关! Its a page not found error 首先,这意味着它并不是真正的404错误,而是超时错误。运行一个运行 5 分钟或更长时间的脚本?然后在我看来它出现超时错误是正常的。如果您想删除重复项,最好使用控制台命令,并将其拆分为多个运行以删除有限数量的重复项 【参考方案1】:

404 表示你调用的路由在你的应用中不存在,

如果传入请求不匹配路由模式约束,将返回 404 HTTP 响应。 你的代码没问题:-

$userRoles = Model::groupBy('phone','user_id','name')->get();
$userRolesId = array_column($userRoles ->toArray(), 'id');
Model::whereNotIn('id', $userRolesId )->delete();

【讨论】:

网址存在 加载五分钟后返回该错误,我在小桌子上试了一下,效果很好 这意味着您的脚本达到了最大执行时间,$start = microtime(true); $userRoles = Model::groupBy('phone','user_id','name')->get(); $userRolesId = array_column($userRoles ->toArray(), 'id'); dd(微时间(真)-$开始);然后告诉使用结果 你可以在 phpini 中增加执行时间,或者你可以使用惰性收集来帮助你处理大数据(laravel.com/docs/8.x/collections#lazy-collections)或者你可以使用作业批处理(laravel.com/docs/8.x/queues#job-batching) 结果为 291.67524313927 我的执行时间是300

以上是关于使用laravel从大表中删除重复项[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 中的大表中删除重复项的最快过程是啥

从具有 NULL 列的大表中删除重复项,这也需要考虑

InnoDB引擎,从大表中删除多行

从大表中选择非空字段

MySQL - 从大表中选择随机行

MySQL查询优化从大表中获取8-10条记录