Nested Loop Join — outer row drives inner probeMySQL 8.4 • MariaDB 11.4

Dedicated operator view for EXPLAIN's Nested loop nodes. Learn the driver/probe shape without mixing algorithms.

Lesson familyJoin Operator

Join shape controls

The driving side: each of these rows triggers an inner probe.
Average orders rows checked for each customer row.

Example query this animation executes

SELECT c.customer_id, o.order_id
FROM   customers c
JOIN   orders o ON o.customer_id = c.customer_id
WHERE  c.country = 'US';

This lesson isolates the Nested loop operator itself: one outer row is chosen, then the inner side is probed, and repeated. This is the exact background behavior behind EXPLAIN's Nested loop node.

What you'll see in the animation

  • Left side is the outer (driving) customers input. One highlighted customer means one loop iteration.
  • For each highlighted customer, the arrow moves to the orders side and shows the concrete rows checked in that probe.
  • The operator repeats this pattern until all outer rows are consumed.
  • Top-line cost is row-pair comparisons, which grows with outer_rows × inner_rows_per_probe (the operator's real background work).
Ready — press Play
0.0s 0.0s

Nested loop cost model

Outer rows ?Rows from the driving side of the join. The nested loop runs once per outer row.

—

Inner rows per probe ?Average rows checked on the inner side each time one outer row is processed.

—

Row-pair comparisons ?Approximate work for this operator: outer_rows × inner_rows_per_probe.

—

Complexity ?Nested loop cost grows multiplicatively with both inputs.

O(n · m)

Nested loop growth curve (log-log)

Learn more — why this operator can get expensive

The Nested loop operator itself is simple: pick one outer row and run an inner probe. The expensive part is repetition. If either side grows, total row-pair checks grow quickly.

If the inner probe is a selective index lookup, inner_rows_per_probe stays small and Nested loop can be very fast. If the inner side scans many rows per outer row, work explodes.