laravel-performance/app/Tasks/Mass/MassInsert/MassInsert6Task.php

49 lines
1.3 KiB
PHP

<?php
namespace App\Tasks\Mass\MassInsert;
use App\Models\Transaction;
use Illuminate\Support\Facades\DB;
class MassInsert6Task
{
/**
* insert with prepare
*
* PDO
* Prepared statement insert verificar
*
* PREPARE transactions_plan (decimal, timestamp) AS
* INSERT INTO transactions (value, date)
* VALUES ($1, $2);
*
* EXECUTE transactions_plan(23.44, '2023-01-05 00:00:00'::timestamp);
*
* 100 ............ 0,125 s DONE
* 1_000 ............ 1,000 s DONE
* 10_000 ........... 11,000 s DONE
* 100_000 .......... 147,000 s DONE
* 1_000_000 ........ 1.250,000 s DONE (20m 50s)
*
* @param mixed $count
* @return void
*/
public function handle(int $count): void
{
$sql1 = 'PREPARE transactions_plan5 (decimal, timestamp) AS INSERT INTO transactions (value, date) VALUES ($1::decimal, $2::timestamp)';
DB::unprepared($sql1);
$transactions = Transaction::factory($count)->make();
foreach ($transactions as $transaction) {
$sql3 = vsprintf('EXECUTE transactions_plan5 (%s, \'%s\')', [
(float)$transaction->value,
$transaction->date->format('Y-m-d H:i:s')
]);
DB::unprepared($sql3);
}
}
}