explain.depesz.com

PostgreSQL's explain analyze made readable

Result: iuMg

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

CTE Scan on iters (cost=9.48..9.70 rows=11 width=44) (actual time=0.078..21,051.538 rows=41,712 loops=1)

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

CTE numbers

3. 0.069 0.160 ↓ 2.9 90 1

Recursive Union (cost=0.00..2.95 rows=31 width=4) (actual time=0.004..0.160 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.090 0.090 ↑ 3.0 1 90

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

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

CTE pixels

7. 0.484 1.383 ↓ 2,607.0 2,607 1

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

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

CTE Scan on numbers rows (cost=0.00..0.78 rows=1 width=4) (actual time=0.027..0.041 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.002..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.893 6.893 ↓ 2,607.0 2,607 1

CTE Scan on pixels (cost=0.00..0.06 rows=1 width=104) (actual time=0.054..6.893 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. 11.908 11.908 ↓ 2,607.0 2,607 1

CTE Scan on rawrays (cost=0.00..0.04 rows=1 width=136) (actual time=0.063..11.908 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. 18.335 18.335 ↓ 2,607.0 2,607 1

CTE Scan on norms (cost=0.00..0.03 rows=1 width=104) (actual time=0.072..18.335 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. 31.091 20,991.988 ↓ 3,792.0 41,712 1

Recursive Union (cost=0.00..4.07 rows=11 width=44) (actual time=0.076..20,991.988 rows=41,712 loops=1)

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

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

  • Output: rays."row", rays.col, 0, 0.0
19. 10,208.256 20,940.768 ↓ 2,444.0 2,444 16

Nested Loop (cost=0.00..0.38 rows=1 width=44) (actual time=26.142..1,308.798 rows=2,444 loops=16)

  • Output: rays_1."row", rays_1.col, (iters_1.it + 1), (iters_1.v + GREATEST((abs((0.7 + (iters_1.v * rays_1.x))) - 0.3), (abs((0.7 + (iters_1.v * rays_1.y))) - 0.3), (abs(('-1.1'::numeric + (iters_1.v * rays_1.z))) - 0.3), (((- (0.28 + (((((0.7 + (iters_1.v * rays_1.x)) * (0.7 + (iters_1.v * rays_1.x))) + ((0.7 + (iters_1.v * rays_1.y)) * (0.7 + (iters_1.v * rays_1.y)))) + (('-1.1'::numeric + (iters_1.v * rays_1.z)) * ('-1.1'::numeric + (iters_1.v * rays_1.z)))) / 0.28))) / 2.0) + 0.42)))
  • Join Filter: ((iters_1."row" = rays_1."row") AND (iters_1.col = rays_1.col))
  • Rows Removed by Join Filter: 6369227
20. 54.240 54.240 ↓ 2,607.0 2,607 16

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

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

WorkTable Scan on iters iters_1 (cost=0.00..0.22 rows=3 width=44) (actual time=0.010..0.256 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)