0
我在控制器這樣的方法,即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
字段本身會立即更新,因爲對錶格的查詢會立即顯示更改。 但是,save
方法繼續工作很長一段時間。
status
字段定義爲TINYINT(1)NULL DEFAULT 0 並且沒有任何索引。
也許創建索引是爲了幫助解決它?
MySQL數據庫,InnoDB。在表中78701行。
更新時間:
我發現了以下內容。 在updateInternal
的末尾緩慢地運行afterSave
方法調用。 但是在調用這行之前,腳本會很快執行。 慢慢地打電話afterSave
本身,而不是afterSave
方法中的代碼而不是afterSave
之前的代碼調用 爲什麼會發生這種情況?
mmmm ...這只是一個嘗試,但它會改變任何東西,如果你保存傳遞false,像這樣$ news-> save(false)?也許你的驗證規則非常複雜,需要很長時間才能執行...... – Masiorama
@Masiorama不,它沒有任何作用。 –
你確定是保存方法而不是緩存重置? – scaisEdge