Реализовал через
LOAD DATA INFILE, но c потреблением памяти стало еще хуже.
Теперь на 50000 строк приходится столько же, как раньше на 250000.
Код:
$dataString .= "$gs_id|$available|$shop_id|$product_key|$article|$category_id|$picture|$thumbnail|$original_picture|$name|$description|$brand_id|$model|$old_price|$price|$url|$destination_url\n";
$dataPath = str_replace('\\', '/', Yii::$app->basePath) . '/products/products.txt';
$dataFile = fopen($dataPath, 'w');
fwrite($dataFile, $dataString);
fclose($dataFile);
unset($dataString, $dataFile);
Yii::$app->db->createCommand('SET GLOBAL local_infile = true;')->execute();
Yii::$app->db->createCommand("
LOAD DATA LOCAL INFILE '$dataPath'
INTO TABLE product
FIELDS TERMINATED BY '|'
(
gs_id,available,shop_id,product_key,article,category_id,
picture,thumbnail,original_picture,name,description,brand_id,
model,old_price,price,url,destination_url
)
")->execute();