Skip to content

Instantly share code, notes, and snippets.

@bert-w
Created February 28, 2024 21:02
Show Gist options
  • Save bert-w/f1918cf50ed1bf937011897e21e78cdf to your computer and use it in GitHub Desktop.
Save bert-w/f1918cf50ed1bf937011897e21e78cdf to your computer and use it in GitHub Desktop.
tests/Integration/Database/BenchmarkTest.php
<?php
namespace Illuminate\Tests\Integration\Database;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Benchmark;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
use Illuminate\Tests\Integration\Database\Fixtures\User;
class BenchmarkTest extends DatabaseTestCase
{
protected function afterRefreshingDatabase(): void
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('title');
$table->timestamps();
});
$now = new \DateTime();
for ($i = 0; $i < 10000; $i++) {
DB::table('users')->insert([
'name' => Str::random(),
'title' => Str::random(2),
'created_at' => $now,
'updated_at' => $now,
]);
}
}
public function testBenchmark(): void
{
$benchmark = Benchmark::measure([
'Pluck 10' => fn () => User::query()->toBase()->limit(10)->pluck('title', 'name'),
'Pluck 100' => fn () => User::query()->toBase()->limit(100)->pluck('title', 'name'),
'Pluck 1000' => fn () => User::query()->toBase()->limit(1000)->pluck('title', 'name'),
'Pluck 10000' => fn () => User::query()->toBase()->limit(10000)->pluck('title', 'name'),
'Query::keyed 10' => fn () => User::query()->toBase()->limit(10)->mode(DB::mode()->keyed())->get([
'name', 'name', 'title',
]),
'Query::keyed 100' => fn () => User::query()->toBase()->limit(100)->mode(DB::mode()->keyed())->get([
'name', 'name', 'title',
]),
'Query::keyed 1000' => fn (
) => User::query()->toBase()->limit(1000)->mode(DB::mode()->keyed())->get(['name', 'name', 'title']),
'Query::keyed 10000' => fn (
) => User::query()->toBase()->limit(10000)->mode(DB::mode()->keyed())->get(['name', 'name', 'title']),
'Collection::keyed 10' => fn () => User::query()->toBase()->limit(10)->get([
'name', 'title',
])->keyBy('name'),
'Collection::keyed 100' => fn () => User::query()->toBase()->limit(100)->get([
'name', 'title',
])->keyBy('name'),
'Collection::keyed 1000' => fn () => User::query()->toBase()->limit(1000)->get([
'name', 'title',
])->keyBy('name'),
'Collection::keyed 10000' => fn () => User::query()->toBase()->limit(10000)->get([
'name', 'title',
])->keyBy('name'),
], 1000);
dd($benchmark);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment