Выбор и изменение большого количества записей

Доброго дня! Подскажите пожалуйста как правильно построить запрос?! Для примера, требуется поменять 1 на 0 для большого кол-ва записей (~50000). В моём случае это вызывает значительные тормоза, приходится ждать около 15 секунд :mellow:

Или же это нормально?

Мой кусочек кода:


    public function actionDelete($id)

    {

        ...

		$change = MyModel::find()->where(['post_id' => 1 ])->all();

		

		foreach ($change as $change){

			$change->post_id = 0;

			$change->save();

		}

       ...

    }

Простым запросом можно:




\Yii::$app->db->createCommand("UPDATE my_table SET post_id=0 WHERE post_id=1")->execute();



Ваш вариант помимо времени еще и отжирает кучу памяти и процессорных ресурсов.

Если построить запрос в базу нельзя, то данная операция делается с помощью dataReader и обверткой в транзакции(они ускоряют во много сотен раз :) )

Просто супер! Спасибо огромное! Теперь за 1 секунду те же 50к записей изменены! :lol: +1




MyModel::updateAll(['post_id' => 0 ], ['post_id' => 1 ]);



Спасибо, и мне пригодилось.