---
title: "whereIn() з великими масивами - пастка пам'яті"
url: https://laravelukraine.com/blog/wherein-z-velikimi-masivami-pastka-pamiati
author: "Олексій Бабінцев"
date: 2026-03-27
---

# whereIn() з великими масивами - пастка пам'яті

Передавання 10,000 ID в `whereIn()`? Рядок запиту стає величезним.

MySQL має ліміти розміру запиту. PHP використовує тонни пам'яті.

**Кращий підхід:**

Використовувати підзапит або тимчасову таблицю для великих наборів даних.

**Продуктивність:**

- `whereIn()` з 100 елементами - нормально
- `whereIn()` з 10,000 елементами - проблема
- Підзапит - константна пам'ять

Порада: Якщо масив має більше 1000 елементів, розглянь використання підзапиту або chunking.

```php
// ПОГАНО: Великий масив в 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]);
});
```
