如果提高多对多关联的速度;syncWithoutDetaching 要十秒钟才执行一次,而且cpu占用过高

歌手大约100W个,每次我获得1W个;我设置断点调试 执行syncWithoutDetaching 的前后相差10秒;于是我同时开了四个终端运行,结果cpu直接100%了;效率很慢;

 foreach (Singer::where("id", ">=", 1,)->where('id', '<', 9999)->get() as $singer) {
            $similarApi = Http::get('http://www.baidu.com/' . $singer->mid)->json();
            foreach ($similarApi['data'] as $item) {

                //查询是否已存在歌手 如果存在就关联 
                $checkSinger = Singer::where('did', $item['did'])->first();
                if ($checkSinger) {
                    $singer->similar()->syncWithoutDetaching($checkSinger->id);
                } else {
                    //不存在该歌手 跳过
                }
            }
        }
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

orm很多地方都无法兼顾性能,laravel的orm使命是提高开发效率并不是运行效率,建议你查看日志执行的SQL。

3年前 评论
李小明 (楼主) 2年前
讨论数量: 3

orm很多地方都无法兼顾性能,laravel的orm使命是提高开发效率并不是运行效率,建议你查看日志执行的SQL。

3年前 评论
李小明 (楼主) 2年前

建议打 log 看看慢在哪里吧, 这么多 sync request 不慢才怪..

3年前 评论

关掉db log试试,内存高很可能时这个内鬼

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!