whereIn() з великими масивами - пастка пам'яті
Передавання 10,000 ID в whereIn()? Рядок запиту стає величезним.
MySQL має ліміти розміру запиту. PHP використовує тонни пам'яті.
Кращий підхід:
Використовувати підзапит або тимчасову таблицю для великих наборів даних.
Продуктивність:
whereIn()з 100 елементами - нормальноwhereIn()з 10,000 елементами - проблема- Підзапит - константна пам'ять
Порада: Якщо масив має більше 1000 елементів, розглянь використання підзапиту або chunking.
// ПОГАНО: Великий масив в whereIn
$userIds = range(1, 10000); // 10k ID
$users = User::whereIn('id', $userIds)->get();
// Величезний запит, високе використання пам'яті
// ДОБРЕ: Використовувати підзапит
$activeUserIds = DB::table('user_activity')
->where('last_login', '>', now()->subDays(30))
->select('user_id');
$users = User::whereIn('id', $activeUserIds)->get();
// Альтернатива: Join
$users = User::join('user_activity', 'users.id', '=',
'user_activity.user_id')
->where('user_activity.last_login', '>', now()->subDays(30))
->select('users.*')
->get();
// Розділяй великі операції
$userIds = range(1, 10000);
collect($userIds)->chunk(500)->each(function ($chunk) {
User::whereIn('id', $chunk)->update(['notified' => true]);
});