模型 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 方法中找到原因