explain.depesz.com

PostgreSQL's explain analyze made readable

Result: m8ck

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

Sort (cost=1,635,293,656.95..1,637,558,122.28 rows=905,786,132 width=3,154) (actual rows= loops=)

  • Sort Key: ts.enddate, ((ui.lastname)::character varying(50)) COLLATE "en_US", ((ui.firstname)::character varying(50)) COLLATE "en_US", ui.duplicatename, ((login.loginname)::character varying(255)) COLLATE "en_US", ((ui.displayname)::text) COLLATE "en_US", ((br.name)::character varying(50)) COLLATE "en_US", ((currencyinfo4.symbol)::character varying(50)) COLLATE "en_US", pbrh.hourlyrate, ((cl.name)::character varying(255)) COLLATE "en_US", ((pj.name)::character varying(255)) COLLATE "en_US", ((tdh.hierarchysorting)::text) COLLATE "en_US", ((tdh.hierarchytaskname)::text) COLLATE "en_US", ((tk.info19)::character varying(255)) COLLATE "en_US", ((dm_projecttimeallocation_facts_1.comments)::text) COLLATE "en_US", ((dm_projecttimeallocation_facts_1.entrydate)::timestamp without time zone), ((userinfo10.displayname)::text) COLLATE "en_US", projectstatuslabel15.projectstatustype
2.          

Initplan (for Sort)

3. 0.000 0.000 ↓ 0.0

Seq Scan on projectsysteminformation (cost=0.00..16.50 rows=650 width=16) (actual rows= loops=)

4. 0.000 0.000 ↓ 0.0

Seq Scan on projectsysteminformation projectsysteminformation_1 (cost=0.00..16.50 rows=650 width=16) (actual rows= loops=)

5. 0.000 0.000 ↓ 0.0

Seq Scan on systeminformation (cost=0.00..1.01 rows=1 width=4) (actual rows= loops=)

6. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=9,688,134.61..92,322,744.41 rows=905,786,132 width=3,154) (actual rows= loops=)

  • Hash Cond: (pj.projectstatuslabelid = projectstatuslabel15.id)
7. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=9,688,133.45..88,505,501.70 rows=905,786,132 width=549) (actual rows= loops=)

  • Hash Cond: ("*SELECT* 1".expenseid = eh.expenseid)
8. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=8,613,401.19..51,135,227.96 rows=905,786,132 width=523) (actual rows= loops=)

  • Hash Cond: (ts.id = tah.timesheetid)
9. 0.000 0.000 ↓ 0.0

Merge Right Join (cost=8,005,672.88..21,601,298.70 rows=905,786,132 width=383) (actual rows= loops=)

  • Merge Cond: ("*SELECT* 1".expenseid = (NULL::integer))
10. 0.000 0.000 ↓ 0.0

Merge Join (cost=11,700.31..15,024.47 rows=85,518 width=4) (actual rows= loops=)

  • Merge Cond: ("*SELECT* 1".expenseid = ex.id)
11. 0.000 0.000 ↓ 0.0

Sort (cost=11,700.01..11,913.81 rows=85,518 width=4) (actual rows= loops=)

  • Sort Key: "*SELECT* 1".expenseid
12. 0.000 0.000 ↓ 0.0

Append (cost=0.55..4,694.41 rows=85,518 width=4) (actual rows= loops=)

13. 0.000 0.000 ↓ 0.0

Subquery Scan on *SELECT* 1 (cost=0.55..4,691.35 rows=85,515 width=4) (actual rows= loops=)

14. 0.000 0.000 ↓ 0.0

Merge Anti Join (cost=0.55..3,836.20 rows=85,515 width=475) (actual rows= loops=)

  • Merge Cond: (dm_expenselist_facts.expenseid = dm_expenselist_realtime_facts.expenseid)
15. 0.000 0.000 ↓ 0.0

Index Only Scan using dm_expenselist_facts_pkey on dm_expenselist_facts (cost=0.42..3,617.19 rows=85,518 width=4) (actual rows= loops=)

16. 0.000 0.000 ↓ 0.0

Index Only Scan using dm_expenselist_realtime_facts_pkey on dm_expenselist_realtime_facts (cost=0.13..5.17 rows=3 width=4) (actual rows= loops=)

17. 0.000 0.000 ↓ 0.0

Subquery Scan on *SELECT* 2 (cost=0.00..3.06 rows=3 width=4) (actual rows= loops=)

18. 0.000 0.000 ↓ 0.0

Seq Scan on dm_expenselist_realtime_facts dm_expenselist_realtime_facts_1 (cost=0.00..3.03 rows=3 width=475) (actual rows= loops=)

  • Filter: (NOT deleted)
19. 0.000 0.000 ↓ 0.0

Index Only Scan using expense_pkey on expense ex (cost=0.29..1,827.20 rows=85,794 width=4) (actual rows= loops=)

20. 0.000 0.000 ↓ 0.0

Materialize (cost=7,993,972.58..8,004,564.34 rows=2,118,352 width=383) (actual rows= loops=)

21. 0.000 0.000 ↓ 0.0

Sort (cost=7,993,972.58..7,999,268.46 rows=2,118,352 width=383) (actual rows= loops=)

  • Sort Key: (NULL::integer)
22. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=468,180.40..7,560,383.92 rows=2,118,352 width=383) (actual rows= loops=)

  • Hash Cond: (pj.projectleaderapproverid = userinfo10.id)
23. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=467,900.50..7,554,539.74 rows=2,118,352 width=371) (actual rows= loops=)

  • Hash Cond: (tk.id = tdh.taskid)
24. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=436,216.63..7,517,295.16 rows=2,118,352 width=318) (actual rows= loops=)

  • Hash Cond: (tk.estimatedcostcurrencyid = exchangerate.fixedcurrencyid)
25. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=436,214.20..7,480,322.10 rows=2,118,352 width=322) (actual rows= loops=)

  • Hash Cond: (dm_projecttimeallocation_facts_1.taskid = tk.id)
26. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=408,243.07..7,446,790.25 rows=2,118,352 width=313) (actual rows= loops=)

  • Hash Cond: (pj.clientid = cl.id)
27. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=408,209.50..7,441,150.92 rows=2,118,352 width=290) (actual rows= loops=)

  • Hash Cond: (dm_projecttimeallocation_facts_1.id = dm_projecttimeallocation_facts.id)
28. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=79,895.93..7,104,271.20 rows=2,118,352 width=255) (actual rows= loops=)

  • Hash Cond: (ui.id = login.userid)
29. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=79,620.78..7,098,431.54 rows=2,118,352 width=241) (actual rows= loops=)

  • Hash Cond: (dm_projecttimeallocation_facts_1.userid = ui.id)
30. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=79,340.87..7,092,587.12 rows=2,118,352 width=206) (actual rows= loops=)

  • Hash Cond: (dmvts_1.id = ts.id)
31. 0.000 0.000 ↓ 0.0

Hash Join (cost=35,345.74..7,019,579.26 rows=2,118,352 width=202) (actual rows= loops=)

  • Hash Cond: (dm_projecttimeallocation_facts_1.projectid = pj.id)
32. 0.000 0.000 ↓ 0.0

Append (cost=34,432.73..6,289,207.87 rows=57,774,203 width=756) (actual rows= loops=)

33. 0.000 0.000 ↓ 0.0

Result (cost=34,432.73..6,015,363.77 rows=57,585,801 width=756) (actual rows= loops=)

34. 0.000 0.000 ↓ 0.0

Append (cost=34,432.73..5,151,576.75 rows=57,585,801 width=748) (actual rows= loops=)

35. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=34,432.73..4,558,952.44 rows=57,585,800 width=1,150) (actual rows= loops=)

  • Hash Cond: (dm_projecttimeallocation_facts_1.taskid = tk_1.id)
36. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=6,461.59..3,803,959.60 rows=57,585,800 width=726) (actual rows= loops=)

  • Hash Cond: (dm_projecttimeallocation_facts_1.projectid = pj_1.id)
37. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=5,444.75..3,651,722.99 rows=57,585,800 width=722) (actual rows= loops=)

  • Merge Cond: (dm_projecttimeallocation_facts_1.userid = ptm.userid)
  • Join Filter: ((dm_projecttimeallocation_facts_1.projectid = ptm.projectid) AND (ptma.date = dm_projecttimeallocation_facts_1.entrydate))
38. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.85..1,828,627.98 rows=57,585,800 width=690) (actual rows= loops=)

39. 0.000 0.000 ↓ 0.0

Index Scan using uix2tsuseridstartdate on timesheet dmvts_1 (cost=0.42..13,280.41 rows=454,266 width=32) (actual rows= loops=)

40. 0.000 0.000 ↓ 0.0

Index Scan using ixpta2userid on dm_projecttimeallocation_facts dm_projecttimeallocation_facts_1 (cost=0.43..3.03 rows=97 width=662) (actual rows= loops=)

  • Index Cond: ((userid = dmvts_1.userid) AND (entrydate >= dmvts_1.startdate) AND (entrydate <= dmvts_1.enddate))
  • Filter: ((timeoffcodeid IS NULL) AND (breaktypeid IS NULL))
41. 0.000 0.000 ↓ 0.0

Sort (cost=5,443.89..5,456.11 rows=4,888 width=44) (actual rows= loops=)

  • Sort Key: ptm.userid
42. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.42..5,144.38 rows=4,888 width=44) (actual rows= loops=)

43. 0.000 0.000 ↓ 0.0

Seq Scan on projectteammemberallocation ptma (cost=0.00..99.88 rows=4,888 width=52) (actual rows= loops=)

44. 0.000 0.000 ↓ 0.0

Index Scan using projectteammember_pkey on projectteammember ptm (cost=0.42..1.03 rows=1 width=24) (actual rows= loops=)

  • Index Cond: (id = ptma.projectteammemberid)
45. 0.000 0.000 ↓ 0.0

Hash (cost=880.82..880.82 rows=10,882 width=8) (actual rows= loops=)

46. 0.000 0.000 ↓ 0.0

Seq Scan on project pj_1 (cost=0.00..880.82 rows=10,882 width=8) (actual rows= loops=)

47. 0.000 0.000 ↓ 0.0

Hash (cost=20,412.17..20,412.17 rows=604,717 width=8) (actual rows= loops=)

48. 0.000 0.000 ↓ 0.0

Seq Scan on task tk_1 (cost=0.00..20,412.17 rows=604,717 width=8) (actual rows= loops=)

49. 0.000 0.000 ↓ 0.0

Subquery Scan on *SELECT* 2_1 (cost=0.85..16,766.31 rows=1 width=748) (actual rows= loops=)

50. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=0.85..16,766.30 rows=1 width=748) (actual rows= loops=)

  • Filter: (dm_projecttimeallocation_facts_2.id IS NULL)
51. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.42..5,144.38 rows=4,888 width=44) (actual rows= loops=)

52. 0.000 0.000 ↓ 0.0

Seq Scan on projectteammemberallocation ptma_1 (cost=0.00..99.88 rows=4,888 width=52) (actual rows= loops=)

  • Filter: (id IS NOT NULL)
53. 0.000 0.000 ↓ 0.0

Index Scan using projectteammember_pkey on projectteammember ptm_1 (cost=0.42..1.03 rows=1 width=24) (actual rows= loops=)

  • Index Cond: (id = ptma_1.projectteammemberid)
54. 0.000 0.000 ↓ 0.0

Index Scan using ixpta2projectid on dm_projecttimeallocation_facts dm_projecttimeallocation_facts_2 (cost=0.43..2.37 rows=1 width=28) (actual rows= loops=)

  • Index Cond: ((ptm_1.projectid = projectid) AND (ptma_1.date = entrydate))
  • Filter: ((timeoffcodeid IS NULL) AND (breaktypeid IS NULL) AND (ptm_1.userid = userid))
55. 0.000 0.000 ↓ 0.0

Subquery Scan on *SELECT* 3 (cost=3.13..11,040.55 rows=37,223 width=756) (actual rows= loops=)

56. 0.000 0.000 ↓ 0.0

Nested Loop (cost=3.13..10,668.32 rows=37,223 width=2,114) (actual rows= loops=)

57.          

Initplan (for Nested Loop)

58. 0.000 0.000 ↓ 0.0

Seq Scan on systeminformation systeminformation_1 (cost=0.00..1.01 rows=1 width=4) (actual rows= loops=)

59. 0.000 0.000 ↓ 0.0

Hash Join (cost=1.70..4,347.73 rows=9,533 width=30) (actual rows= loops=)

  • Hash Cond: (ex_1.reimbursementcurrencyid = exchangerate_1.fixedcurrencyid)
  • Join Filter: ((ex_1.expensedate >= exchangerate_1.effectivedate) AND (ex_1.expensedate <= exchangerate_1.enddate))
60. 0.000 0.000 ↓ 0.0

Seq Scan on expense ex_1 (cost=0.00..2,093.94 rows=85,794 width=27) (actual rows= loops=)

61. 0.000 0.000 ↓ 0.0

Hash (cost=1.61..1.61 rows=7 width=19) (actual rows= loops=)

62. 0.000 0.000 ↓ 0.0

Seq Scan on exchangerate exchangerate_1 (cost=0.00..1.61 rows=7 width=19) (actual rows= loops=)

  • Filter: (variablecurrencyid = $8)
63. 0.000 0.000 ↓ 0.0

Index Scan using ixeeexpenseid on expenseentry ee (cost=0.42..0.56 rows=4 width=1,615) (actual rows= loops=)

  • Index Cond: (expenseid = ex_1.id)
64. 0.000 0.000 ↓ 0.0

Subquery Scan on *SELECT* 4 (cost=237,100.11..262,803.55 rows=151,179 width=756) (actual rows= loops=)

65. 0.000 0.000 ↓ 0.0

Seq Scan on task tsk (cost=237,100.11..260,535.87 rows=151,179 width=748) (actual rows= loops=)

  • Filter: ((NOT (hashed SubPlan 6)) AND (NOT (hashed SubPlan 7)))
66.          

SubPlan (for Seq Scan)

67. 0.000 0.000 ↓ 0.0

Unique (cost=0.43..229,388.88 rows=151,667 width=4) (actual rows= loops=)

68. 0.000 0.000 ↓ 0.0

Index Scan using ixpta2taskid on dm_projecttimeallocation_facts dm_projecttimeallocation_facts_3 (cost=0.43..219,090.68 rows=4,119,281 width=4) (actual rows= loops=)

  • Index Cond: (taskid IS NOT NULL)
  • Filter: ((timeoffcodeid IS NULL) AND (breaktypeid IS NULL))
69. 0.000 0.000 ↓ 0.0

Unique (cost=0.42..7,147.30 rows=73,903 width=4) (actual rows= loops=)

70. 0.000 0.000 ↓ 0.0

Index Only Scan using ixeetaskid on expenseentry (cost=0.42..6,421.48 rows=290,330 width=4) (actual rows= loops=)

  • Index Cond: (taskid IS NOT NULL)
71. 0.000 0.000 ↓ 0.0

Hash (cost=908.02..908.02 rows=399 width=70) (actual rows= loops=)

72. 0.000 0.000 ↓ 0.0

Seq Scan on project pj (cost=0.00..908.02 rows=399 width=70) (actual rows= loops=)

  • Filter: (programid = 'a40ba3d5-5fac-454e-baf3-c5d80ae0939d'::uuid)
73. 0.000 0.000 ↓ 0.0

Hash (cost=38,347.53..38,347.53 rows=451,808 width=20) (actual rows= loops=)

74. 0.000 0.000 ↓ 0.0

Hash Join (cost=14,959.41..38,347.53 rows=451,808 width=20) (actual rows= loops=)

  • Hash Cond: (tslist.timesheetid = ts.id)
75. 0.000 0.000 ↓ 0.0

Index Only Scan using ixdtslsftimesheetid on dm_timesheetlist_facts tslist (cost=0.42..22,202.54 rows=451,808 width=16) (actual rows= loops=)

76. 0.000 0.000 ↓ 0.0

Hash (cost=9,280.66..9,280.66 rows=454,266 width=20) (actual rows= loops=)

77. 0.000 0.000 ↓ 0.0

Seq Scan on timesheet ts (cost=0.00..9,280.66 rows=454,266 width=20) (actual rows= loops=)

78. 0.000 0.000 ↓ 0.0

Hash (cost=203.29..203.29 rows=6,129 width=35) (actual rows= loops=)

79. 0.000 0.000 ↓ 0.0

Seq Scan on userinfo ui (cost=0.00..203.29 rows=6,129 width=35) (actual rows= loops=)

80. 0.000 0.000 ↓ 0.0

Hash (cost=198.40..198.40 rows=6,140 width=18) (actual rows= loops=)

81. 0.000 0.000 ↓ 0.0

Seq Scan on login (cost=0.00..198.40 rows=6,140 width=18) (actual rows= loops=)

82. 0.000 0.000 ↓ 0.0

Hash (cost=326,623.20..326,623.20 rows=135,230 width=51) (actual rows= loops=)

83. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=287,783.00..326,623.20 rows=135,230 width=51) (actual rows= loops=)

  • Hash Cond: (pbrh.currencyid = currencyinfo4.id)
84. 0.000 0.000 ↓ 0.0

Nested Loop (cost=287,781.84..326,052.14 rows=135,230 width=52) (actual rows= loops=)

85. 0.000 0.000 ↓ 0.0

Hash Join (cost=287,781.42..316,664.70 rows=10,480 width=60) (actual rows= loops=)

  • Hash Cond: (pbrh.projectbillingrateid = pbr.id)
  • Join Filter: ((dm_projecttimeallocation_facts.entrydate >= pbrh.effectivedate) AND (dm_projecttimeallocation_facts.entrydate <= pbrh.enddate))
86. 0.000 0.000 ↓ 0.0

Seq Scan on projectbillingratehistory pbrh (cost=0.00..23,199.09 rows=1,138,509 width=33) (actual rows= loops=)

87. 0.000 0.000 ↓ 0.0

Hash (cost=286,635.83..286,635.83 rows=91,647 width=67) (actual rows= loops=)

88. 0.000 0.000 ↓ 0.0

Merge Join (cost=131,489.00..286,635.83 rows=91,647 width=67) (actual rows= loops=)

  • Merge Cond: (dm_projecttimeallocation_facts.billingrateid = br.id)
89. 0.000 0.000 ↓ 0.0

Merge Join (cost=131,488.36..354,638.06 rows=487,443 width=72) (actual rows= loops=)

  • Merge Cond: ((dm_projecttimeallocation_facts.billingrateid = pbr.billingrateid) AND (dm_projecttimeallocation_facts.projectid = pbr.projectid))
  • Join Filter: (((pbr.billingrateid = $0) AND (dm_projecttimeallocation_facts.userid = pbr.userid)) OR ((pbr.billingrateid <> $1) AND (pbr.userid IS NULL)))
90. 0.000 0.000 ↓ 0.0

Index Scan using ixpta4billingrateid on dm_projecttimeallocation_facts (cost=0.56..282,944.21 rows=4,462,685 width=44) (actual rows= loops=)

  • Filter: ((timeoffcodeid IS NULL) AND (breaktypeid IS NULL))
91. 0.000 0.000 ↓ 0.0

Sort (cost=131,456.94..134,222.59 rows=1,106,260 width=40) (actual rows= loops=)

  • Sort Key: pbr.billingrateid, pbr.projectid
92. 0.000 0.000 ↓ 0.0

Seq Scan on projectbillingrate pbr (cost=0.00..20,403.60 rows=1,106,260 width=40) (actual rows= loops=)

93. 0.000 0.000 ↓ 0.0

Index Scan using billingrate_pkey on billingrate br (cost=0.28..171.59 rows=5,087 width=43) (actual rows= loops=)

94. 0.000 0.000 ↓ 0.0

Index Only Scan using ixtsuseridstartdateenddate on timesheet dmvts (cost=0.42..0.82 rows=8 width=12) (actual rows= loops=)

  • Index Cond: ((userid = dm_projecttimeallocation_facts.userid) AND (startdate <= dm_projecttimeallocation_facts.entrydate) AND (enddate >= dm_projecttimeallocation_facts.entrydate))
95. 0.000 0.000 ↓ 0.0

Hash (cost=1.07..1.07 rows=7 width=7) (actual rows= loops=)

96. 0.000 0.000 ↓ 0.0

Seq Scan on currencyinfo currencyinfo4 (cost=0.00..1.07 rows=7 width=7) (actual rows= loops=)

97. 0.000 0.000 ↓ 0.0

Hash (cost=27.14..27.14 rows=514 width=27) (actual rows= loops=)

98. 0.000 0.000 ↓ 0.0

Seq Scan on clients cl (cost=0.00..27.14 rows=514 width=27) (actual rows= loops=)

99. 0.000 0.000 ↓ 0.0

Hash (cost=20,412.17..20,412.17 rows=604,717 width=13) (actual rows= loops=)

100. 0.000 0.000 ↓ 0.0

Seq Scan on task tk (cost=0.00..20,412.17 rows=604,717 width=13) (actual rows= loops=)

101. 0.000 0.000 ↓ 0.0

Hash (cost=2.35..2.35 rows=7 width=4) (actual rows= loops=)

102. 0.000 0.000 ↓ 0.0

Seq Scan on exchangerate (cost=0.00..2.35 rows=7 width=4) (actual rows= loops=)

  • Filter: ((variablecurrencyid = $2) AND (('now'::cstring)::date >= effectivedate) AND (('now'::cstring)::date <= enddate))
103. 0.000 0.000 ↓ 0.0

Hash (cost=24,102.83..24,102.83 rows=606,483 width=57) (actual rows= loops=)

104. 0.000 0.000 ↓ 0.0

Seq Scan on taskdenormalizedhierarchy tdh (cost=0.00..24,102.83 rows=606,483 width=57) (actual rows= loops=)

105. 0.000 0.000 ↓ 0.0

Hash (cost=203.29..203.29 rows=6,129 width=20) (actual rows= loops=)

106. 0.000 0.000 ↓ 0.0

Seq Scan on userinfo userinfo10 (cost=0.00..203.29 rows=6,129 width=20) (actual rows= loops=)

107. 0.000 0.000 ↓ 0.0

Hash (cost=605,210.02..605,210.02 rows=201,463 width=156) (actual rows= loops=)

108. 0.000 0.000 ↓ 0.0

Gather (cost=11,412.05..605,210.02 rows=201,463 width=156) (actual rows= loops=)

  • Workers Planned: 2
109. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=10,412.05..584,063.72 rows=83,943 width=156) (actual rows= loops=)

110. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=10,411.49..313,634.06 rows=83,943 width=104) (actual rows= loops=)

111. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=10,410.93..43,204.39 rows=83,943 width=36) (actual rows= loops=)

  • Hash Cond: (tah.timesheetid = tahls.timesheetid)
  • Filter: ((tahls.timesheetid IS NULL) OR (tah.serialnumber > tahls.lastsubmitserialnumber))
112. 0.000 0.000 ↓ 0.0

Parallel Seq Scan on timesheetapprovalhistory tah (cost=0.00..32,132.40 rows=251,828 width=40) (actual rows= loops=)

  • Filter: (((systemprocessidentifier IS NULL) OR (systemprocessidentifier <> 'urn:replicon:approval-system-process:timesheet-submit-script-data-and-validation'::text)) AND (action = ANY ('{2,3,6}'::integer[])))
113. 0.000 0.000 ↓ 0.0

Hash (cost=5,908.19..5,908.19 rows=360,219 width=20) (actual rows= loops=)

114. 0.000 0.000 ↓ 0.0

Seq Scan on timesheetapprovalhistorylastsubmit tahls (cost=0.00..5,908.19 rows=360,219 width=20) (actual rows= loops=)

115. 0.000 0.000 ↓ 0.0

Index Scan using ixtahkvtimesheetapprovalhistoryid on timesheetapprovalhistorykeyvalue sheetapprovalhistorykeyvalue12 (cost=0.56..3.20 rows=2 width=84) (actual rows= loops=)

  • Index Cond: (tah.id = timesheetapprovalhistoryid)
  • Filter: (upper(key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-ACTUAL-USER'::text)
116. 0.000 0.000 ↓ 0.0

Index Scan using ixtahkvtimesheetapprovalhistoryid on timesheetapprovalhistorykeyvalue sheetapprovalhistorykeyvalue13 (cost=0.56..3.20 rows=2 width=84) (actual rows= loops=)

  • Index Cond: (tah.id = timesheetapprovalhistoryid)
  • Filter: (upper(key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-EFFECTIVE-USER'::text)
117. 0.000 0.000 ↓ 0.0

Hash (cost=1,074,724.76..1,074,724.76 rows=600 width=34) (actual rows= loops=)

118. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=9.34..1,074,724.76 rows=600 width=34) (actual rows= loops=)

119. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=9.05..1,074,539.85 rows=600 width=64) (actual rows= loops=)

120. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=8.62..1,069,162.68 rows=596 width=8) (actual rows= loops=)

121. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=8.19..1,063,791.47 rows=596 width=8) (actual rows= loops=)

122. 0.000 0.000 ↓ 0.0

Index Only Scan using ix2exhexpenseidid on exphistory eh (cost=7.76..1,058,420.26 rows=596 width=8) (actual rows= loops=)

  • Filter: ((NOT (hashed SubPlan 4)) AND (id = (SubPlan 5)))
123.          

SubPlan (for Index Only Scan)

124. 0.000 0.000 ↓ 0.0

Hash Join (cost=3.67..7.23 rows=43 width=4) (actual rows= loops=)

  • Hash Cond: (ear.nodeid = ean.id)
125. 0.000 0.000 ↓ 0.0

Seq Scan on expenseapprovalrequest ear (cost=0.00..3.43 rows=43 width=16) (actual rows= loops=)

126. 0.000 0.000 ↓ 0.0

Hash (cost=3.30..3.30 rows=30 width=20) (actual rows= loops=)

127. 0.000 0.000 ↓ 0.0

Seq Scan on expenseapprovalnodes ean (cost=0.00..3.30 rows=30 width=20) (actual rows= loops=)

128. 0.000 0.000 ↓ 0.0

Aggregate (cost=4.41..4.42 rows=1 width=4) (actual rows= loops=)

129. 0.000 0.000 ↓ 0.0

Index Scan using ix2exhexpenseidid on exphistory eh1 (cost=0.42..4.40 rows=1 width=4) (actual rows= loops=)

  • Index Cond: (expenseid = eh.expenseid)
  • Filter: (action = ANY ('{2,3,6}'::integer[]))
130. 0.000 0.000 ↓ 0.0

Index Scan using ixexahkvexphistoryid on expenseapprovalhistorykeyvalue actual (cost=0.43..9.00 rows=1 width=64) (actual rows= loops=)

  • Index Cond: (exphistoryid = eh.id)
  • Filter: (upper(key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-ACTUAL-USER'::text)
131. 0.000 0.000 ↓ 0.0

Index Scan using ixexahkvexphistoryid on expenseapprovalhistorykeyvalue kvar (cost=0.43..9.00 rows=1 width=4) (actual rows= loops=)

  • Index Cond: (exphistoryid = eh.id)
  • Filter: (upper(key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:COMPLETED-APPROVAL-REQUEST-APPROVAL-AGENT-DESCRIPTION-APPROVER-ROLE'::text)
132. 0.000 0.000 ↓ 0.0

Index Scan using ixexahkvexphistoryid on expenseapprovalhistorykeyvalue effective (cost=0.43..9.00 rows=2 width=64) (actual rows= loops=)

  • Index Cond: (exphistoryid = eh.id)
  • Filter: (upper(key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-EFFECTIVE-USER'::text)
133. 0.000 0.000 ↓ 0.0

Index Scan using userinfo_pkey on userinfo ui_1 (cost=0.29..0.31 rows=1 width=34) (actual rows= loops=)

  • Index Cond: ((split_part(effective.uri, ':'::text, 5))::integer = id)
134. 0.000 0.000 ↓ 0.0

Hash (cost=1.07..1.07 rows=7 width=20) (actual rows= loops=)

135. 0.000 0.000 ↓ 0.0

Seq Scan on projectstatuslabel projectstatuslabel15 (cost=0.00..1.07 rows=7 width=20) (actual rows= loops=)