-
Notifications
You must be signed in to change notification settings - Fork 11.5k
Description
- Laravel Version: 5.7.9
- PHP Version: 7.1.21
- Database Driver & Version: MySQL 5.5.5 -10.2.15-MariaDB
Description:
Doing a whereIn with prepared query take much more time than doing a raw query
Steps To Reproduce:
Create 10000 users
do :
$user_ids = \App\User::pluck('id');
\App\User::whereIn('id', $user_ids->sort())->get();
this request take 908ms to execute ,
But when doing :
\DB::table('users')->select('*')->whereRaw("id in ('1', '2', '3', '4', [...],'10000')")->get();
This on is taking only 68ms to execute.
I have made a demo project here : https://github.com/Arkhas/laravel-perf-wherein
(just run php artisan migrate:refresh --seed
and visit the homepage (PHP Debug bar is enable))
it seems that it's an issue with prepared queries of php PDO :
https://laracasts.com/discuss/channels/general-discussion/eloquent-is-so-slow?page=2
https://stackoverflow.com/questions/4350718/why-are-certain-types-of-prepared-queries-using-pdo-in-php-with-mysql-slow
when doing eager loading with eloquent, it seems that it use the first synthax and take a lot more time to process
the question here is : Is it required to do prepared queries for eloquent eager loading ? Or is it possible to eager load using the second synthax?