Query in loops

Verze:

30. 07. 2025

Zodpovědná osoba:

Dominik Šlechta

Poslední aktualizace:

30. 07. 2025, dominikslechta.1@gmail.com

Any SQL query, expensive script, or external command execution MUST NOT be placed inside a loop. If such operations are required within the loop context, they MUST be preloaded or computed beforehand, outside the loop.

Rule

Placing expensive operations like SQL queries or system calls inside loops leads to significant performance issues due to repeated and unnecessary executions. This can cause:

  • Excessive load on the database or external systems

  • Increased latency and slower performance

  • Hard-to-detect scalability bottlenecks

Examples

Bad Practice:

foreach ($users as $user) {
    $orders = $db->query("SELECT * FROM orders WHERE user_id = {$user->id}"); // BAD
    process($orders);
}

Good Practice:

$userIds = array_map(fn($u) => $u->id, $users);
$allOrders = $db->query("SELECT * FROM orders WHERE user_id IN (" . implode(',', $userIds) . ")");

foreach ($users as $user) {
    $orders = filterOrdersForUser($allOrders, $user->id);
    process($orders);
}