-
-
Save bert-w/f1918cf50ed1bf937011897e21e78cdf to your computer and use it in GitHub Desktop.
tests/Integration/Database/BenchmarkTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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