explain.depesz.com

PostgreSQL's explain analyze made readable

Result: 2NSI

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

Limit (cost=10,754.68..10,755.91 rows=493 width=265) (actual rows= loops=)

2. 0.000 0.000 ↓ 0.0

Sort (cost=10,754.68..10,755.91 rows=493 width=265) (actual rows= loops=)

  • Sort Key: user_data.user_last_name, user_data.user_first_name, user_data.email_addresses
3. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=7,309.17..10,732.63 rows=493 width=265) (actual rows= loops=)

  • Hash Cond: ((user_data.login_record_id)::text = (wspt_user_login_record_s.i_id)::text)
4. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=7,298.27..10,718.89 rows=493 width=339) (actual rows= loops=)

  • Merge Cond: ((user_data.user_name)::text = (wspt_user_s_4.name)::text)
5. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=7,276.49..9,968.45 rows=314 width=321) (actual rows= loops=)

  • Merge Cond: ((user_data.user_name)::text = (r.member_user_names)::text)
6. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=7,228.12..9,915.77 rows=314 width=289) (actual rows= loops=)

  • Merge Cond: ((user_data.user_name)::text = (wspt_user_s_3.name)::text)
7. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=6,637.51..9,323.08 rows=314 width=257) (actual rows= loops=)

  • Merge Cond: ((user_data.user_name)::text = (wspt_user_s_2.name)::text)
8. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=2,854.02..4,120.82 rows=314 width=225) (actual rows= loops=)

  • Merge Cond: ((user_data.user_name)::text = (wspt_user_s_1.name)::text)
9. 0.000 0.000 ↓ 0.0

Sort (cost=69.99..70.77 rows=314 width=193) (actual rows= loops=)

  • Sort Key: user_data.user_name
10. 0.000 0.000 ↓ 0.0

Subquery Scan on user_data (cost=47.55..56.97 rows=314 width=193) (actual rows= loops=)

11. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=47.55..53.83 rows=314 width=218) (actual rows= loops=)

  • Group Key: wspt_user_s.i_id
12. 0.000 0.000 ↓ 0.0

Sort (cost=47.55..48.33 rows=314 width=218) (actual rows= loops=)

  • Sort Key: wspt_user_s.i_id
13. 0.000 0.000 ↓ 0.0

Hash Join (cost=14.07..34.52 rows=314 width=218) (actual rows= loops=)

  • Hash Cond: ((wspt_user_s.i_id)::text = (wspt_user_r.i_id)::text)
14. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_user_s (cost=0.00..16.14 rows=314 width=186) (actual rows= loops=)

15. 0.000 0.000 ↓ 0.0

Hash (cost=10.14..10.14 rows=314 width=57) (actual rows= loops=)

16. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_user_r (cost=0.00..10.14 rows=314 width=57) (actual rows= loops=)

17. 0.000 0.000 ↓ 0.0

Materialize (cost=2,784.03..4,045.05 rows=200 width=46) (actual rows= loops=)

18. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=2,784.03..4,042.55 rows=200 width=46) (actual rows= loops=)

  • Group Key: wspt_user_s_1.name
19. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=2,784.03..3,569.05 rows=31,400 width=54) (actual rows= loops=)

  • Group Key: wspt_user_s_1.name, (unnest('{Approval,Review}'::text[]))
20. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=2,784.03..3,019.55 rows=31,400 width=112) (actual rows= loops=)

  • Merge Cond: (((wspt_user_s_1.name)::text = (wspt_wf_activity_s.actor_user_id)::text) AND ((unnest('{Approval,Review}'::text[])) = (wspt_wf_task_template_s.process_type)::text))
21. 0.000 0.000 ↓ 0.0

Sort (cost=2,755.74..2,834.24 rows=31,400 width=46) (actual rows= loops=)

  • Sort Key: wspt_user_s_1.name, (unnest('{Approval,Review}'::text[]))
22. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.00..410.40 rows=31,400 width=46) (actual rows= loops=)

23. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_user_s wspt_user_s_1 (cost=0.00..16.14 rows=314 width=14) (actual rows= loops=)

24. 0.000 0.000 ↓ 0.0

Materialize (cost=0.00..2.01 rows=100 width=32) (actual rows= loops=)

25. 0.000 0.000 ↓ 0.0

Result (cost=0.00..0.51 rows=100 width=32) (actual rows= loops=)

26. 0.000 0.000 ↓ 0.0

Sort (cost=28.29..28.30 rows=1 width=664) (actual rows= loops=)

  • Sort Key: wspt_wf_activity_s.actor_user_id, wspt_wf_task_template_s.process_type
27. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.42..28.28 rows=1 width=664) (actual rows= loops=)

28. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.28..21.21 rows=4 width=648) (actual rows= loops=)

29. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.14..18.42 rows=4 width=648) (actual rows= loops=)

30. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_wf_activity_s (cost=0.00..10.25 rows=1 width=582) (actual rows= loops=)

  • Filter: ((activity_state)::text = 'Completed'::text)
31. 0.000 0.000 ↓ 0.0

Index Scan using wspt_wf_task_r_fi3 on wspt_wf_task_r (cost=0.14..8.16 rows=1 width=132) (actual rows= loops=)

  • Index Cond: ((performer_activity_id)::text = (wspt_wf_activity_s.i_id)::text)
32. 0.000 0.000 ↓ 0.0

Index Scan using wspt_wf_task_s_pk0 on wspt_wf_task_s (cost=0.14..0.69 rows=1 width=132) (actual rows= loops=)

  • Index Cond: ((i_id)::text = (wspt_wf_task_r.i_id)::text)
33. 0.000 0.000 ↓ 0.0

Index Scan using wspt_wf_task_template_s_i0 on wspt_wf_task_template_s (cost=0.14..1.76 rows=1 width=148) (actual rows= loops=)

  • Index Cond: ((i_id)::text = (wspt_wf_task_s.task_template_id)::text)
  • Filter: ((process_type)::text = ANY ('{Approval,Review}'::text[]))
34. 0.000 0.000 ↓ 0.0

Materialize (cost=3,783.49..5,197.27 rows=200 width=46) (actual rows= loops=)

35. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=3,783.49..5,194.77 rows=200 width=78) (actual rows= loops=)

  • Group Key: wspt_user_s_2.name
36. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=3,783.49..4,721.27 rows=31,400 width=54) (actual rows= loops=)

  • Group Key: wspt_user_s_2.name, (unnest('{"Document Content Viewed","Transmittal Generated","Create Authored Document","New Content Imported"}'::text[]))
37. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=3,783.49..4,171.77 rows=31,400 width=71) (actual rows= loops=)

  • Merge Cond: (((wspt_user_s_2.name)::text = (wspt_app_audit_trail_s.username)::text) AND ((unnest('{"Document Content Viewed","Transmittal Generated","Create Authored Document","New Content Impor (...)
38. 0.000 0.000 ↓ 0.0

Sort (cost=2,755.74..2,834.24 rows=31,400 width=46) (actual rows= loops=)

  • Sort Key: wspt_user_s_2.name, (unnest('{"Document Content Viewed","Transmittal Generated","Create Authored Document","New Content Imported"}'::text[]))
39. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.00..410.40 rows=31,400 width=46) (actual rows= loops=)

40. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_user_s wspt_user_s_2 (cost=0.00..16.14 rows=314 width=14) (actual rows= loops=)

41. 0.000 0.000 ↓ 0.0

Materialize (cost=0.00..2.01 rows=100 width=32) (actual rows= loops=)

42. 0.000 0.000 ↓ 0.0

Result (cost=0.00..0.51 rows=100 width=32) (actual rows= loops=)

43. 0.000 0.000 ↓ 0.0

Sort (cost=1,027.76..1,049.58 rows=8,730 width=49) (actual rows= loops=)

  • Sort Key: wspt_app_audit_trail_s.username, wspt_app_audit_trail_s.event
44. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_app_audit_trail_s (cost=0.00..456.30 rows=8,730 width=49) (actual rows= loops=)

45. 0.000 0.000 ↓ 0.0

Materialize (cost=590.61..591.39 rows=24 width=46) (actual rows= loops=)

46. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=590.61..591.09 rows=24 width=46) (actual rows= loops=)

  • Group Key: wspt_user_s_3.name
47. 0.000 0.000 ↓ 0.0

Sort (cost=590.61..590.67 rows=24 width=22) (actual rows= loops=)

  • Sort Key: wspt_user_s_3.name
48. 0.000 0.000 ↓ 0.0

Nested Loop (cost=481.91..590.06 rows=24 width=22) (actual rows= loops=)

49. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=478.34..478.55 rows=12 width=28) (actual rows= loops=)

  • Group Key: wspt_app_audit_trail_s_1.string_1
50. 0.000 0.000 ↓ 0.0

Sort (cost=478.34..478.37 rows=12 width=45) (actual rows= loops=)

  • Sort Key: wspt_app_audit_trail_s_1.string_1
51. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_app_audit_trail_s wspt_app_audit_trail_s_1 (cost=0.00..478.12 rows=12 width=45) (actual rows= loops=)

  • Filter: ((event)::text = 'User Authenticated'::text)
52. 0.000 0.000 ↓ 0.0

Bitmap Heap Scan on wspt_user_s wspt_user_s_3 (cost=3.57..9.26 rows=2 width=56) (actual rows= loops=)

  • Recheck Cond: ((lower((wspt_app_audit_trail_s_1.string_1)::text) = lower((login_name)::text)) OR (lower((wspt_app_audit_trail_s_1.string_1)::text) = lower((primary_email_address)::text)))
53. 0.000 0.000 ↓ 0.0

BitmapOr (cost=3.57..3.57 rows=2 width=0) (actual rows= loops=)

54. 0.000 0.000 ↓ 0.0

Bitmap Index Scan on wspt_user_s_uc0 (cost=0.00..1.62 rows=1 width=0) (actual rows= loops=)

  • Index Cond: (lower((wspt_app_audit_trail_s_1.string_1)::text) = lower((login_name)::text))
55. 0.000 0.000 ↓ 0.0

Bitmap Index Scan on wspt_user_s_uc3 (cost=0.00..1.95 rows=1 width=0) (actual rows= loops=)

  • Index Cond: (lower((wspt_app_audit_trail_s_1.string_1)::text) = lower((primary_email_address)::text))
56. 0.000 0.000 ↓ 0.0

Materialize (cost=48.36..50.61 rows=61 width=46) (actual rows= loops=)

57. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=48.36..49.84 rows=61 width=46) (actual rows= loops=)

  • Group Key: r.member_user_names
58. 0.000 0.000 ↓ 0.0

Sort (cost=48.36..48.60 rows=96 width=41) (actual rows= loops=)

  • Sort Key: r.member_user_names
59. 0.000 0.000 ↓ 0.0

Hash Join (cost=26.59..45.20 rows=96 width=41) (actual rows= loops=)

  • Hash Cond: ((r.i_id)::text = (s.i_id)::text)
60. 0.000 0.000 ↓ 0.0

Index Only Scan using wspt_group_r_uc0 on wspt_group_r r (cost=0.14..17.43 rows=96 width=39) (actual rows= loops=)

61. 0.000 0.000 ↓ 0.0

Hash (cost=21.20..21.20 rows=420 width=52) (actual rows= loops=)

62. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_group_s s (cost=0.00..21.20 rows=420 width=52) (actual rows= loops=)

63. 0.000 0.000 ↓ 0.0

Materialize (cost=21.79..743.04 rows=314 width=46) (actual rows= loops=)

64. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=21.79..739.12 rows=314 width=78) (actual rows= loops=)

  • Group Key: wspt_user_s_4.name
65. 0.000 0.000 ↓ 0.0

Merge Left Join (cost=21.79..578.19 rows=31,400 width=54) (actual rows= loops=)

  • Merge Cond: ((wspt_user_s_4.name)::text = (task_counts.user_name)::text)
  • Join Filter: ((task_counts.event)::text = (unnest('{QC,Rework,"Approve List Change","Request Assistance"}'::text[])))
66. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.27..471.18 rows=31,400 width=46) (actual rows= loops=)

67. 0.000 0.000 ↓ 0.0

Index Only Scan using wspt_user_s_i0 on wspt_user_s wspt_user_s_4 (cost=0.27..76.92 rows=314 width=14) (actual rows= loops=)

68. 0.000 0.000 ↓ 0.0

Materialize (cost=0.00..2.01 rows=100 width=32) (actual rows= loops=)

69. 0.000 0.000 ↓ 0.0

Result (cost=0.00..0.51 rows=100 width=32) (actual rows= loops=)

70. 0.000 0.000 ↓ 0.0

Sort (cost=21.51..21.52 rows=4 width=1,040) (actual rows= loops=)

  • Sort Key: task_counts.user_name
71. 0.000 0.000 ↓ 0.0

Subquery Scan on task_counts (cost=21.35..21.47 rows=4 width=1,040) (actual rows= loops=)

72. 0.000 0.000 ↓ 0.0

GroupAggregate (cost=21.35..21.43 rows=4 width=1,040) (actual rows= loops=)

  • Group Key: wspt_wf_activity_s_1.name, wspt_wf_task_r_1.performer
73. 0.000 0.000 ↓ 0.0

Sort (cost=21.35..21.36 rows=4 width=1,098) (actual rows= loops=)

  • Sort Key: wspt_wf_activity_s_1.name, wspt_wf_task_r_1.performer
74. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.28..21.31 rows=4 width=1,098) (actual rows= loops=)

75. 0.000 0.000 ↓ 0.0

Nested Loop (cost=0.14..18.52 rows=4 width=1,098) (actual rows= loops=)

76. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_wf_activity_s wspt_wf_activity_s_1 (cost=0.00..10.35 rows=1 width=582) (actual rows= loops=)

  • Filter: (((activity_state)::text = 'Completed'::text) AND ((name)::text = ANY ('{QC,Rework,"Approve List Change","Request Assistance"}'::text[])))
77. 0.000 0.000 ↓ 0.0

Index Scan using wspt_wf_task_r_fi3 on wspt_wf_task_r wspt_wf_task_r_1 (cost=0.14..8.16 rows=1 width=648) (actual rows= loops=)

  • Index Cond: ((performer_activity_id)::text = (wspt_wf_activity_s_1.i_id)::text)
78. 0.000 0.000 ↓ 0.0

Index Only Scan using wspt_wf_task_s_pk0 on wspt_wf_task_s wspt_wf_task_s_1 (cost=0.14..0.69 rows=1 width=66) (actual rows= loops=)

  • Index Cond: (i_id = (wspt_wf_task_r_1.i_id)::text)
79. 0.000 0.000 ↓ 0.0

Hash (cost=10.40..10.40 rows=40 width=74) (actual rows= loops=)

80. 0.000 0.000 ↓ 0.0

Seq Scan on wspt_user_login_record_s (cost=0.00..10.40 rows=40 width=74) (actual rows= loops=)