Intermediate 25 min read

The SOQL-in-a-Loop Problem

By the end of this lesson, you'll be able to:

  • Identify SOQL running inside a loop as an anti-pattern
  • Explain exactly why it fails at scale even when it works in testing
  • Recognize the pattern across a trigger context specifically

Prerequisites: "The Full List of Limits That Matter"

The anti-pattern, one more time

// DON'T DO THIS
for (Opportunity opp : opportunities) {
    Account acc = [SELECT Name FROM Account WHERE Id = :opp.AccountId]; // a query per iteration!
}

This exact example has appeared in Modules 16 and 18 already — this lesson is the dedicated, focused treatment. With 5 opportunities, this runs 5 queries — under the 100-query limit, so it works in a small test. With 150 opportunities (a completely realistic batch size), it throws System.LimitException: Too many SOQL queries: 101.

Why it "works" until it suddenly doesn't

This is the specific danger of this anti-pattern: it compiles cleanly, and it passes a quick manual test with a handful of records, giving false confidence. The failure only appears once real data volume crosses the threshold — often not during development, but during a bulk data load or a mass update in production, exactly when it's most disruptive.

Especially dangerous inside a trigger

// Extremely dangerous — Salesforce can invoke a trigger with up to 200 records at once
trigger OpportunityTrigger on Opportunity (before update) {
    for (Opportunity opp : Trigger.new) {
        Account acc = [SELECT Name FROM Account WHERE Id = :opp.AccountId]; // 200 queries!
    }
}

Module 24's triggers can fire with up to 200 records in a single invocation (from a bulk data operation) — a query inside a trigger's loop is almost guaranteed to exceed the 100-query limit the moment a real bulk update happens, not a hypothetical edge case.

Exercise

As a comment, explain why this exact code might pass a quick manual test but fail in production.

Show hint

Think about the difference between 5 records and 200.

APEX

The SOQL-in-a-Loop Problem Quiz

1. Why is SOQL-in-a-loop especially dangerous inside a trigger specifically?

Log in to submit the quiz and save your score.

My Notes

Log in to keep private notes on this lesson.

Questions about this lesson

No questions yet — be the first to ask.

Log in to ask a question about this lesson.

Summary

A query inside a loop runs once per iteration instead of once total — harmless with 5 records, a guaranteed failure with 200, and the single most common governor limit mistake in real Apex code.