gpt4 book ai didi

mysql - Laravel 多次更新慢

转载 作者:行者123 更新时间:2023-11-29 05:03:26 25 4
gpt4 key购买 nike

我有一个 laravel 5.6 应用程序,它在页面上列出项目,同时收集 View 。生成页面平均需要 8 秒。

表项

CREATE TABLE IF NOT EXISTS items (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
views INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;

表 items_daily_views

CREATE TABLE IF NOT EXISTS items_daily_views (
id INT AUTO_INCREMENT,
item_id INT NOT NULL,
date DATE NOT NULL,
views INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;

模型项目

class Item extends Model{
protected $table='items';
}

模型 ItemDailyViews

class ItemDailyViews extends Model{
protected $table='items_daily_views';
}

HomeController.php

$itemList = Item::orderBy('id','desc')->take(100)->get();
foreach($itemList as $item){
//increment to items
$each=Item::find($item->id);
$each->increment('views');

//increment to items_daily_views
$each=ItemDailyViews::updateOrCreate(
['item_id'=>$item->id,
'date'=>Carbon::now()->format('Y-m-d')]
);
$each->increment('views');
}

return view('home',['itemList',$itemList]);

此页面有大约 200 个更新查询,生成时间为 8 秒。这个应用程序的前一个版本使用没有 laravel 的纯 PHP,并且使用大约 10 毫秒来生成(也显着减少 RAM)。我必须做错事。请帮忙。谢谢!

最佳答案

试试这个:

$itemList = Item::orderBy('id','desc')->take(100)->get();
foreach($itemList as &$item){ // pass by reference since you are modifying within foreach
//increment to items
$item->increment('views');

//increment to items_daily_views
$dailyViews = ItemDailyViews::firstOrCreate(
['item_id'=>$item->id,
'date'=>Carbon::now()->format('Y-m-d')]
);
$dailyViews->increment('views');
}

return view('home',['itemList',$itemList]);

关于mysql - Laravel 多次更新慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53362253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com