模型 class 的 "save" 方法工作时间很长
The "save" method of model class works very long
我在控制器中有这样的方法,可以简单地将 status
字段的值设置为 0 或 1。
public function actionNews_status($id,$status){
$status = ($status==1)?1:0;
$number = false;
$news = News::findOne($id);
if(!is_null($news)){
$news->status = $status;
$number = $news->save();
Redis::rset($CACHE_mat, null);
}
return json_encode(['status'=>$number]);
}
事实证明,该方法的工作时间约为 20 秒。
我发现 $number = $news->save();
行运行缓慢。
我在这一行前后用 exit
检查了这一点。
我还发现 status
字段本身会立即更新,因为对 table 的查询会立即显示更改。
但是 save
方法在那之后继续工作了很长时间。
status
字段定义为 TINYINT(1) NULL DEFAULT 0
并且没有任何索引。
也许创建索引是为了帮助修复它?
MySQL 数据库,InnoDB。在 table 78701 行中。
更新:
我发现了以下内容。
慢慢地运行 afterSave
方法调用结束updateInternal
。
但是在这个调用行之前,脚本被快速执行。
慢慢地调用 afterSave
本身,而不是 afterSave
方法内部的代码,而不是 afterSave
调用之前的代码
为什么会发生这种情况?
问题已解决。在模型 class.
中的重写 afterSave
方法中找到原因
我在控制器中有这样的方法,可以简单地将 status
字段的值设置为 0 或 1。
public function actionNews_status($id,$status){
$status = ($status==1)?1:0;
$number = false;
$news = News::findOne($id);
if(!is_null($news)){
$news->status = $status;
$number = $news->save();
Redis::rset($CACHE_mat, null);
}
return json_encode(['status'=>$number]);
}
事实证明,该方法的工作时间约为 20 秒。
我发现 $number = $news->save();
行运行缓慢。
我在这一行前后用 exit
检查了这一点。
我还发现 status
字段本身会立即更新,因为对 table 的查询会立即显示更改。
但是 save
方法在那之后继续工作了很长时间。
status
字段定义为 TINYINT(1) NULL DEFAULT 0
并且没有任何索引。
也许创建索引是为了帮助修复它?
MySQL 数据库,InnoDB。在 table 78701 行中。
更新:
我发现了以下内容。
慢慢地运行 afterSave
方法调用结束updateInternal
。
但是在这个调用行之前,脚本被快速执行。
慢慢地调用 afterSave
本身,而不是 afterSave
方法内部的代码,而不是 afterSave
调用之前的代码
为什么会发生这种情况?
问题已解决。在模型 class.
中的重写afterSave
方法中找到原因