1、用seeder
生成测试数据
<?php
use Illuminate\Database\Seeder;
class UsersSeeder extends Seeder
{
public function run()
{
DB::table('users')->delete();
$faker = Faker\Factory::create('ja_JP');
$total = 100000;
$batchSize = 100;
for ($i = 0, $limit = $total / $batchSize; $i < $limit; $i++) {
DB::table('users')->insert($this->makeData($faker, $batchSize));
printf("%d/%d\n", $i * $batchSize, $total);
}
}
private function makeData(\Faker\Generator $faker, $batchSize)
{
$data = [];
for ($i = 0; $i < $batchSize; $i++) {
$data[] = [
'name' => $faker->userName,
'email' => mt_rand() . $faker->email,
'password' => $faker->password(6),
];
}
return $data;
}
}
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(UsersSeeder::class);
}
}
php artisan db:seed
2、测试数据
php artisan make:command PerformanceTestCommand --command=performance:test
<?php
namespace App\Console\Commands;
use App\User;
use Illuminate\Console\Command;
class PerformanceTestCommand extends Command
{
protected $signature = 'performance:test';
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$start = microtime(true);
$time = microtime(true) - $start;
$memory = memory_get_peak_usage(true) / 1024 / 1024;
$this->output->writeln(sprintf('time: %f memory: %f MB', $time, $memory));
}
private function all()
{
foreach (User::all() as $user) {
}
}
private function get()
{
foreach (User::query()->get() as $user) {
}
}
private function chunk($count)
{
User::query()->chunk(
$count,
function ($users) {
foreach ($users as $user) {
}
}
);
}
private function cursor()
{
foreach (User::query()->cursor() as $user) {
}
}
}
3、测试结果
php artisan performance:test