explain.depesz.com

PostgreSQL's explain analyze made readable

Result: 5ist

Settings
# exclusive inclusive rows x rows loops node
1. 18,002.396 18,002.396 ↓ 3,792.0 41,712 1

CTE Scan on iters (cost=8.57..8.79 rows=11 width=44) (actual time=0.038..18,002.396 rows=41,712 loops=1)

  • Output: iters."row", iters.col, iters.it, iters.v
2.          

CTE numbers

3. 0.080 0.081 ↓ 2.9 90 1

Recursive Union (cost=0.00..2.95 rows=31 width=4) (actual time=0.002..0.081 rows=90 loops=1)

4. 0.001 0.001 ↑ 1.0 1 1

Result (cost=0.00..0.01 rows=1 width=4) (actual time=0.001..0.001 rows=1 loops=1)

  • Output: 0
5. 0.000 0.000 ↑ 3.0 1 90

WorkTable Scan on numbers (cost=0.00..0.23 rows=3 width=4) (actual time=0.000..0.000 rows=1 loops=90)

  • Output: (numbers.n + 1)
  • Filter: (numbers.n < 89)
  • Rows Removed by Filter: 0
6.          

CTE pixels

7. 0.419 1.302 ↓ 2,607.0 2,607 1

Nested Loop (cost=0.00..1.56 rows=1 width=8) (actual time=0.019..1.302 rows=2,607 loops=1)

  • Output: rows.n, cols.n
8. 0.025 0.025 ↓ 33.0 33 1

CTE Scan on numbers rows (cost=0.00..0.78 rows=1 width=4) (actual time=0.012..0.025 rows=33 loops=1)

  • Output: rows.n
  • Filter: ((rows.n > 4) AND (rows.n < 38))
  • Rows Removed by Filter: 57
9. 0.858 0.858 ↓ 79.0 79 33

CTE Scan on numbers cols (cost=0.00..0.78 rows=1 width=4) (actual time=0.001..0.026 rows=79 loops=33)

  • Output: cols.n
  • Filter: ((cols.n > 9) AND (cols.n < 89))
  • Rows Removed by Filter: 11
10.          

CTE rawrays

11. 6.270 6.270 ↓ 2,607.0 2,607 1

CTE Scan on pixels (cost=0.00..0.06 rows=1 width=104) (actual time=0.025..6.270 rows=2,607 loops=1)

  • Output: pixels."row", pixels.col, (('-0.9049'::numeric + ((pixels.col)::numeric * 0.0065)) + ((pixels."row")::numeric * 0.0057)), ('-0.1487'::numeric + ((pixels."row")::numeric * '-0.0171'::numeric)), ((0.6713 + ((pixels.col)::numeric * 0.0045)) + ((pixels."row")::numeric * '-0.0081'::numeric))
12.          

CTE norms

13. 10.755 10.755 ↓ 2,607.0 2,607 1

CTE Scan on rawrays (cost=0.00..0.04 rows=1 width=136) (actual time=0.030..10.755 rows=2,607 loops=1)

  • Output: rawrays."row", rawrays.col, rawrays.x, rawrays.y, rawrays.z, (((('1'::numeric + (rawrays.x * rawrays.x)) + (rawrays.y * rawrays.y)) + (rawrays.z * rawrays.z)) / '2'::numeric)
14.          

CTE rays

15. 16.402 16.402 ↓ 2,607.0 2,607 1

CTE Scan on norms (cost=0.00..0.03 rows=1 width=104) (actual time=0.034..16.402 rows=2,607 loops=1)

  • Output: norms."row", norms.col, (norms.x / norms.n), (norms.y / norms.n), (norms.z / norms.n)
16.          

CTE iters

17. 24.583 17,976.755 ↓ 3,792.0 41,712 1

Recursive Union (cost=0.00..3.16 rows=11 width=44) (actual time=0.036..17,976.755 rows=41,712 loops=1)

18. 18.012 18.012 ↓ 2,607.0 2,607 1

CTE Scan on rays (cost=0.00..0.02 rows=1 width=44) (actual time=0.035..18.012 rows=2,607 loops=1)

  • Output: rays."row", rays.col, 0, 0.0
19. 7,439.680 17,934.160 ↓ 2,444.0 2,444 16

Nested Loop (cost=0.00..0.29 rows=1 width=44) (actual time=24.790..1,120.885 rows=2,444 loops=16)

  • Output: rays_1."row", rays_1.col, (iters_1.it + 1), 0.0
  • Join Filter: ((iters_1."row" = rays_1."row") AND (iters_1.col = rays_1.col))
  • Rows Removed by Join Filter: 6369227
20. 24.768 24.768 ↓ 2,607.0 2,607 16

CTE Scan on rays rays_1 (cost=0.00..0.02 rows=1 width=8) (actual time=0.001..1.548 rows=2,607 loops=16)

  • Output: rays_1."row", rays_1.col, rays_1.x, rays_1.y, rays_1.z
21. 10,469.712 10,469.712 ↓ 814.7 2,444 41,712

WorkTable Scan on iters iters_1 (cost=0.00..0.22 rows=3 width=12) (actual time=0.010..0.251 rows=2,444 loops=41,712)

  • Output: iters_1."row", iters_1.col, iters_1.it, iters_1.v
  • Filter: (iters_1.it < 15)
  • Rows Removed by Filter: 163
22.          

CTE lastiters

23. 0.000 0.000 ↓ 0.0 0

Nested Loop (cost=0.00..0.77 rows=1 width=104) (never executed)

  • Output: it0."row", it0.col, it0.v, it1.v, it2.v
  • Join Filter: ((it0.col = it2.col) AND (it0."row" = it2."row"))
24. 0.000 0.000 ↓ 0.0 0

Nested Loop (cost=0.00..0.51 rows=1 width=80) (never executed)

  • Output: it0."row", it0.col, it0.v, it1.v, it1.col, it1."row
  • Join Filter: ((it0.col = it1.col) AND (it0."row" = it1."row"))
25. 0.000 0.000 ↓ 0.0 0

CTE Scan on iters it0 (cost=0.00..0.25 rows=1 width=40) (never executed)

  • Output: it0."row", it0.col, it0.it, it0.v
  • Filter: (it0.it = 15)
26. 0.000 0.000 ↓ 0.0 0

CTE Scan on iters it1 (cost=0.00..0.25 rows=1 width=40) (never executed)

  • Output: it1."row", it1.col, it1.it, it1.v
  • Filter: (it1.it = 14)
27. 0.000 0.000 ↓ 0.0 0

CTE Scan on iters it2 (cost=0.00..0.25 rows=1 width=40) (never executed)

  • Output: it2."row", it2.col, it2.it, it2.v
  • Filter: (it2.it = 13)