explain.depesz.com

PostgreSQL's explain analyze made readable

Result: YWYf1

Settings
# exclusive inclusive rows x rows loops node
1. 2,610.029 40,215.302 ↑ 930.5 265,524 1

Sort (cost=457,713,241.29..458,330,901.59 rows=247,064,121 width=3,345) (actual time=40,172.174..40,215.302 rows=265,524 loops=1)

  • Output: ((ui.lastname)::character varying(50)), ((ui.firstname)::character varying(50)), ui.duplicatename, ((login.loginname)::character varying(255)), ((ui.displayname)::text), ((ui.externalid)::character varying(255)), ui.id, ((cl.name)::character varying(255)), cl.id, ((pj.name)::character varying(255)), pj.id, ((tk.name)::character varying(255)), tk.id, ((meexpensecostbilling_facts_g45.timeentryinfo1)::character varying), meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, eh.effectivedateutc, tah.timestamputc, ((ui_1.lastname)::character varying(50)), ((ui_1.firstname)::character varying(50)), ts.id, ((esheetapprovalhistorykeyvalue9.uri)::text), ((sheetapprovalhistorykeyvalue10.uri)::text), tah.action, ((ui_1.displayname)::text), ts.startdate, meexpensecostbilling_facts_g45.userid
  • Sort Key: ((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", ((ui.externalid)::character varying(255)) COLLATE "en_US", ((cl.name)::character varying(255)) COLLATE "en_US", ((pj.name)::character varying(255)) COLLATE "en_US", ((tk.name)::character varying(255)) COLLATE "en_US", ((meexpensecostbilling_facts_g45.timeentryinfo1)::character varying) COLLATE "en_US", meexpensecostbilling_facts_g45.entrydatesheetdate
  • Sort Method: quicksort Memory: 65,543kB
  • Buffers: shared hit=12,212,045
2.          

Initplan (for Sort)

3. 0.005 0.005 ↑ 1.0 1 1

Seq Scan on "654d229342194608814f1faf2d408658".systeminformation (cost=0.00..1.01 rows=1 width=4) (actual time=0.005..0.005 rows=1 loops=1)

  • Output: systeminformation.basecurrencyid
  • Buffers: shared hit=1
4. 71.359 37,605.268 ↑ 930.5 265,524 1

Hash Left Join (cost=7,815,823.13..16,002,354.52 rows=247,064,121 width=3,345) (actual time=37,432.486..37,605.268 rows=265,524 loops=1)

  • Output: ui.lastname, ui.firstname, ui.duplicatename, login.loginname, ui.displayname, ui.externalid, ui.id, cl.name, cl.id, pj.name, pj.id, tk.name, tk.id, meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, eh.effectivedateutc, tah.timestamputc, ui_1.lastname, ui_1.firstname, ts.id, esheetapprovalhistorykeyvalue9.uri, sheetapprovalhistorykeyvalue10.uri, tah.action, ui_1.displayname, ts.startdate, meexpensecostbilling_facts_g45.userid
  • Hash Cond: (meexpensecostbilling_facts_g45.timesheetid = ts.id)
  • Buffers: shared hit=12,212,045
5. 82.832 22,565.098 ↑ 930.5 265,524 1

Merge Right Join (cost=7,153,683.42..11,943,083.15 rows=247,064,121 width=337) (actual time=22,461.875..22,565.098 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id, login.loginname, cl.name, cl.id, tk.name, tk.id, eh.effectivedateutc, ui_1.lastname, ui_1.firstname, ui_1.displayname
  • Merge Cond: ("*SELECT* 1".expenseid = meexpensecostbilling_facts_g45.expenseid)
  • Buffers: shared hit=4,647,925
6. 0.003 59.969 ↑ 85,640.0 1 1

Merge Left Join (cost=10,028.38..1,093,252.20 rows=85,640 width=42) (actual time=59.969..59.969 rows=1 loops=1)

  • Output: "*SELECT* 1".expenseid, eh.effectivedateutc, ui_1.lastname, ui_1.firstname, ui_1.displayname
  • Merge Cond: ("*SELECT* 1".expenseid = eh.expenseid)
  • Buffers: shared hit=574
7. 0.006 59.681 ↑ 85,640.0 1 1

Merge Join (cost=10,021.51..14,250.83 rows=85,640 width=4) (actual time=59.680..59.681 rows=1 loops=1)

  • Output: "*SELECT* 1".expenseid
  • Merge Cond: (ex.id = "*SELECT* 1".expenseid)
  • Buffers: shared hit=530
8. 0.039 0.039 ↑ 85,641.0 1 1

Index Only Scan using expense_pkey on "654d229342194608814f1faf2d408658".expense ex (cost=0.29..2,730.91 rows=85,641 width=4) (actual time=0.039..0.039 rows=1 loops=1)

  • Output: ex.id
  • Heap Fetches: 1
  • Buffers: shared hit=3
9. 12.872 59.636 ↑ 85,640.0 1 1

Sort (cost=10,021.22..10,235.32 rows=85,640 width=4) (actual time=59.636..59.636 rows=1 loops=1)

  • Output: "*SELECT* 1".expenseid
  • Sort Key: "*SELECT* 1".expenseid
  • Sort Method: quicksort Memory: 7,087kB
  • Buffers: shared hit=527
10. 8.573 46.764 ↓ 1.0 85,641 1

Append (cost=0.54..3,004.74 rows=85,640 width=4) (actual time=0.032..46.764 rows=85,641 loops=1)

  • Buffers: shared hit=527
11. 9.244 38.185 ↓ 1.0 85,641 1

Subquery Scan on *SELECT* 1 (cost=0.54..3,003.71 rows=85,639 width=4) (actual time=0.032..38.185 rows=85,641 loops=1)

  • Output: "*SELECT* 1".expenseid
  • Buffers: shared hit=526
12. 17.452 28.941 ↓ 1.0 85,641 1

Merge Anti Join (cost=0.54..2,147.32 rows=85,639 width=475) (actual time=0.031..28.941 rows=85,641 loops=1)

  • Output: dm_expenselist_facts.expenseid, NULL::text, NULL::date, NULL::text, NULL::text, NULL::numeric(19,4), NULL::numeric(19,4), NULL::numeric(19,4), NULL::numeric(19,4), NULL::integer, NULL::text, NULL::text, NULL::text, NULL::integer, NULL::text, NULL::text, NULL::integer, NULL::integer, NULL::integer, NULL::text, NULL::text, NULL::boolean, NULL::boolean, NULL::timestamp without time zone, NULL::boolean, NULL::date, NULL::integer, NULL::numeric(19,4), NULL::timestamp without time zone
  • Merge Cond: (dm_expenselist_facts.expenseid = dm_expenselist_realtime_facts.expenseid)
  • Buffers: shared hit=526
13. 11.482 11.482 ↑ 1.0 85,641 1

Index Only Scan using dm_expenselist_facts_pkey on "654d229342194608814f1faf2d408658".dm_expenselist_facts (cost=0.42..1,930.03 rows=85,641 width=4) (actual time=0.023..11.482 rows=85,641 loops=1)

  • Output: dm_expenselist_facts.expenseid
  • Heap Fetches: 0
  • Buffers: shared hit=525
14. 0.007 0.007 ↓ 0.0 0 1

Index Only Scan using dm_expenselist_realtime_facts_pkey on "654d229342194608814f1faf2d408658".dm_expenselist_realtime_facts (cost=0.13..3.16 rows=2 width=4) (actual time=0.007..0.007 rows=0 loops=1)

  • Output: dm_expenselist_realtime_facts.expenseid
  • Heap Fetches: 0
  • Buffers: shared hit=1
15. 0.000 0.006 ↓ 0.0 0 1

Subquery Scan on *SELECT* 2 (cost=0.00..1.03 rows=1 width=4) (actual time=0.006..0.006 rows=0 loops=1)

  • Output: "*SELECT* 2".expenseid
  • Buffers: shared hit=1
16. 0.006 0.006 ↓ 0.0 0 1

Seq Scan on "654d229342194608814f1faf2d408658".dm_expenselist_realtime_facts dm_expenselist_realtime_facts_1 (cost=0.00..1.02 rows=1 width=475) (actual time=0.005..0.006 rows=0 loops=1)

  • Output: dm_expenselist_realtime_facts_1.expenseid, NULL::text, NULL::date, NULL::text, NULL::text, NULL::numeric(19,4), NULL::numeric(19,4), NULL::numeric(19,4), NULL::numeric(19,4), NULL::integer, NULL::text, NULL::text, NULL::text, NULL::integer, NULL::text, NULL::text, NULL::integer, NULL::integer, NULL::integer, NULL::text, NULL::text, NULL::boolean, NULL::boolean, NULL::timestamp without time zone, NULL::boolean, NULL::date, NULL::integer, NULL::numeric(19,4), NULL::timestamp without time zone
  • Filter: (NOT dm_expenselist_realtime_facts_1.deleted)
  • Buffers: shared hit=1
17. 0.002 0.285 ↑ 599.0 1 1

Materialize (cost=6.87..1,078,779.72 rows=599 width=42) (actual time=0.285..0.285 rows=1 loops=1)

  • Output: eh.effectivedateutc, eh.expenseid, ui_1.lastname, ui_1.firstname, ui_1.displayname
  • Buffers: shared hit=44
18. 0.002 0.283 ↑ 599.0 1 1

Nested Loop Left Join (cost=6.87..1,078,778.22 rows=599 width=42) (actual time=0.283..0.283 rows=1 loops=1)

  • Output: eh.effectivedateutc, eh.expenseid, ui_1.lastname, ui_1.firstname, ui_1.displayname
  • Buffers: shared hit=44
19. 0.003 0.250 ↑ 599.0 1 1

Nested Loop Left Join (cost=6.44..1,070,780.16 rows=599 width=46) (actual time=0.250..0.250 rows=1 loops=1)

  • Output: eh.effectivedateutc, eh.id, eh.expenseid, ui_1.lastname, ui_1.firstname, ui_1.displayname
  • Inner Unique: true
  • Buffers: shared hit=33
20. 0.002 0.246 ↑ 599.0 1 1

Nested Loop Left Join (cost=6.15..1,070,595.60 rows=599 width=86) (actual time=0.246..0.246 rows=1 loops=1)

  • Output: eh.effectivedateutc, eh.id, eh.expenseid, effective.uri
  • Buffers: shared hit=33
21. 0.002 0.206 ↑ 599.0 1 1

Nested Loop Left Join (cost=5.72..1,062,591.55 rows=599 width=16) (actual time=0.206..0.206 rows=1 loops=1)

  • Output: eh.effectivedateutc, eh.id, eh.expenseid
  • Buffers: shared hit=22
22. 0.051 0.153 ↑ 599.0 1 1

Index Scan using ix2exhexpenseidid on "654d229342194608814f1faf2d408658".exphistory eh (cost=5.29..1,054,593.48 rows=599 width=16) (actual time=0.153..0.153 rows=1 loops=1)

  • Output: eh.id, eh.expenseid, eh.action, eh.approvalcomments, eh.effectivedateutc, eh.approvalagenttype, eh.userid, eh.systemprocessidentifier
  • Filter: ((NOT (hashed SubPlan 2)) AND (eh.id = (SubPlan 3)))
  • Buffers: shared hit=11
23.          

SubPlan (for Index Scan)

24. 0.034 0.084 ↑ 1.0 67 1

Hash Join (cost=2.85..4.70 rows=67 width=4) (actual time=0.062..0.084 rows=67 loops=1)

  • Output: ean.expenseid
  • Inner Unique: true
  • Hash Cond: (ear.nodeid = ean.id)
  • Buffers: shared hit=2
25. 0.011 0.011 ↑ 1.0 67 1

Seq Scan on "654d229342194608814f1faf2d408658".expenseapprovalrequest ear (cost=0.00..1.67 rows=67 width=16) (actual time=0.006..0.011 rows=67 loops=1)

  • Output: ear.id, ear.effectivedateutc, ear.approverid, ear.nodeid, ear.remindersentutc, ear.overduesentutc, ear.waitingbatchsentutc, ear.approvalagenttype, ear.systemprocessidentifier
  • Buffers: shared hit=1
26. 0.014 0.039 ↑ 1.0 82 1

Hash (cost=1.82..1.82 rows=82 width=20) (actual time=0.039..0.039 rows=82 loops=1)

  • Output: ean.expenseid, ean.id
  • Buckets: 1,024 Batches: 1 Memory Usage: 13kB
  • Buffers: shared hit=1
27. 0.025 0.025 ↑ 1.0 82 1

Seq Scan on "654d229342194608814f1faf2d408658".expenseapprovalnodes ean (cost=0.00..1.82 rows=82 width=20) (actual time=0.005..0.025 rows=82 loops=1)

  • Output: ean.expenseid, ean.id
  • Buffers: shared hit=1
28. 0.007 0.018 ↑ 1.0 1 1

Aggregate (cost=4.36..4.37 rows=1 width=4) (actual time=0.017..0.018 rows=1 loops=1)

  • Output: max(eh1.id)
  • Buffers: shared hit=5
29. 0.011 0.011 ↑ 1.0 1 1

Index Scan using ix2exhexpenseidid on "654d229342194608814f1faf2d408658".exphistory eh1 (cost=0.42..4.36 rows=1 width=4) (actual time=0.008..0.011 rows=1 loops=1)

  • Output: eh1.id, eh1.expenseid, eh1.action, eh1.approvalcomments, eh1.effectivedateutc, eh1.approvalagenttype, eh1.userid, eh1.systemprocessidentifier
  • Index Cond: (eh1.expenseid = eh.expenseid)
  • Filter: (eh1.action = ANY ('{2,3,6}'::integer[]))
  • Rows Removed by Filter: 1
  • Buffers: shared hit=5
30. 0.051 0.051 ↓ 0.0 0 1

Index Scan using ixexahkvexphistoryid on "654d229342194608814f1faf2d408658".expenseapprovalhistorykeyvalue actual (cost=0.43..13.34 rows=1 width=74) (actual time=0.051..0.051 rows=0 loops=1)

  • Output: actual.id, actual.exphistoryid, actual.parentid, actual.index, actual.key, actual.uri, actual.slug, actual."boolean", actual.date, actual.number, actual.text, actual."time", actual.timespan, actual.daterange_startdate, actual.daterange_enddate, actual.daterange_relativedaterangeuri, actual.daterange_relativedaterangeasofdate, actual.workdayduration_decimalworkdays, actual.workdayduration_workdays, actual.workdayduration_hours, actual.workdayduration_minutes
  • Index Cond: (actual.exphistoryid = eh.id)
  • Filter: (upper(actual.key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-ACTUAL-USER'::text)
  • Rows Removed by Filter: 14
  • Buffers: shared hit=11
31. 0.038 0.038 ↓ 0.0 0 1

Index Scan using ixexahkvexphistoryid on "654d229342194608814f1faf2d408658".expenseapprovalhistorykeyvalue effective (cost=0.43..13.34 rows=2 width=74) (actual time=0.038..0.038 rows=0 loops=1)

  • Output: effective.id, effective.exphistoryid, effective.parentid, effective.index, effective.key, effective.uri, effective.slug, effective."boolean", effective.date, effective.number, effective.text, effective."time", effective.timespan, effective.daterange_startdate, effective.daterange_enddate, effective.daterange_relativedaterangeuri, effective.daterange_relativedaterangeasofdate, effective.workdayduration_decimalworkdays, effective.workdayduration_workdays, effective.workdayduration_hours, effective.workdayduration_minutes
  • Index Cond: (effective.exphistoryid = eh.id)
  • Filter: (upper(effective.key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-EFFECTIVE-USER'::text)
  • Rows Removed by Filter: 14
  • Buffers: shared hit=11
32. 0.001 0.001 ↓ 0.0 0 1

Index Scan using userinfo_pkey on "654d229342194608814f1faf2d408658".userinfo ui_1 (cost=0.29..0.31 rows=1 width=34) (actual time=0.001..0.001 rows=0 loops=1)

  • Output: ui_1.id, ui_1.firstname, ui_1.lastname, ui_1.slug, ui_1.email, ui_1.startdate, ui_1.enddate, ui_1.externalid, ui_1.disabled, ui_1.info1, ui_1.info2, ui_1.info3, ui_1.info4, ui_1.info5, ui_1.info6, ui_1.info7, ui_1.info8, ui_1.info9, ui_1.info10, ui_1.info11, ui_1.info12, ui_1.info13, ui_1.info14, ui_1.info15, ui_1.info16, ui_1.info17, ui_1.info18, ui_1.info19, ui_1.info20, ui_1.info21, ui_1.info22, ui_1.info23, ui_1.info24, ui_1.info25, ui_1.info26, ui_1.info27, ui_1.info28, ui_1.info29, ui_1.info30, ui_1.info31, ui_1.info32, ui_1.info33, ui_1.info34, ui_1.info35, ui_1.info36, ui_1.info37, ui_1.info38, ui_1.info39, ui_1.info40, ui_1.info41, ui_1.info42, ui_1.info43, ui_1.info44, ui_1.info45, ui_1.info46, ui_1.info47, ui_1.info48, ui_1.info49, ui_1.info50, ui_1.languageid, ui_1.employeetypeid, ui_1.timezoneid, ui_1.duplicatename, ui_1.displayname, ui_1.issampleuser, ui_1.defaultactivityid, ui_1.guidid, ui_1.customdisplayname
  • Index Cond: ((split_part(effective.uri, ':'::text, 5))::integer = ui_1.id)
33. 0.031 0.031 ↓ 0.0 0 1

Index Scan using ixexahkvexphistoryid on "654d229342194608814f1faf2d408658".expenseapprovalhistorykeyvalue kvar (cost=0.43..13.34 rows=1 width=4) (actual time=0.031..0.031 rows=0 loops=1)

  • Output: kvar.id, kvar.exphistoryid, kvar.parentid, kvar.index, kvar.key, kvar.uri, kvar.slug, kvar."boolean", kvar.date, kvar.number, kvar.text, kvar."time", kvar.timespan, kvar.daterange_startdate, kvar.daterange_enddate, kvar.daterange_relativedaterangeuri, kvar.daterange_relativedaterangeasofdate, kvar.workdayduration_decimalworkdays, kvar.workdayduration_workdays, kvar.workdayduration_hours, kvar.workdayduration_minutes
  • Index Cond: (kvar.exphistoryid = eh.id)
  • Filter: (upper(kvar.key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:COMPLETED-APPROVAL-REQUEST-APPROVAL-AGENT-DESCRIPTION-APPROVER-ROLE'::text)
  • Rows Removed by Filter: 14
  • Buffers: shared hit=11
34. 134.676 22,422.297 ↑ 2.2 265,524 1

Sort (cost=7,143,655.04..7,145,097.49 rows=576,983 width=303) (actual time=22,401.901..22,422.297 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id, login.loginname, cl.name, cl.id, tk.name, tk.id
  • Sort Key: meexpensecostbilling_facts_g45.expenseid
  • Sort Method: quicksort Memory: 65,543kB
  • Buffers: shared hit=4,647,351
35. 87.399 22,287.621 ↑ 2.2 265,524 1

Hash Left Join (cost=61,668.14..7,088,443.05 rows=576,983 width=303) (actual time=16,218.702..22,287.621 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id, login.loginname, cl.name, cl.id, tk.name, tk.id
  • Hash Cond: (tk.estimatedcostcurrencyid = exchangerate.fixedcurrencyid)
  • Buffers: shared hit=4,647,351
36. 155.837 22,200.180 ↑ 2.2 265,524 1

Hash Left Join (cost=61,665.96..7,086,204.52 rows=576,983 width=307) (actual time=16,218.647..22,200.180 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id, login.loginname, cl.name, cl.id, tk.name, tk.id, tk.estimatedcostcurrencyid
  • Inner Unique: true
  • Hash Cond: (meexpensecostbilling_facts_g45.taskid = tk.id)
  • Buffers: shared hit=4,647,348
37. 92.736 21,671.073 ↑ 2.2 265,524 1

Hash Left Join (cost=34,325.10..7,057,349.07 rows=576,983 width=267) (actual time=15,841.499..21,671.073 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.taskid, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id, login.loginname, cl.name, cl.id
  • Inner Unique: true
  • Hash Cond: (pj.clientid = cl.id)
  • Buffers: shared hit=4,633,755
38. 72.036 21,578.148 ↑ 2.2 265,524 1

Hash Left Join (cost=34,301.53..7,055,798.65 rows=576,983 width=244) (actual time=15,841.300..21,578.148 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.taskid, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, pj.clientid, ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id, login.loginname
  • Inner Unique: true
  • Hash Cond: (ui.id = login.userid)
  • Buffers: shared hit=4,633,743
39. 75.094 21,503.773 ↑ 2.2 265,524 1

Hash Left Join (cost=34,034.25..7,054,015.73 rows=576,983 width=230) (actual time=15,838.910..21,503.773 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.taskid, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, pj.clientid, ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id
  • Inner Unique: true
  • Hash Cond: (meexpensecostbilling_facts_g45.userid = ui.id)
  • Buffers: shared hit=4,633,614
40. 92.978 21,424.435 ↑ 2.2 265,524 1

Hash Left Join (cost=33,769.96..7,052,235.82 rows=576,983 width=182) (actual time=15,834.615..21,424.435 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.taskid, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.timesheetid, pj.name, pj.id, pj.clientid
  • Inner Unique: true
  • Hash Cond: (meexpensecostbilling_facts_g45.projectid = pj.id)
  • Buffers: shared hit=4,633,488
41. 585.969 21,326.188 ↑ 2.2 265,524 1

Subquery Scan on meexpensecostbilling_facts_g45 (cost=33,102.29..7,050,052.98 rows=576,983 width=136) (actual time=15,829.256..21,326.188 rows=265,524 loops=1)

  • Output: meexpensecostbilling_facts_g45.userid, meexpensecostbilling_facts_g45.projectid, meexpensecostbilling_facts_g45.taskid, meexpensecostbilling_facts_g45.entrydatesheetdate, meexpensecostbilling_facts_g45.entrydateincurreddate, meexpensecostbilling_facts_g45.timesheetstartdate, meexpensecostbilling_facts_g45.timesheetenddate, meexpensecostbilling_facts_g45.timesheetid, meexpensecostbilling_facts_g45.timeallocationid, meexpensecostbilling_facts_g45.comments, meexpensecostbilling_facts_g45.activityid, meexpensecostbilling_facts_g45.billingrateid, meexpensecostbilling_facts_g45.duration, meexpensecostbilling_facts_g45.billableduration, meexpensecostbilling_facts_g45.nonbillableduration, meexpensecostbilling_facts_g45.capexduration, meexpensecostbilling_facts_g45.opexduration, meexpensecostbilling_facts_g45.notsubmittedduration, meexpensecostbilling_facts_g45.notapprovedduration, meexpensecostbilling_facts_g45.expenseid, meexpensecostbilling_facts_g45.expenseentryid, meexpensecostbilling_facts_g45.expenseentrydescription, meexpensecostbilling_facts_g45.expensetypeid, meexpensecostbilling_facts_g45.expenseinbasecurrency, meexpensecostbilling_facts_g45.billableexpenseinbasecurrency, meexpensecostbilling_facts_g45.nonbillableexpenseinbasecurrency, meexpensecostbilling_facts_g45.allocationid, meexpensecostbilling_facts_g45.estimatedduration, meexpensecostbilling_facts_g45.timeentryinfo1, meexpensecostbilling_facts_g45.timeentryinfo2, meexpensecostbilling_facts_g45.timeentryinfo3, meexpensecostbilling_facts_g45.timeentryinfo4, meexpensecostbilling_facts_g45.timeentryinfo5, meexpensecostbilling_facts_g45.expenseentryinfo1, meexpensecostbilling_facts_g45.expenseentryinfo2, meexpensecostbilling_facts_g45.expenseentryinfo3, meexpensecostbilling_facts_g45.expenseentryinfo4, meexpensecostbilling_facts_g45.expenseentryinfo5, meexpensecostbilling_facts_g45.trackingnumber
  • Filter: (((meexpensecostbilling_facts_g45.entrydatesheetdate >= '2020-07-20'::date) AND (meexpensecostbilling_facts_g45.entrydatesheetdate <= '2020-07-26'::date)) OR (meexpensecostbilling_facts_g45.entrydatesheetdate IS NULL))
  • Rows Removed by Filter: 4,815,223
  • Buffers: shared hit=4,633,066
42. 701.062 20,740.219 ↑ 11.4 5,080,747 1

Append (cost=33,102.29..6,182,409.30 rows=57,842,912 width=756) (actual time=321.275..20,740.219 rows=5,080,747 loops=1)

  • Buffers: shared hit=4,633,066
43. 1,253.382 14,714.277 ↑ 12.9 4,479,680 1

Result (cost=33,102.29..5,971,971.81 rows=57,689,397 width=756) (actual time=321.274..14,714.277 rows=4,479,680 loops=1)

  • Output: dm_projecttimeallocation_facts.userid, dm_projecttimeallocation_facts.projectid, dm_projecttimeallocation_facts.taskid, dm_projecttimeallocation_facts.entrydate, dm_projecttimeallocation_facts.entrydate, dmvts.startdate, dmvts.enddate, dmvts.id, dm_projecttimeallocation_facts.id, dm_projecttimeallocation_facts.comments, dm_projecttimeallocation_facts.activityid, dm_projecttimeallocation_facts.billingrateid, dm_projecttimeallocation_facts.duration, (CASE WHEN (dm_projecttimeallocation_facts.billingrateid IS NOT NULL) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END), (CASE WHEN (dm_projecttimeallocation_facts.billingrateid IS NULL) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END), (CASE WHEN (COALESCE(tk_1.costtype, pj_1.costtype) = 0) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END), (CASE WHEN (COALESCE(tk_1.costtype, pj_1.costtype) = 1) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END), (CASE WHEN (dmvts.approvalstatus = ANY ('{0,3}'::integer[])) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END), (CASE WHEN (dmvts.approvalstatus = 1) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END), (NULL::integer), (NULL::integer), (NULL::text), (NULL::integer), (NULL::numeric), (NULL::numeric), (NULL::numeric), (CASE WHEN (ptma.id IS NOT NULL) THEN ptma.id ELSE NULL::uuid END), (CASE WHEN (ptma.duration IS NOT NULL) THEN ptma.duration ELSE NULL::interval END), dm_projecttimeallocation_facts.timeentryinfo1, dm_projecttimeallocation_facts.timeentryinfo2, dm_projecttimeallocation_facts.timeentryinfo3, dm_projecttimeallocation_facts.timeentryinfo4, dm_projecttimeallocation_facts.timeentryinfo5, (NULL::text), (NULL::text), (NULL::text), (NULL::text), (NULL::text), (NULL::text)
  • Buffers: shared hit=2,834,506
44. 606.417 13,460.895 ↑ 12.9 4,479,680 1

Append (cost=33,102.29..5,106,630.85 rows=57,689,397 width=748) (actual time=321.271..13,460.895 rows=4,479,680 loops=1)

  • Buffers: shared hit=2,834,506
45. 2,569.124 12,817.785 ↑ 12.9 4,475,263 1

Hash Left Join (cost=33,102.29..4,513,837.58 rows=57,689,396 width=1,150) (actual time=321.270..12,817.785 rows=4,475,263 loops=1)

  • Output: dm_projecttimeallocation_facts.userid, dm_projecttimeallocation_facts.projectid, dm_projecttimeallocation_facts.taskid, dm_projecttimeallocation_facts.entrydate, dm_projecttimeallocation_facts.entrydate, dmvts.startdate, dmvts.enddate, dmvts.id, dm_projecttimeallocation_facts.id, dm_projecttimeallocation_facts.comments, dm_projecttimeallocation_facts.activityid, dm_projecttimeallocation_facts.billingrateid, dm_projecttimeallocation_facts.duration, CASE WHEN (dm_projecttimeallocation_facts.billingrateid IS NOT NULL) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END, CASE WHEN (dm_projecttimeallocation_facts.billingrateid IS NULL) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END, CASE WHEN (COALESCE(tk_1.costtype, pj_1.costtype) = 0) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END, CASE WHEN (COALESCE(tk_1.costtype, pj_1.costtype) = 1) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END, CASE WHEN (dmvts.approvalstatus = ANY ('{0,3}'::integer[])) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END, CASE WHEN (dmvts.approvalstatus = 1) THEN dm_projecttimeallocation_facts.duration ELSE '00:00:00'::interval END, NULL::integer, NULL::integer, NULL::text, NULL::integer, NULL::numeric, NULL::numeric, NULL::numeric, CASE WHEN (ptma.id IS NOT NULL) THEN ptma.id ELSE NULL::uuid END, CASE WHEN (ptma.duration IS NOT NULL) THEN ptma.duration ELSE NULL::interval END, dm_projecttimeallocation_facts.timeentryinfo1, dm_projecttimeallocation_facts.timeentryinfo2, dm_projecttimeallocation_facts.timeentryinfo3, dm_projecttimeallocation_facts.timeentryinfo4, dm_projecttimeallocation_facts.timeentryinfo5, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text
  • Inner Unique: true
  • Hash Cond: (dm_projecttimeallocation_facts.taskid = tk_1.id)
  • Buffers: shared hit=2,795,178
46. 1,440.054 9,947.582 ↑ 12.9 4,475,263 1

Hash Left Join (cost=5,761.43..3,758,167.13 rows=57,689,396 width=726) (actual time=16.380..9,947.582 rows=4,475,263 loops=1)

  • Output: dm_projecttimeallocation_facts.userid, dm_projecttimeallocation_facts.projectid, dm_projecttimeallocation_facts.taskid, dm_projecttimeallocation_facts.entrydate, dm_projecttimeallocation_facts.id, dm_projecttimeallocation_facts.comments, dm_projecttimeallocation_facts.activityid, dm_projecttimeallocation_facts.billingrateid, dm_projecttimeallocation_facts.duration, dm_projecttimeallocation_facts.timeentryinfo1, dm_projecttimeallocation_facts.timeentryinfo2, dm_projecttimeallocation_facts.timeentryinfo3, dm_projecttimeallocation_facts.timeentryinfo4, dm_projecttimeallocation_facts.timeentryinfo5, ptma.id, ptma.duration, dmvts.startdate, dmvts.enddate, dmvts.id, dmvts.approvalstatus, pj_1.costtype
  • Inner Unique: true
  • Hash Cond: (dm_projecttimeallocation_facts.projectid = pj_1.id)
  • Buffers: shared hit=2,781,585
47. 2,505.809 8,502.796 ↑ 12.9 4,475,263 1

Merge Left Join (cost=5,093.75..3,606,007.80 rows=57,689,396 width=722) (actual time=11.627..8,502.796 rows=4,475,263 loops=1)

  • Output: dm_projecttimeallocation_facts.userid, dm_projecttimeallocation_facts.projectid, dm_projecttimeallocation_facts.taskid, dm_projecttimeallocation_facts.entrydate, dm_projecttimeallocation_facts.id, dm_projecttimeallocation_facts.comments, dm_projecttimeallocation_facts.activityid, dm_projecttimeallocation_facts.billingrateid, dm_projecttimeallocation_facts.duration, dm_projecttimeallocation_facts.timeentryinfo1, dm_projecttimeallocation_facts.timeentryinfo2, dm_projecttimeallocation_facts.timeentryinfo3, dm_projecttimeallocation_facts.timeentryinfo4, dm_projecttimeallocation_facts.timeentryinfo5, ptma.id, ptma.duration, dmvts.startdate, dmvts.enddate, dmvts.id, dmvts.approvalstatus
  • Merge Cond: (dm_projecttimeallocation_facts.userid = ptm.userid)
  • Join Filter: ((dm_projecttimeallocation_facts.projectid = ptm.projectid) AND (ptma.date = dm_projecttimeallocation_facts.entrydate))
  • Rows Removed by Join Filter: 10,628,565
  • Buffers: shared hit=2,781,163
48. 1,198.468 5,286.418 ↑ 12.9 4,475,263 1

Nested Loop (cost=0.85..1,778,882.82 rows=57,689,396 width=690) (actual time=0.278..5,286.418 rows=4,475,263 loops=1)

  • Output: dm_projecttimeallocation_facts.userid, dm_projecttimeallocation_facts.projectid, dm_projecttimeallocation_facts.taskid, dm_projecttimeallocation_facts.entrydate, dm_projecttimeallocation_facts.id, dm_projecttimeallocation_facts.comments, dm_projecttimeallocation_facts.activityid, dm_projecttimeallocation_facts.billingrateid, dm_projecttimeallocation_facts.duration, dm_projecttimeallocation_facts.timeentryinfo1, dm_projecttimeallocation_facts.timeentryinfo2, dm_projecttimeallocation_facts.timeentryinfo3, dm_projecttimeallocation_facts.timeentryinfo4, dm_projecttimeallocation_facts.timeentryinfo5, dmvts.startdate, dmvts.enddate, dmvts.id, dmvts.approvalstatus
  • Buffers: shared hit=2,761,560
49. 446.414 446.414 ↑ 1.0 455,192 1

Index Scan using uix2tsuseridstartdate on "654d229342194608814f1faf2d408658".timesheet dmvts (cost=0.42..12,802.30 rows=455,192 width=32) (actual time=0.036..446.414 rows=455,192 loops=1)

  • Output: dmvts.id, dmvts.userid, dmvts.startdate, dmvts.enddate, dmvts.approvalstatus, dmvts.duedate, dmvts.autosubmitdatetimeutc, dmvts.lastautosubmitattemptdatetimeutc, dmvts.createdonutc
  • Buffers: shared hit=76,421
50. 3,641.536 3,641.536 ↑ 9.8 10 455,192

Index Scan using ixpta2userid on "654d229342194608814f1faf2d408658".dm_projecttimeallocation_facts (cost=0.43..2.90 rows=98 width=662) (actual time=0.004..0.008 rows=10 loops=455,192)

  • Output: dm_projecttimeallocation_facts.id, dm_projecttimeallocation_facts.userid, dm_projecttimeallocation_facts.entrydate, dm_projecttimeallocation_facts.comments, dm_projecttimeallocation_facts.duration, dm_projecttimeallocation_facts.projectid, dm_projecttimeallocation_facts.taskid, dm_projecttimeallocation_facts.activityid, dm_projecttimeallocation_facts.billingrateid, dm_projecttimeallocation_facts.timeoffcodeid, dm_projecttimeallocation_facts.breaktypeid, dm_projecttimeallocation_facts.timesheetid, dm_projecttimeallocation_facts.timeentryinfo1, dm_projecttimeallocation_facts.timeentryinfo2, dm_projecttimeallocation_facts.timeentryinfo3, dm_projecttimeallocation_facts.timeentryinfo4, dm_projecttimeallocation_facts.timeentryinfo5, dm_projecttimeallocation_facts.timeoffinfo1, dm_projecttimeallocation_facts.timeoffinfo2, dm_projecttimeallocation_facts.timeoffinfo3, dm_projecttimeallocation_facts.timeoffinfo4, dm_projecttimeallocation_facts.timeoffinfo5, dm_projecttimeallocation_facts.userspecifiedclientid, dm_projecttimeallocation_facts.isbillable
  • Index Cond: ((dm_projecttimeallocation_facts.userid = dmvts.userid) AND (dm_projecttimeallocation_facts.entrydate >= dmvts.startdate) AND (dm_projecttimeallocation_facts.entrydate <= dmvts.enddate))
  • Filter: ((dm_projecttimeallocation_facts.timeoffcodeid IS NULL) AND (dm_projecttimeallocation_facts.breaktypeid IS NULL))
  • Rows Removed by Filter: 0
  • Buffers: shared hit=2,685,139
51. 700.107 710.569 ↓ 2,174.6 10,629,277 1

Sort (cost=5,092.89..5,105.11 rows=4,888 width=44) (actual time=11.346..710.569 rows=10,629,277 loops=1)

  • Output: ptma.id, ptma.duration, ptma.date, ptm.userid, ptm.projectid
  • Sort Key: ptm.userid
  • Sort Method: quicksort Memory: 574kB
  • Buffers: shared hit=19,603
52. 0.168 10.462 ↑ 1.0 4,888 1

Nested Loop (cost=0.42..4,793.38 rows=4,888 width=44) (actual time=0.015..10.462 rows=4,888 loops=1)

  • Output: ptma.id, ptma.duration, ptma.date, ptm.userid, ptm.projectid
  • Inner Unique: true
  • Buffers: shared hit=19,603
53. 0.518 0.518 ↑ 1.0 4,888 1

Seq Scan on "654d229342194608814f1faf2d408658".projectteammemberallocation ptma (cost=0.00..99.88 rows=4,888 width=52) (actual time=0.004..0.518 rows=4,888 loops=1)

  • Output: ptma.id, ptma.projectteammemberid, ptma.date, ptma.duration
  • Buffers: shared hit=51
54. 9.776 9.776 ↑ 1.0 1 4,888

Index Scan using projectteammember_pkey on "654d229342194608814f1faf2d408658".projectteammember ptm (cost=0.42..0.96 rows=1 width=24) (actual time=0.002..0.002 rows=1 loops=4,888)

  • Output: ptm.id, ptm.projectid, ptm.userid, ptm.departmentid, ptm.placeholderprojectroleid, ptm.index, ptm.placeholderdisplayname, ptm.locationid, ptm.divisionid, ptm.costcenterid, ptm.servicecenterid, ptm.departmentgroupid, ptm.employeetypegroupid
  • Index Cond: (ptm.id = ptma.projectteammemberid)
  • Buffers: shared hit=19,552
55. 1.583 4.732 ↑ 1.0 10,919 1

Hash (cost=531.19..531.19 rows=10,919 width=8) (actual time=4.732..4.732 rows=10,919 loops=1)

  • Output: pj_1.costtype, pj_1.id
  • Buckets: 16,384 Batches: 1 Memory Usage: 512kB
  • Buffers: shared hit=422
56. 3.149 3.149 ↑ 1.0 10,919 1

Seq Scan on "654d229342194608814f1faf2d408658".project pj_1 (cost=0.00..531.19 rows=10,919 width=8) (actual time=0.003..3.149 rows=10,919 loops=1)

  • Output: pj_1.costtype, pj_1.id
  • Buffers: shared hit=422
57. 139.493 301.079 ↑ 1.0 611,016 1

Hash (cost=19,703.16..19,703.16 rows=611,016 width=8) (actual time=301.079..301.079 rows=611,016 loops=1)

  • Output: tk_1.costtype, tk_1.id
  • Buckets: 1,048,576 Batches: 1 Memory Usage: 29,674kB
  • Buffers: shared hit=13,593
58. 161.586 161.586 ↑ 1.0 611,016 1

Seq Scan on "654d229342194608814f1faf2d408658".task tk_1 (cost=0.00..19,703.16 rows=611,016 width=8) (actual time=0.007..161.586 rows=611,016 loops=1)

  • Output: tk_1.costtype, tk_1.id
  • Buffers: shared hit=13,593
59. 1.649 36.693 ↓ 4,417.0 4,417 1

Subquery Scan on *SELECT* 2_1 (cost=0.85..15,899.31 rows=1 width=748) (actual time=0.039..36.693 rows=4,417 loops=1)

  • Output: "*SELECT* 2_1".userid, "*SELECT* 2_1".projectid, NULL::integer, "*SELECT* 2_1".entrydatesheetdate, "*SELECT* 2_1".entrydateincurreddate, NULL::date, NULL::date, NULL::uuid, NULL::uuid, NULL::text, NULL::integer, NULL::uuid, NULL::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, NULL::integer, NULL::integer, NULL::text, NULL::integer, NULL::numeric, NULL::numeric, NULL::numeric, "*SELECT* 2_1".allocationid, "*SELECT* 2_1".estimatedduration, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text
  • Buffers: shared hit=39,328
60. 6.424 35.044 ↓ 4,417.0 4,417 1

Nested Loop Left Join (cost=0.85..15,899.30 rows=1 width=748) (actual time=0.038..35.044 rows=4,417 loops=1)

  • Output: ptm_1.userid, ptm_1.projectid, NULL::integer, ptma_1.date, ptma_1.date, NULL::date, NULL::date, NULL::uuid, NULL::uuid, NULL::text, NULL::integer, NULL::uuid, NULL::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, '00:00:00'::interval, NULL::integer, NULL::integer, NULL::text, NULL::integer, NULL::numeric, NULL::numeric, NULL::numeric, ptma_1.id, ptma_1.duration, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text
  • Filter: (dm_projecttimeallocation_facts_1.id IS NULL)
  • Rows Removed by Filter: 799
  • Buffers: shared hit=39,328
61. 3.261 13.956 ↑ 1.0 4,888 1

Nested Loop (cost=0.42..4,793.38 rows=4,888 width=44) (actual time=0.026..13.956 rows=4,888 loops=1)

  • Output: ptma_1.date, ptma_1.id, ptma_1.duration, ptm_1.userid, ptm_1.projectid
  • Inner Unique: true
  • Buffers: shared hit=19,603
62. 0.919 0.919 ↑ 1.0 4,888 1

Seq Scan on "654d229342194608814f1faf2d408658".projectteammemberallocation ptma_1 (cost=0.00..99.88 rows=4,888 width=52) (actual time=0.006..0.919 rows=4,888 loops=1)

  • Output: ptma_1.id, ptma_1.projectteammemberid, ptma_1.date, ptma_1.duration
  • Filter: (ptma_1.id IS NOT NULL)
  • Buffers: shared hit=51
63. 9.776 9.776 ↑ 1.0 1 4,888

Index Scan using projectteammember_pkey on "654d229342194608814f1faf2d408658".projectteammember ptm_1 (cost=0.42..0.96 rows=1 width=24) (actual time=0.002..0.002 rows=1 loops=4,888)

  • Output: ptm_1.id, ptm_1.projectid, ptm_1.userid, ptm_1.departmentid, ptm_1.placeholderprojectroleid, ptm_1.index, ptm_1.placeholderdisplayname, ptm_1.locationid, ptm_1.divisionid, ptm_1.costcenterid, ptm_1.servicecenterid, ptm_1.departmentgroupid, ptm_1.employeetypegroupid
  • Index Cond: (ptm_1.id = ptma_1.projectteammemberid)
  • Buffers: shared hit=19,552
64. 14.664 14.664 ↓ 0.0 0 4,888

Index Scan using ixpta2userid on "654d229342194608814f1faf2d408658".dm_projecttimeallocation_facts dm_projecttimeallocation_facts_1 (cost=0.43..2.26 rows=1 width=28) (actual time=0.003..0.003 rows=0 loops=4,888)

  • Output: dm_projecttimeallocation_facts_1.id, dm_projecttimeallocation_facts_1.userid, dm_projecttimeallocation_facts_1.entrydate, dm_projecttimeallocation_facts_1.comments, dm_projecttimeallocation_facts_1.duration, dm_projecttimeallocation_facts_1.projectid, dm_projecttimeallocation_facts_1.taskid, dm_projecttimeallocation_facts_1.activityid, dm_projecttimeallocation_facts_1.billingrateid, dm_projecttimeallocation_facts_1.timeoffcodeid, dm_projecttimeallocation_facts_1.breaktypeid, dm_projecttimeallocation_facts_1.timesheetid, dm_projecttimeallocation_facts_1.timeentryinfo1, dm_projecttimeallocation_facts_1.timeentryinfo2, dm_projecttimeallocation_facts_1.timeentryinfo3, dm_projecttimeallocation_facts_1.timeentryinfo4, dm_projecttimeallocation_facts_1.timeentryinfo5, dm_projecttimeallocation_facts_1.timeoffinfo1, dm_projecttimeallocation_facts_1.timeoffinfo2, dm_projecttimeallocation_facts_1.timeoffinfo3, dm_projecttimeallocation_facts_1.timeoffinfo4, dm_projecttimeallocation_facts_1.timeoffinfo5, dm_projecttimeallocation_facts_1.userspecifiedclientid, dm_projecttimeallocation_facts_1.isbillable
  • Index Cond: ((ptm_1.userid = dm_projecttimeallocation_facts_1.userid) AND (ptma_1.date = dm_projecttimeallocation_facts_1.entrydate))
  • Filter: ((dm_projecttimeallocation_facts_1.timeoffcodeid IS NULL) AND (dm_projecttimeallocation_facts_1.breaktypeid IS NULL) AND (ptm_1.projectid = dm_projecttimeallocation_facts_1.projectid))
  • Rows Removed by Filter: 2
  • Buffers: shared hit=19,725
65. 98.185 872.545 ↓ 440.9 335,548 1

Subquery Scan on *SELECT* 3 (cost=3.06..2,552.56 rows=761 width=756) (actual time=0.077..872.545 rows=335,548 loops=1)

  • Output: "*SELECT* 3".userid, "*SELECT* 3".projectid, "*SELECT* 3".taskid, "*SELECT* 3".entrydatesheetdate, "*SELECT* 3".entrydateincurreddate, NULL::date, NULL::date, NULL::uuid, NULL::uuid, NULL::text, NULL::integer, NULL::uuid, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, "*SELECT* 3".expenseid, "*SELECT* 3".expenseentryid, "*SELECT* 3".expenseentrydescription, "*SELECT* 3".expensetypeid, "*SELECT* 3".expenseinbasecurrency, "*SELECT* 3".billableexpenseinbasecurrency, "*SELECT* 3".nonbillableexpenseinbasecurrency, NULL::uuid, NULL::interval, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, "*SELECT* 3".expenseentryinfo1, "*SELECT* 3".expenseentryinfo2, "*SELECT* 3".expenseentryinfo3, "*SELECT* 3".expenseentryinfo4, "*SELECT* 3".expenseentryinfo5, "*SELECT* 3".trackingnumber
  • Buffers: shared hit=402,781
66. 381.225 774.360 ↓ 440.9 335,548 1

Nested Loop (cost=3.06..2,544.95 rows=761 width=2,114) (actual time=0.074..774.360 rows=335,548 loops=1)

  • Output: ex_1.userid, ee.projectid, ee.taskid, ex_1.expensedate, ee.entrydate, NULL::date, NULL::date, NULL::uuid, NULL::uuid, NULL::text, NULL::integer, NULL::uuid, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, ex_1.id, ee.id, ee.description, ee.expensetypeid, ((ee.amount * ee.exchangevalue) * exchangerate_1.exchangevalue), CASE WHEN ee.billtoclient THEN ((ee.amount * ee.exchangevalue) * exchangerate_1.exchangevalue) ELSE '0'::numeric END, CASE WHEN (NOT ee.billtoclient) THEN ((ee.amount * ee.exchangevalue) * exchangerate_1.exchangevalue) ELSE '0'::numeric END, NULL::uuid, NULL::interval, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, ee.info1, ee.info2, ee.info3, ee.info4, ee.info5, ex_1.trackingnumber
  • Buffers: shared hit=402,781
67.          

Initplan (for Nested Loop)

68. 0.005 0.005 ↑ 1.0 1 1

Seq Scan on "654d229342194608814f1faf2d408658".systeminformation systeminformation_1 (cost=0.00..1.01 rows=1 width=4) (actual time=0.005..0.005 rows=1 loops=1)

  • Output: systeminformation_1.basecurrencyid
  • Buffers: shared hit=1
69. 38.508 50.566 ↓ 441.4 85,641 1

Hash Join (cost=1.62..2,415.41 rows=194 width=43) (actual time=0.051..50.566 rows=85,641 loops=1)

  • Output: ex_1.userid, ex_1.expensedate, ex_1.id, ex_1.trackingnumber, exchangerate_1.exchangevalue
  • Hash Cond: (ex_1.reimbursementcurrencyid = exchangerate_1.fixedcurrencyid)
  • Join Filter: ((ex_1.expensedate >= exchangerate_1.effectivedate) AND (ex_1.expensedate <= exchangerate_1.enddate))
  • Buffers: shared hit=1,212
70. 12.027 12.027 ↑ 1.0 85,641 1

Seq Scan on "654d229342194608814f1faf2d408658".expense ex_1 (cost=0.00..2,066.41 rows=85,641 width=27) (actual time=0.006..12.027 rows=85,641 loops=1)

  • Output: ex_1.id, ex_1.description, ex_1.userid, ex_1.supervisorid, ex_1.departmentid, ex_1.approvalstatus, ex_1.expensedate, ex_1.submittedonutc, ex_1.savedonutc, ex_1.reimbursementcurrencyid, ex_1.paid, ex_1.generatedkey, ex_1.trackingnumber, ex_1.disclaimeraccepted
  • Buffers: shared hit=1,210
71. 0.012 0.031 ↓ 7.0 7 1

Hash (cost=1.61..1.61 rows=1 width=32) (actual time=0.031..0.031 rows=7 loops=1)

  • Output: exchangerate_1.exchangevalue, exchangerate_1.fixedcurrencyid, exchangerate_1.effectivedate, exchangerate_1.enddate
  • Buckets: 1,024 Batches: 1 Memory Usage: 9kB
  • Buffers: shared hit=2
72. 0.019 0.019 ↓ 7.0 7 1

Seq Scan on "654d229342194608814f1faf2d408658".exchangerate exchangerate_1 (cost=0.00..1.61 rows=1 width=32) (actual time=0.012..0.019 rows=7 loops=1)

  • Output: exchangerate_1.exchangevalue, exchangerate_1.fixedcurrencyid, exchangerate_1.effectivedate, exchangerate_1.enddate
  • Filter: (exchangerate_1.variablecurrencyid = $6)
  • Rows Removed by Filter: 42
  • Buffers: shared hit=2
73. 342.564 342.564 ↑ 1.0 4 85,641

Index Scan using ixeeexpenseid on "654d229342194608814f1faf2d408658".expenseentry ee (cost=0.42..0.56 rows=4 width=1,615) (actual time=0.002..0.004 rows=4 loops=85,641)

  • Output: ee.id, ee.expenseid, ee.expensetypeid, ee.description, ee.entrydate, ee.netamount, ee.amount, ee.currencyid, ee.expenserate, ee.projectid, ee.taskid, ee.paymentmethodid, ee.requestreimbursement, ee.billtoclient, ee.numberofunits, ee.exchangevalue, ee.paidonutc, ee.invoicedonutc, ee.taxcodeid1, ee.taxamount1, ee.taxcodeid2, ee.taxamount2, ee.taxcodeid3, ee.taxamount3, ee.taxcodeid4, ee.taxamount4, ee.taxcodeid5, ee.taxamount5, ee.info1, ee.info2, ee.info3, ee.info4, ee.info5
  • Index Cond: (ee.expenseid = ex_1.id)
  • Buffers: shared hit=401,569
74. 89.210 4,452.335 ↓ 1.7 265,519 1

Subquery Scan on *SELECT* 4 (cost=182,835.38..207,884.93 rows=152,754 width=756) (actual time=3,972.031..4,452.335 rows=265,519 loops=1)

  • Output: NULL::integer, "*SELECT* 4".projectid, "*SELECT* 4".taskid, NULL::date, NULL::date, NULL::date, NULL::date, NULL::uuid, NULL::uuid, NULL::text, NULL::integer, NULL::uuid, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::integer, NULL::integer, NULL::text, NULL::integer, NULL::numeric, NULL::numeric, NULL::numeric, NULL::uuid, NULL::interval, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text
  • Buffers: shared hit=1,395,779
75. 559.442 4,363.125 ↓ 1.7 265,519 1

Seq Scan on "654d229342194608814f1faf2d408658".task tsk (cost=182,835.38..205,593.62 rows=152,754 width=748) (actual time=3,972.029..4,363.125 rows=265,519 loops=1)

  • Output: NULL::integer, tsk.projectid, tsk.id, NULL::date, NULL::date, NULL::date, NULL::date, NULL::uuid, NULL::uuid, NULL::text, NULL::integer, NULL::uuid, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::interval, NULL::integer, NULL::integer, NULL::text, NULL::integer, NULL::numeric, NULL::numeric, NULL::numeric, NULL::uuid, NULL::interval, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text, NULL::text
  • Filter: ((NOT (hashed SubPlan 4)) AND (NOT (hashed SubPlan 5)))
  • Rows Removed by Filter: 345,497
  • Buffers: shared hit=1,395,779
76.          

SubPlan (for Seq Scan)

77. 350.222 3,626.358 ↓ 2.3 344,118 1

Unique (cost=0.43..170,970.24 rows=151,507 width=4) (actual time=0.043..3,626.358 rows=344,118 loops=1)

  • Output: dm_projecttimeallocation_facts_2.taskid
  • Buffers: shared hit=1,326,487
78. 3,276.136 3,276.136 ↓ 1.0 4,257,698 1

Index Scan using ixpta2taskid on "654d229342194608814f1faf2d408658".dm_projecttimeallocation_facts dm_projecttimeallocation_facts_2 (cost=0.43..160,643.66 rows=4,130,632 width=4) (actual time=0.042..3,276.136 rows=4,257,698 loops=1)

  • Output: dm_projecttimeallocation_facts_2.taskid
  • Index Cond: (dm_projecttimeallocation_facts_2.taskid IS NOT NULL)
  • Filter: ((dm_projecttimeallocation_facts_2.timeoffcodeid IS NULL) AND (dm_projecttimeallocation_facts_2.breaktypeid IS NULL))
  • Buffers: shared hit=1,326,487
79. 30.836 177.325 ↓ 1.2 86,669 1

Unique (cost=0.42..11,301.09 rows=74,114 width=4) (actual time=0.092..177.325 rows=86,669 loops=1)

  • Output: expenseentry.taskid
  • Buffers: shared hit=55,699
80. 146.489 146.489 ↓ 1.0 290,833 1

Index Only Scan using ixeetaskid on "654d229342194608814f1faf2d408658".expenseentry (cost=0.42..10,574.43 rows=290,663 width=4) (actual time=0.091..146.489 rows=290,833 loops=1)

  • Output: expenseentry.taskid
  • Index Cond: (expenseentry.taskid IS NOT NULL)
  • Heap Fetches: 290,833
  • Buffers: shared hit=55,699
81. 2.501 5.269 ↑ 1.0 10,919 1

Hash (cost=531.19..531.19 rows=10,919 width=50) (actual time=5.269..5.269 rows=10,919 loops=1)

  • Output: pj.name, pj.id, pj.clientid
  • Buckets: 16,384 Batches: 1 Memory Usage: 1,021kB
  • Buffers: shared hit=422
82. 2.768 2.768 ↑ 1.0 10,919 1

Seq Scan on "654d229342194608814f1faf2d408658".project pj (cost=0.00..531.19 rows=10,919 width=50) (actual time=0.005..2.768 rows=10,919 loops=1)

  • Output: pj.name, pj.id, pj.clientid
  • Buffers: shared hit=422
83. 1.878 4.244 ↑ 1.0 6,146 1

Hash (cost=187.46..187.46 rows=6,146 width=48) (actual time=4.244..4.244 rows=6,146 loops=1)

  • Output: ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id
  • Buckets: 8,192 Batches: 1 Memory Usage: 560kB
  • Buffers: shared hit=126
84. 2.366 2.366 ↑ 1.0 6,146 1

Seq Scan on "654d229342194608814f1faf2d408658".userinfo ui (cost=0.00..187.46 rows=6,146 width=48) (actual time=0.005..2.366 rows=6,146 loops=1)

  • Output: ui.lastname, ui.firstname, ui.duplicatename, ui.displayname, ui.externalid, ui.id
  • Buffers: shared hit=126
85. 1.244 2.339 ↑ 1.0 6,146 1

Hash (cost=190.46..190.46 rows=6,146 width=18) (actual time=2.339..2.339 rows=6,146 loops=1)

  • Output: login.loginname, login.userid
  • Buckets: 8,192 Batches: 1 Memory Usage: 376kB
  • Buffers: shared hit=129
86. 1.095 1.095 ↑ 1.0 6,146 1

Seq Scan on "654d229342194608814f1faf2d408658".login (cost=0.00..190.46 rows=6,146 width=18) (actual time=0.005..1.095 rows=6,146 loops=1)

  • Output: login.loginname, login.userid
  • Buffers: shared hit=129
87. 0.099 0.189 ↑ 1.0 514 1

Hash (cost=17.14..17.14 rows=514 width=27) (actual time=0.189..0.189 rows=514 loops=1)

  • Output: cl.name, cl.id
  • Buckets: 1,024 Batches: 1 Memory Usage: 39kB
  • Buffers: shared hit=12
88. 0.090 0.090 ↑ 1.0 514 1

Seq Scan on "654d229342194608814f1faf2d408658".clients cl (cost=0.00..17.14 rows=514 width=27) (actual time=0.005..0.090 rows=514 loops=1)

  • Output: cl.name, cl.id
  • Buffers: shared hit=12
89. 195.042 373.270 ↑ 1.0 611,016 1

Hash (cost=19,703.16..19,703.16 rows=611,016 width=44) (actual time=373.270..373.270 rows=611,016 loops=1)

  • Output: tk.name, tk.id, tk.estimatedcostcurrencyid
  • Buckets: 1,048,576 Batches: 1 Memory Usage: 53,890kB
  • Buffers: shared hit=13,593
90. 178.228 178.228 ↑ 1.0 611,016 1

Seq Scan on "654d229342194608814f1faf2d408658".task tk (cost=0.00..19,703.16 rows=611,016 width=44) (actual time=0.010..178.228 rows=611,016 loops=1)

  • Output: tk.name, tk.id, tk.estimatedcostcurrencyid
  • Buffers: shared hit=13,593
91. 0.007 0.042 ↓ 7.0 7 1

Hash (cost=2.17..2.17 rows=1 width=4) (actual time=0.042..0.042 rows=7 loops=1)

  • Output: exchangerate.fixedcurrencyid
  • Buckets: 1,024 Batches: 1 Memory Usage: 9kB
  • Buffers: shared hit=3
92. 0.035 0.035 ↓ 7.0 7 1

Index Scan using uix3er_currencyideffectivedate on "654d229342194608814f1faf2d408658".exchangerate (cost=0.14..2.17 rows=1 width=4) (actual time=0.029..0.035 rows=7 loops=1)

  • Output: exchangerate.fixedcurrencyid
  • Index Cond: ((exchangerate.variablecurrencyid = $0) AND (('now'::cstring)::date >= exchangerate.effectivedate))
  • Filter: (('now'::cstring)::date <= exchangerate.enddate)
  • Buffers: shared hit=3
93. 227.348 14,968.811 ↓ 1.1 514,112 1

Hash (cost=656,449.81..656,449.81 rows=455,192 width=176) (actual time=14,968.811..14,968.811 rows=514,112 loops=1)

  • Output: ts.id, ts.startdate, tah.timestamputc, tah.action, esheetapprovalhistorykeyvalue9.uri, sheetapprovalhistorykeyvalue10.uri
  • Buckets: 524,288 Batches: 1 Memory Usage: 85,245kB
  • Buffers: shared hit=7,564,120
94. 328.033 14,741.463 ↓ 1.1 514,112 1

Hash Right Join (cost=43,574.66..656,449.81 rows=455,192 width=176) (actual time=735.987..14,741.463 rows=514,112 loops=1)

  • Output: ts.id, ts.startdate, tah.timestamputc, tah.action, esheetapprovalhistorykeyvalue9.uri, sheetapprovalhistorykeyvalue10.uri
  • Hash Cond: (tah.timesheetid = ts.id)
  • Buffers: shared hit=7,564,120
95. 0.260 13,801.192 ↓ 2.1 419,147 1

Gather (cost=11,405.74..621,505.76 rows=201,828 width=172) (actual time=121.960..13,801.192 rows=419,147 loops=1)

  • Output: tah.timestamputc, tah.action, tah.timesheetid, esheetapprovalhistorykeyvalue9.uri, sheetapprovalhistorykeyvalue10.uri
  • Workers Planned: 2
  • Workers Launched: 2
  • Buffers: shared hit=7,477,826
96. 147.877 13,800.932 ↓ 1.7 139,716 3 / 3

Nested Loop Left Join (cost=10,405.74..600,322.96 rows=84,095 width=172) (actual time=119.273..13,800.932 rows=139,716 loops=3)

  • Output: tah.timestamputc, tah.action, tah.timesheetid, esheetapprovalhistorykeyvalue9.uri, sheetapprovalhistorykeyvalue10.uri
  • Buffers: shared hit=7,477,826
  • Worker 0: actual time=118.885..14048.724 rows=149,011 loops=1
  • Buffers: shared hit=2,654,337
  • Worker 1: actual time=119.195..13702.476 rows=135,615 loops=1
  • Buffers: shared hit=2,440,095
97. 56.151 7,505.566 ↓ 1.7 139,716 3 / 3

Nested Loop Left Join (cost=10,405.18..321,719.68 rows=84,095 width=116) (actual time=119.234..7,505.566 rows=139,716 loops=3)

  • Output: tah.timestamputc, tah.action, tah.timesheetid, tah.id, esheetapprovalhistorykeyvalue9.uri
  • Buffers: shared hit=3,753,528
  • Worker 0: actual time=118.849..7658.894 rows=149,011 loops=1
  • Buffers: shared hit=1,332,294
  • Worker 1: actual time=119.158..7440.674 rows=135,615 loops=1
  • Buffers: shared hit=1,224,801
98. 100.956 323.916 ↓ 1.7 139,716 3 / 3

Hash Left Join (cost=10,404.62..43,116.39 rows=84,095 width=44) (actual time=119.119..323.916 rows=139,716 loops=3)

  • Output: tah.timestamputc, tah.action, tah.timesheetid, tah.id
  • Inner Unique: true
  • Hash Cond: (tah.timesheetid = tahls.timesheetid)
  • Filter: ((tahls.timesheetid IS NULL) OR (tah.serialnumber > tahls.lastsubmitserialnumber))
  • Rows Removed by Filter: 14,564
  • Buffers: shared hit=29,228
  • Worker 0: actual time=118.716..329.555 rows=149,011 loops=1
  • Buffers: shared hit=10,250
  • Worker 1: actual time=119.024..321.806 rows=135,615 loops=1
  • Buffers: shared hit=9,506
99. 106.106 106.106 ↑ 1.6 154,279 3 / 3

Parallel Seq Scan on "654d229342194608814f1faf2d408658".timesheetapprovalhistory tah (cost=0.00..32,049.51 rows=252,285 width=48) (actual time=0.016..106.106 rows=154,279 loops=3)

  • Output: tah.id, tah.serialnumber, tah.timesheetid, tah.action, tah.approvalcomments, tah.timestamputc, tah.approvalagenttype, tah.userid, tah.systemprocessidentifier
  • Filter: (((tah.systemprocessidentifier IS NULL) OR (tah.systemprocessidentifier <> 'urn:replicon:approval-system-process:timesheet-submit-script-data-and-validation'::text)) AND (tah.action = ANY ('{2,3,6}'::integer[])))
  • Rows Removed by Filter: 324,712
  • Buffers: shared hit=22,320
  • Worker 0: actual time=0.012..108.601 rows=164,563 loops=1
  • Buffers: shared hit=7,944
  • Worker 1: actual time=0.010..104.707 rows=149,334 loops=1
  • Buffers: shared hit=7,200
100. 77.701 116.854 ↑ 1.0 360,383 3 / 3

Hash (cost=5,899.83..5,899.83 rows=360,383 width=20) (actual time=116.854..116.854 rows=360,383 loops=3)

  • Output: tahls.timesheetid, tahls.lastsubmitserialnumber
  • Buckets: 524,288 Batches: 1 Memory Usage: 22,397kB
  • Buffers: shared hit=6,888
  • Worker 0: actual time=116.386..116.386 rows=360,383 loops=1
  • Buffers: shared hit=2,296
  • Worker 1: actual time=116.661..116.661 rows=360,383 loops=1
  • Buffers: shared hit=2,296
101. 39.153 39.153 ↑ 1.0 360,383 3 / 3

Seq Scan on "654d229342194608814f1faf2d408658".timesheetapprovalhistorylastsubmit tahls (cost=0.00..5,899.83 rows=360,383 width=20) (actual time=0.054..39.153 rows=360,383 loops=3)

  • Output: tahls.timesheetid, tahls.lastsubmitserialnumber
  • Buffers: shared hit=6,888
  • Worker 0: actual time=0.057..39.149 rows=360,383 loops=1
  • Buffers: shared hit=2,296
  • Worker 1: actual time=0.097..39.671 rows=360,383 loops=1
  • Buffers: shared hit=2,296
102. 7,125.499 7,125.499 ↑ 2.0 1 419,147 / 3

Index Scan using ixtahkvtimesheetapprovalhistoryid on "654d229342194608814f1faf2d408658".timesheetapprovalhistorykeyvalue esheetapprovalhistorykeyvalue9 (cost=0.56..3.29 rows=2 width=88) (actual time=0.048..0.051 rows=1 loops=419,147)

  • Output: esheetapprovalhistorykeyvalue9.id, esheetapprovalhistorykeyvalue9.timesheetapprovalhistoryid, esheetapprovalhistorykeyvalue9.parentid, esheetapprovalhistorykeyvalue9.index, esheetapprovalhistorykeyvalue9.key, esheetapprovalhistorykeyvalue9.uri, esheetapprovalhistorykeyvalue9.slug, esheetapprovalhistorykeyvalue9."boolean", esheetapprovalhistorykeyvalue9.date, esheetapprovalhistorykeyvalue9.number, esheetapprovalhistorykeyvalue9.text, esheetapprovalhistorykeyvalue9."time", esheetapprovalhistorykeyvalue9.timespan, esheetapprovalhistorykeyvalue9.daterange_startdate, esheetapprovalhistorykeyvalue9.daterange_enddate, esheetapprovalhistorykeyvalue9.daterange_relativedaterangeuri, esheetapprovalhistorykeyvalue9.daterange_relativedaterangeasofdate, esheetapprovalhistorykeyvalue9.workdayduration_decimalworkdays, esheetapprovalhistorykeyvalue9.workdayduration_workdays, esheetapprovalhistorykeyvalue9.workdayduration_hours, esheetapprovalhistorykeyvalue9.workdayduration_minutes
  • Index Cond: (tah.id = esheetapprovalhistorykeyvalue9.timesheetapprovalhistoryid)
  • Filter: (upper(esheetapprovalhistorykeyvalue9.key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-ACTUAL-USER'::text)
  • Rows Removed by Filter: 31
  • Buffers: shared hit=3,724,300
  • Worker 0: actual time=0.046..0.048 rows=1 loops=149,011
  • Buffers: shared hit=1,322,044
  • Worker 1: actual time=0.049..0.052 rows=1 loops=135,615
  • Buffers: shared hit=1,215,295
103. 6,147.489 6,147.489 ↑ 2.0 1 419,147 / 3

Index Scan using ixtahkvtimesheetapprovalhistoryid on "654d229342194608814f1faf2d408658".timesheetapprovalhistorykeyvalue sheetapprovalhistorykeyvalue10 (cost=0.56..3.29 rows=2 width=88) (actual time=0.040..0.044 rows=1 loops=419,147)

  • Output: sheetapprovalhistorykeyvalue10.id, sheetapprovalhistorykeyvalue10.timesheetapprovalhistoryid, sheetapprovalhistorykeyvalue10.parentid, sheetapprovalhistorykeyvalue10.index, sheetapprovalhistorykeyvalue10.key, sheetapprovalhistorykeyvalue10.uri, sheetapprovalhistorykeyvalue10.slug, sheetapprovalhistorykeyvalue10."boolean", sheetapprovalhistorykeyvalue10.date, sheetapprovalhistorykeyvalue10.number, sheetapprovalhistorykeyvalue10.text, sheetapprovalhistorykeyvalue10."time", sheetapprovalhistorykeyvalue10.timespan, sheetapprovalhistorykeyvalue10.daterange_startdate, sheetapprovalhistorykeyvalue10.daterange_enddate, sheetapprovalhistorykeyvalue10.daterange_relativedaterangeuri, sheetapprovalhistorykeyvalue10.daterange_relativedaterangeasofdate, sheetapprovalhistorykeyvalue10.workdayduration_decimalworkdays, sheetapprovalhistorykeyvalue10.workdayduration_workdays, sheetapprovalhistorykeyvalue10.workdayduration_hours, sheetapprovalhistorykeyvalue10.workdayduration_minutes
  • Index Cond: (tah.id = sheetapprovalhistorykeyvalue10.timesheetapprovalhistoryid)
  • Filter: (upper(sheetapprovalhistorykeyvalue10.key) = 'URN:REPLICON:APPROVAL-HISTORICAL-ACTION-DATA-KEY:ACTING-EFFECTIVE-USER'::text)
  • Rows Removed by Filter: 31
  • Buffers: shared hit=3,724,298
  • Worker 0: actual time=0.038..0.042 rows=1 loops=149,011
  • Buffers: shared hit=1,322,043
  • Worker 1: actual time=0.040..0.045 rows=1 loops=135,615
  • Buffers: shared hit=1,215,294
104. 127.896 612.238 ↑ 1.0 455,192 1

Hash (cost=26,479.01..26,479.01 rows=455,192 width=20) (actual time=612.238..612.238 rows=455,192 loops=1)

  • Output: ts.id, ts.startdate
  • Buckets: 524,288 Batches: 1 Memory Usage: 27,212kB
  • Buffers: shared hit=86,294
105. 227.746 484.342 ↑ 1.0 455,192 1

Hash Join (cost=14,973.24..26,479.01 rows=455,192 width=20) (actual time=173.915..484.342 rows=455,192 loops=1)

  • Output: ts.id, ts.startdate
  • Inner Unique: true
  • Hash Cond: (tslist.timesheetid = ts.id)
  • Buffers: shared hit=86,294
106. 84.523 84.523 ↑ 1.0 455,192 1

Index Only Scan using ixdtslsftimesheetid on "654d229342194608814f1faf2d408658".dm_timesheetlist_facts tslist (cost=0.42..10,311.30 rows=455,192 width=16) (actual time=0.038..84.523 rows=455,192 loops=1)

  • Output: tslist.timesheetid
  • Heap Fetches: 0
  • Buffers: shared hit=81,563
107. 99.690 172.073 ↑ 1.0 455,192 1

Hash (cost=9,282.92..9,282.92 rows=455,192 width=20) (actual time=172.073..172.073 rows=455,192 loops=1)

  • Output: ts.id, ts.startdate
  • Buckets: 524,288 Batches: 1 Memory Usage: 27,212kB
  • Buffers: shared hit=4,731
108. 72.383 72.383 ↑ 1.0 455,192 1

Seq Scan on "654d229342194608814f1faf2d408658".timesheet ts (cost=0.00..9,282.92 rows=455,192 width=20) (actual time=0.005..72.383 rows=455,192 loops=1)

  • Output: ts.id, ts.startdate
  • Buffers: shared hit=4,731
Planning time : 56.329 ms
Execution time : 40,260.656 ms