49 lines
1.3 KiB
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);
|
|
}
|
|
}
|
|
}
|