explain.depesz.com

PostgreSQL's explain analyze made readable

Result: CtAD

Settings
# exclusive inclusive rows x rows loops node
1. 0.000 0.000 ↓ 0.0

Gather Motion 128:1 (slice27; segments: 128) (cost=859,452.47..859,452.55 rows=30 width=1,146) (actual rows= loops=)

  • Merge Key: park_name, system_number, turbine_name
2. 0.000 0.000 ↓ 0.0

Sort (cost=859,452.47..859,452.55 rows=1 width=1,146) (actual rows= loops=)

  • Sort Key: partial_aggregation.park_name, partial_aggregation.system_number, partial_aggregation.turbine_name
3. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=859,449.94..859,451.74 rows=1 width=1,146) (actual rows= loops=)

  • Group By: t.park_name, t.system_number, t.turbine_name
4. 0.000 0.000 ↓ 0.0

Sort (cost=859,449.94..859,450.01 rows=1 width=1,146) (actual rows= loops=)

  • Sort Key: t.park_name, t.system_number, t.turbine_name
5. 0.000 0.000 ↓ 0.0

Redistribute Motion 128:128 (slice26; segments: 128) (cost=859,447.10..859,449.20 rows=1 width=1,146) (actual rows= loops=)

  • Hash Key: t.park_name, t.system_number, t.turbine_name
6. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=859,447.10..859,448.60 rows=1 width=1,146) (actual rows= loops=)

  • Group By: t.park_name, t.system_number, t.turbine_name
7. 0.000 0.000 ↓ 0.0

Sort (cost=859,447.10..859,447.17 rows=1 width=1,146) (actual rows= loops=)

  • Sort Key: t.park_name, t.system_number, t.turbine_name
8. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=859,328.59..859,446.36 rows=1 width=1,146) (actual rows= loops=)

  • Hash Cond: t.system_number::text = apr.device::text
9. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=716,108.82..716,225.89 rows=1 width=1,114) (actual rows= loops=)

  • Hash Cond: t.system_number::text = may.device::text
10. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=572,889.05..573,005.43 rows=1 width=1,082) (actual rows= loops=)

  • Hash Cond: t.system_number::text = june.device::text
11. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=429,669.28..429,784.96 rows=1 width=1,050) (actual rows= loops=)

  • Hash Cond: t.system_number::text = july.device::text
12. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=286,449.52..286,564.49 rows=1 width=1,018) (actual rows= loops=)

  • Hash Cond: t.system_number::text = aug.device::text
13. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=143,229.75..143,344.03 rows=1 width=986) (actual rows= loops=)

  • Hash Cond: t.system_number::text = sep.device::text
14. 0.000 0.000 ↓ 0.0

Hash Join (cost=9.98..123.56 rows=1 width=31) (actual rows= loops=)

  • Hash Cond: turbine.park_id = park.park_id
15. 0.000 0.000 ↓ 0.0

Seq Scan on turbine (cost=0.00..103.11 rows=2 width=24) (actual rows= loops=)

16. 0.000 0.000 ↓ 0.0

Hash (cost=8.38..8.38 rows=1 width=15) (actual rows= loops=)

17. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice1; segments: 128) (cost=0.00..8.38 rows=1 width=15) (actual rows= loops=)

18. 0.000 0.000 ↓ 0.0

Seq Scan on park (cost=0.00..7.09 rows=1 width=15) (actual rows= loops=)

  • Filter: park_name::text ~~ 'Coho%'::text
19. 0.000 0.000 ↓ 0.0

Hash (cost=143,218.17..143,218.17 rows=1 width=82) (actual rows= loops=)

20. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice5; segments: 128) (cost=143,216.82..143,218.17 rows=1 width=82) (actual rows= loops=)

21. 0.000 0.000 ↓ 0.0

Subquery Scan sep (cost=143,216.82..143,216.88 rows=1 width=82) (actual rows= loops=)

  • Filter: sep_prod >= 0::numeric AND sep_prod <= 100,000::numeric
22. 0.000 0.000 ↓ 0.0

Window (cost=143,216.82..143,216.88 rows=1 width=21) (actual rows= loops=)

  • Partition By: c.device
  • Order By: c.devicetimestamp
23. 0.000 0.000 ↓ 0.0

Sort (cost=143,216.82..143,216.83 rows=1 width=21) (actual rows= loops=)

  • Sort Key: c.device, c.devicetimestamp
24. 0.000 0.000 ↓ 0.0

Redistribute Motion 128:128 (slice4; segments: 128) (cost=123.94..143,216.76 rows=1 width=21) (actual rows= loops=)

  • Hash Key: c.device
25. 0.000 0.000 ↓ 0.0

Hash Join (cost=123.94..143,216.66 rows=1 width=21) (actual rows= loops=)

  • Hash Cond: c.device::text = t.system_number::text
26. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice2; segments: 128) (cost=0.00..143,092.25 rows=1 width=21) (actual rows= loops=)

27. 0.000 0.000 ↓ 0.0

Seq Scan on fwwtg10 c (cost=0.00..143,090.96 rows=1 width=21) (actual rows= loops=)

  • Filter: devicetimestamp >= '2019-09-01 00:00:00'::timestamp without time zone AND devicetimestamp <= '2019-10-01 00:00:00'::timestamp without time zone
28. 0.000 0.000 ↓ 0.0

Hash (cost=123.56..123.56 rows=1 width=318) (actual rows= loops=)

29. 0.000 0.000 ↓ 0.0

Hash Join (cost=9.98..123.56 rows=1 width=31) (actual rows= loops=)

  • Hash Cond: turbine.park_id = park.park_id
30. 0.000 0.000 ↓ 0.0

Seq Scan on turbine (cost=0.00..103.11 rows=2 width=24) (actual rows= loops=)

31. 0.000 0.000 ↓ 0.0

Hash (cost=8.38..8.38 rows=1 width=15) (actual rows= loops=)

32. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice3; segments: 128) (cost=0.00..8.38 rows=1 width=15) (actual rows= loops=)

33. 0.000 0.000 ↓ 0.0

Seq Scan on park (cost=0.00..7.09 rows=1 width=15) (actual rows= loops=)

  • Filter: park_name::text ~~ 'Coho%'::text
34. 0.000 0.000 ↓ 0.0

Hash (cost=143,218.17..143,218.17 rows=1 width=82) (actual rows= loops=)

35. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice9; segments: 128) (cost=143,216.82..143,218.17 rows=1 width=82) (actual rows= loops=)

36. 0.000 0.000 ↓ 0.0

Subquery Scan aug (cost=143,216.82..143,216.88 rows=1 width=82) (actual rows= loops=)

  • Filter: aug_prod >= 0::numeric AND aug_prod <= 100,000::numeric
37. 0.000 0.000 ↓ 0.0

Window (cost=143,216.82..143,216.88 rows=1 width=21) (actual rows= loops=)

  • Partition By: c.device
  • Order By: c.devicetimestamp
38. 0.000 0.000 ↓ 0.0

Sort (cost=143,216.82..143,216.83 rows=1 width=21) (actual rows= loops=)

  • Sort Key: c.device, c.devicetimestamp
39. 0.000 0.000 ↓ 0.0

Redistribute Motion 128:128 (slice8; segments: 128) (cost=123.94..143,216.76 rows=1 width=21) (actual rows= loops=)

  • Hash Key: c.device
40. 0.000 0.000 ↓ 0.0

Hash Join (cost=123.94..143,216.66 rows=1 width=21) (actual rows= loops=)

  • Hash Cond: c.device::text = t.system_number::text
41. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice6; segments: 128) (cost=0.00..143,092.25 rows=1 width=21) (actual rows= loops=)

42. 0.000 0.000 ↓ 0.0

Seq Scan on fwwtg10 c (cost=0.00..143,090.96 rows=1 width=21) (actual rows= loops=)

  • Filter: devicetimestamp >= '2019-08-01 00:00:00'::timestamp without time zone AND devicetimestamp <= '2019-09-01 00:00:00'::timestamp without time zone
43. 0.000 0.000 ↓ 0.0

Hash (cost=123.56..123.56 rows=1 width=318) (actual rows= loops=)

44. 0.000 0.000 ↓ 0.0

Hash Join (cost=9.98..123.56 rows=1 width=31) (actual rows= loops=)

  • Hash Cond: turbine.park_id = park.park_id
45. 0.000 0.000 ↓ 0.0

Seq Scan on turbine (cost=0.00..103.11 rows=2 width=24) (actual rows= loops=)

46. 0.000 0.000 ↓ 0.0

Hash (cost=8.38..8.38 rows=1 width=15) (actual rows= loops=)

47. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice7; segments: 128) (cost=0.00..8.38 rows=1 width=15) (actual rows= loops=)

48. 0.000 0.000 ↓ 0.0

Seq Scan on park (cost=0.00..7.09 rows=1 width=15) (actual rows= loops=)

  • Filter: park_name::text ~~ 'Coho%'::text
49. 0.000 0.000 ↓ 0.0

Hash (cost=143,218.17..143,218.17 rows=1 width=82) (actual rows= loops=)

50. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice13; segments: 128) (cost=143,216.82..143,218.17 rows=1 width=82) (actual rows= loops=)

51. 0.000 0.000 ↓ 0.0

Subquery Scan july (cost=143,216.82..143,216.88 rows=1 width=82) (actual rows= loops=)

  • Filter: july_prod >= 0::numeric AND july_prod <= 100,000::numeric
52. 0.000 0.000 ↓ 0.0

Window (cost=143,216.82..143,216.88 rows=1 width=21) (actual rows= loops=)

  • Partition By: c.device
  • Order By: c.devicetimestamp
53. 0.000 0.000 ↓ 0.0

Sort (cost=143,216.82..143,216.83 rows=1 width=21) (actual rows= loops=)

  • Sort Key: c.device, c.devicetimestamp
54. 0.000 0.000 ↓ 0.0

Redistribute Motion 128:128 (slice12; segments: 128) (cost=123.94..143,216.76 rows=1 width=21) (actual rows= loops=)

  • Hash Key: c.device
55. 0.000 0.000 ↓ 0.0

Hash Join (cost=123.94..143,216.66 rows=1 width=21) (actual rows= loops=)

  • Hash Cond: c.device::text = t.system_number::text
56. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice10; segments: 128) (cost=0.00..143,092.25 rows=1 width=21) (actual rows= loops=)

57. 0.000 0.000 ↓ 0.0

Seq Scan on fwwtg10 c (cost=0.00..143,090.96 rows=1 width=21) (actual rows= loops=)

  • Filter: devicetimestamp >= '2019-07-01 00:00:00'::timestamp without time zone AND devicetimestamp <= '2019-08-01 00:00:00'::timestamp without time zone
58. 0.000 0.000 ↓ 0.0

Hash (cost=123.56..123.56 rows=1 width=318) (actual rows= loops=)

59. 0.000 0.000 ↓ 0.0

Hash Join (cost=9.98..123.56 rows=1 width=31) (actual rows= loops=)

  • Hash Cond: turbine.park_id = park.park_id
60. 0.000 0.000 ↓ 0.0

Seq Scan on turbine (cost=0.00..103.11 rows=2 width=24) (actual rows= loops=)

61. 0.000 0.000 ↓ 0.0

Hash (cost=8.38..8.38 rows=1 width=15) (actual rows= loops=)

62. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice11; segments: 128) (cost=0.00..8.38 rows=1 width=15) (actual rows= loops=)

63. 0.000 0.000 ↓ 0.0

Seq Scan on park (cost=0.00..7.09 rows=1 width=15) (actual rows= loops=)

  • Filter: park_name::text ~~ 'Coho%'::text
64. 0.000 0.000 ↓ 0.0

Hash (cost=143,218.17..143,218.17 rows=1 width=82) (actual rows= loops=)

65. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice17; segments: 128) (cost=143,216.82..143,218.17 rows=1 width=82) (actual rows= loops=)

66. 0.000 0.000 ↓ 0.0

Subquery Scan june (cost=143,216.82..143,216.88 rows=1 width=82) (actual rows= loops=)

  • Filter: june_prod >= 0::numeric AND june_prod <= 100,000::numeric
67. 0.000 0.000 ↓ 0.0

Window (cost=143,216.82..143,216.88 rows=1 width=21) (actual rows= loops=)

  • Partition By: c.device
  • Order By: c.devicetimestamp
68. 0.000 0.000 ↓ 0.0

Sort (cost=143,216.82..143,216.83 rows=1 width=21) (actual rows= loops=)

  • Sort Key: c.device, c.devicetimestamp
69. 0.000 0.000 ↓ 0.0

Redistribute Motion 128:128 (slice16; segments: 128) (cost=123.94..143,216.76 rows=1 width=21) (actual rows= loops=)

  • Hash Key: c.device
70. 0.000 0.000 ↓ 0.0

Hash Join (cost=123.94..143,216.66 rows=1 width=21) (actual rows= loops=)

  • Hash Cond: c.device::text = t.system_number::text
71. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice14; segments: 128) (cost=0.00..143,092.25 rows=1 width=21) (actual rows= loops=)

72. 0.000 0.000 ↓ 0.0

Seq Scan on fwwtg10 c (cost=0.00..143,090.96 rows=1 width=21) (actual rows= loops=)

  • Filter: devicetimestamp >= '2019-06-01 00:00:00'::timestamp without time zone AND devicetimestamp <= '2019-07-01 00:00:00'::timestamp without time zone
73. 0.000 0.000 ↓ 0.0

Hash (cost=123.56..123.56 rows=1 width=318) (actual rows= loops=)

74. 0.000 0.000 ↓ 0.0

Hash Join (cost=9.98..123.56 rows=1 width=31) (actual rows= loops=)

  • Hash Cond: turbine.park_id = park.park_id
75. 0.000 0.000 ↓ 0.0

Seq Scan on turbine (cost=0.00..103.11 rows=2 width=24) (actual rows= loops=)

76. 0.000 0.000 ↓ 0.0

Hash (cost=8.38..8.38 rows=1 width=15) (actual rows= loops=)

77. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice15; segments: 128) (cost=0.00..8.38 rows=1 width=15) (actual rows= loops=)

78. 0.000 0.000 ↓ 0.0

Seq Scan on park (cost=0.00..7.09 rows=1 width=15) (actual rows= loops=)

  • Filter: park_name::text ~~ 'Coho%'::text
79. 0.000 0.000 ↓ 0.0

Hash (cost=143,218.17..143,218.17 rows=1 width=82) (actual rows= loops=)

80. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice21; segments: 128) (cost=143,216.82..143,218.17 rows=1 width=82) (actual rows= loops=)

81. 0.000 0.000 ↓ 0.0

Subquery Scan may (cost=143,216.82..143,216.88 rows=1 width=82) (actual rows= loops=)

  • Filter: may_prod >= 0::numeric AND may_prod <= 100,000::numeric
82. 0.000 0.000 ↓ 0.0

Window (cost=143,216.82..143,216.88 rows=1 width=21) (actual rows= loops=)

  • Partition By: c.device
  • Order By: c.devicetimestamp
83. 0.000 0.000 ↓ 0.0

Sort (cost=143,216.82..143,216.83 rows=1 width=21) (actual rows= loops=)

  • Sort Key: c.device, c.devicetimestamp
84. 0.000 0.000 ↓ 0.0

Redistribute Motion 128:128 (slice20; segments: 128) (cost=123.94..143,216.76 rows=1 width=21) (actual rows= loops=)

  • Hash Key: c.device
85. 0.000 0.000 ↓ 0.0

Hash Join (cost=123.94..143,216.66 rows=1 width=21) (actual rows= loops=)

  • Hash Cond: c.device::text = t.system_number::text
86. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice18; segments: 128) (cost=0.00..143,092.25 rows=1 width=21) (actual rows= loops=)

87. 0.000 0.000 ↓ 0.0

Seq Scan on fwwtg10 c (cost=0.00..143,090.96 rows=1 width=21) (actual rows= loops=)

  • Filter: devicetimestamp >= '2019-05-01 00:00:00'::timestamp without time zone AND devicetimestamp <= '2019-06-01 00:00:00'::timestamp without time zone
88. 0.000 0.000 ↓ 0.0

Hash (cost=123.56..123.56 rows=1 width=318) (actual rows= loops=)

89. 0.000 0.000 ↓ 0.0

Hash Join (cost=9.98..123.56 rows=1 width=31) (actual rows= loops=)

  • Hash Cond: turbine.park_id = park.park_id
90. 0.000 0.000 ↓ 0.0

Seq Scan on turbine (cost=0.00..103.11 rows=2 width=24) (actual rows= loops=)

91. 0.000 0.000 ↓ 0.0

Hash (cost=8.38..8.38 rows=1 width=15) (actual rows= loops=)

92. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice19; segments: 128) (cost=0.00..8.38 rows=1 width=15) (actual rows= loops=)

93. 0.000 0.000 ↓ 0.0

Seq Scan on park (cost=0.00..7.09 rows=1 width=15) (actual rows= loops=)

  • Filter: park_name::text ~~ 'Coho%'::text
94. 0.000 0.000 ↓ 0.0

Hash (cost=143,218.17..143,218.17 rows=1 width=82) (actual rows= loops=)

95. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice25; segments: 128) (cost=143,216.82..143,218.17 rows=1 width=82) (actual rows= loops=)

96. 0.000 0.000 ↓ 0.0

Subquery Scan apr (cost=143,216.82..143,216.88 rows=1 width=82) (actual rows= loops=)

  • Filter: april_prod >= 0::numeric AND april_prod <= 100,000::numeric
97. 0.000 0.000 ↓ 0.0

Window (cost=143,216.82..143,216.88 rows=1 width=21) (actual rows= loops=)

  • Partition By: c.device
  • Order By: c.devicetimestamp
98. 0.000 0.000 ↓ 0.0

Sort (cost=143,216.82..143,216.83 rows=1 width=21) (actual rows= loops=)

  • Sort Key: c.device, c.devicetimestamp
99. 0.000 0.000 ↓ 0.0

Redistribute Motion 128:128 (slice24; segments: 128) (cost=123.94..143,216.76 rows=1 width=21) (actual rows= loops=)

  • Hash Key: c.device
100. 0.000 0.000 ↓ 0.0

Hash Join (cost=123.94..143,216.66 rows=1 width=21) (actual rows= loops=)

  • Hash Cond: c.device::text = t.system_number::text
101. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice22; segments: 128) (cost=0.00..143,092.25 rows=1 width=21) (actual rows= loops=)

102. 0.000 0.000 ↓ 0.0

Seq Scan on fwwtg10 c (cost=0.00..143,090.96 rows=1 width=21) (actual rows= loops=)

  • Filter: devicetimestamp >= '2019-04-01 00:00:00'::timestamp without time zone AND devicetimestamp <= '2019-05-01 00:00:00'::timestamp without time zone
103. 0.000 0.000 ↓ 0.0

Hash (cost=123.56..123.56 rows=1 width=318) (actual rows= loops=)

104. 0.000 0.000 ↓ 0.0

Hash Join (cost=9.98..123.56 rows=1 width=31) (actual rows= loops=)

  • Hash Cond: turbine.park_id = park.park_id
105. 0.000 0.000 ↓ 0.0

Seq Scan on turbine (cost=0.00..103.11 rows=2 width=24) (actual rows= loops=)

106. 0.000 0.000 ↓ 0.0

Hash (cost=8.38..8.38 rows=1 width=15) (actual rows= loops=)

107. 0.000 0.000 ↓ 0.0

Broadcast Motion 128:128 (slice23; segments: 128) (cost=0.00..8.38 rows=1 width=15) (actual rows= loops=)

108. 0.000 0.000 ↓ 0.0

Seq Scan on park (cost=0.00..7.09 rows=1 width=15) (actual rows= loops=)

  • Filter: park_name::text ~~ 'Coho%'::textSettings: optimizer=offOptimizer status: legacy query optimizer