explain.depesz.com

PostgreSQL's explain analyze made readable

Result: 9D43

Settings
# exclusive inclusive rows x rows loops node
1. 0.004 15,939.763 ↑ 2,073.4 20 1

Append (cost=6,189,241.55..6,191,633.65 rows=41,468 width=96) (actual time=14,414.823..15,939.763 rows=20 loops=1)

2.          

CTE picklist_0

3. 0.027 0.027 ↑ 1.0 2 1

Seq Scan on t205_opportunitystagenamepicklistdim t205_opportunitystagenamepicklistdim_1 (cost=0.00..4.80 rows=2 width=4) (actual time=0.018..0.027 rows=2 loops=1)

  • Filter: (correlated_value = ANY ('{"Closed Won","Trial Won"}'::text[]))
  • Rows Removed by Filter: 62
4.          

CTE picklist_2

5. 0.065 0.065 ↑ 1.1 14 1

Seq Scan on t205_opportunitystagenamepicklistdim t205_opportunitystagenamepicklistdim_2 (cost=0.00..5.84 rows=15 width=4) (actual time=0.022..0.065 rows=14 loops=1)

  • Filter: (correlated_value = ANY ('{"16 - Closed / Invalid or Duplicate Oppty","Closed - Dead","Closed - Call later","13 \\u2013 Closed / Lost to No Decision",Churn,"12 - Closed / Lost to Competition","Trial Lost","Closed Lost","15 - Closed / Lost to Churn","14 - Closed / Mid Cycle Qualify Out","13 - Closed / Lost to No Decision","Stage 16 - Closed / Invalid or Duplicate","Closed - Free","11 - Delayed or Deprioritized","Closed - No Decision"}'::text[]))
  • Rows Removed by Filter: 50
6.          

CTE ownercte

7. 2.915 17.911 ↑ 2.1 570 1

HashAggregate (cost=3,201.10..3,212.98 rows=1,188 width=4) (actual time=17.849..17.911 rows=570 loops=1)

  • Group Key: distinctclosedateowner.ownerid
8. 3.899 14.996 ↓ 1.2 19,843 1

Hash Join (cost=1,136.51..3,160.69 rows=16,163 width=4) (actual time=5.188..14.996 rows=19,843 loops=1)

  • Hash Cond: (distinctclosedateowner.ownerid = t209_userrolehierarchy.sid)
9. 6.091 7.753 ↓ 1.2 19,843 1

Bitmap Heap Scan on distinctclosedateowner (cost=346.09..2,198.54 rows=16,163 width=4) (actual time=1.828..7.753 rows=19,843 loops=1)

  • Recheck Cond: ((closedate <= 20181231) AND (closedate >= 20181001))
  • Heap Blocks: exact=1353
10. 1.662 1.662 ↓ 1.2 19,843 1

Bitmap Index Scan on ix_distinctclosedateowner_closedate (cost=0.00..342.05 rows=16,163 width=0) (actual time=1.662..1.662 rows=19,843 loops=1)

  • Index Cond: ((closedate <= 20181231) AND (closedate >= 20181001))
11. 0.329 3.344 ↓ 1.4 2,111 1

Hash (cost=771.30..771.30 rows=1,529 width=4) (actual time=3.344..3.344 rows=2,111 loops=1)

  • Buckets: 4096 (originally 2048) Batches: 1 (originally 1) Memory Usage: 107kB
12. 0.733 3.015 ↓ 1.4 2,111 1

HashAggregate (cost=756.01..771.30 rows=1,529 width=4) (actual time=2.796..3.015 rows=2,111 loops=1)

  • Group Key: t209_userrolehierarchy.sid
13. 0.640 2.282 ↓ 1.0 2,560 1

Hash Join (cost=231.84..749.67 rows=2,535 width=4) (actual time=0.850..2.282 rows=2,560 loops=1)

  • Hash Cond: (t209_userrolehierarchy.c808_user_role_id = t37_userroledim.sid)
14. 0.835 1.208 ↓ 1.0 2,560 1

Bitmap Heap Scan on t209_userrolehierarchy (cost=171.12..654.15 rows=2,535 width=8) (actual time=0.406..1.208 rows=2,560 loops=1)

  • Recheck Cond: ((c809_ancestor_role_id = ANY ('{496,30}'::integer[])) AND (end_stamp = '32503680000000'::bigint))
  • Heap Blocks: exact=302
15. 0.373 0.373 ↓ 1.0 2,583 1

Bitmap Index Scan on ix_t209_userrolehierarchy_ancestor_timestamp (cost=0.00..170.49 rows=2,535 width=0) (actual time=0.373..0.373 rows=2,583 loops=1)

  • Index Cond: ((c809_ancestor_role_id = ANY ('{496,30}'::integer[])) AND (end_stamp = '32503680000000'::bigint))
16. 0.059 0.434 ↑ 1.2 437 1

Hash (cost=54.43..54.43 rows=503 width=4) (actual time=0.434..0.434 rows=437 loops=1)

  • Buckets: 1024 Batches: 1 Memory Usage: 24kB
17. 0.375 0.375 ↑ 1.2 437 1

Seq Scan on t37_userroledim (cost=0.00..54.43 rows=503 width=4) (actual time=0.009..0.375 rows=437 loops=1)

  • Filter: ((NOT deleted) AND (sid <> '-2'::integer) AND ((c419_portaltype IS NULL) OR (c419_portaltype = 'None'::text)) AND (end_stamp = '32503680000000'::bigint))
  • Rows Removed by Filter: 442
18.          

CTE openwont1

19. 646.162 8,765.308 ↓ 1.5 812,082 1

Merge Left Join (cost=5,084,607.64..5,097,959.85 rows=526,050 width=34) (actual time=7,818.044..8,765.308 rows=812,082 loops=1)

  • Merge Cond: ((t203_opp_split_fact_1.c778_opp_currency_code = cur290_t1_r1.sid) AND (t203_opp_split_fact_1.c782_opp_close_date = cur290_t1_r1.rate_date))
20. 863.944 8,048.326 ↓ 1.5 812,082 1

Sort (cost=5,083,272.39..5,084,587.52 rows=526,050 width=52) (actual time=7,808.184..8,048.326 rows=812,082 loops=1)

  • Sort Key: t203_opp_split_fact_1.c778_opp_currency_code, t203_opp_split_fact_1.c782_opp_close_date
  • Sort Method: external merge Disk: 54720kB
21. 541.608 7,184.382 ↓ 1.5 812,082 1

Nested Loop Left Join (cost=2,209,594.65..5,015,301.91 rows=526,050 width=52) (actual time=3,682.206..7,184.382 rows=812,082 loops=1)

22. 248.196 4,206.528 ↓ 1.5 812,082 1

Merge Left Join (cost=2,209,594.09..2,213,740.42 rows=526,050 width=24) (actual time=3,682.182..4,206.528 rows=812,082 loops=1)

  • Merge Cond: ((t203_opp_split_fact.c778_opp_currency_code = cur290_t0_r0.sid) AND (t203_opp_split_fact.c782_opp_close_date = cur290_t0_r0.rate_date))
23. 587.058 3,883.182 ↓ 1.5 812,082 1

Sort (cost=2,208,285.66..2,209,600.79 rows=526,050 width=24) (actual time=3,672.355..3,883.182 rows=812,082 loops=1)

  • Sort Key: t203_opp_split_fact.c778_opp_currency_code, t203_opp_split_fact.c782_opp_close_date
  • Sort Method: external merge Disk: 30152kB
24. 156.978 3,296.124 ↓ 1.5 812,082 1

Hash Join (cost=276,368.65..2,147,507.68 rows=526,050 width=24) (actual time=670.737..3,296.124 rows=812,082 loops=1)

  • Hash Cond: (t203_opp_split_fact.c712_opportunity_split_ownerid = ownercte_1.c1)
25. 2,476.499 3,120.889 ↑ 1.3 814,419 1

Bitmap Heap Scan on t203_opp_split_fact (cost=276,337.42..2,140,874.26 rows=1,052,099 width=28) (actual time=652.466..3,120.889 rows=814,419 loops=1)

  • Recheck Cond: ((c782_opp_close_date >= 20180701) AND (c782_opp_close_date <= 20180930) AND (start_stamp <= '1533193199999'::bigint) AND (end_stamp > '1533193199999'::bigint))
  • Rows Removed by Index Recheck: 6168641
  • Filter: ((NOT deleted) AND (NOT (hashed SubPlan 7)))
  • Rows Removed by Filter: 278303
  • Heap Blocks: exact=33145 lossy=162771
26. 644.320 644.320 ↑ 2.1 1,092,727 1

Bitmap Index Scan on ix_t203_opp_split_fact_closedate_stage_timestamp (cost=0.00..276,074.06 rows=2,284,605 width=0) (actual time=644.320..644.320 rows=1,092,727 loops=1)

  • Index Cond: ((c782_opp_close_date >= 20180701) AND (c782_opp_close_date <= 20180930) AND (start_stamp <= '1533193199999'::bigint) AND (end_stamp > '1533193199999'::bigint))
27.          

SubPlan (forBitmap Heap Scan)

28. 0.070 0.070 ↑ 1.1 14 1

CTE Scan on picklist_2 cte0_4 (cost=0.00..0.30 rows=15 width=4) (actual time=0.025..0.070 rows=14 loops=1)

29. 0.084 18.257 ↓ 2.9 570 1

Hash (cost=28.73..28.73 rows=200 width=4) (actual time=18.257..18.257 rows=570 loops=1)

  • Buckets: 1024 Batches: 1 Memory Usage: 29kB
30. 0.152 18.173 ↓ 2.9 570 1

HashAggregate (cost=26.73..28.73 rows=200 width=4) (actual time=18.134..18.173 rows=570 loops=1)

  • Group Key: ownercte_1.c1
31. 18.021 18.021 ↑ 2.1 570 1

CTE Scan on ownercte ownercte_1 (cost=0.00..23.76 rows=1,188 width=4) (actual time=17.850..18.021 rows=570 loops=1)

32. 71.328 75.150 ↓ 57.3 824,046 1

Sort (cost=1,308.43..1,344.39 rows=14,387 width=16) (actual time=9.605..75.150 rows=824,046 loops=1)

  • Sort Key: cur290_t0_r0.sid, cur290_t0_r0.rate_date
  • Sort Method: quicksort Memory: 1057kB
33. 0.824 3.822 ↑ 1.0 14,351 1

Append (cost=0.00..314.83 rows=14,387 width=16) (actual time=0.022..3.822 rows=14,351 loops=1)

34. 0.003 0.003 ↓ 0.0 0 1

Seq Scan on clari_conversion_rate cur290_t0_r0 (cost=0.00..0.00 rows=1 width=16) (actual time=0.003..0.003 rows=0 loops=1)

  • Filter: (to_iso_code = 'USD'::text)
35. 2.995 2.995 ↑ 1.0 14,351 1

Seq Scan on usd_clari_conversion_rate cur290_t0_r0_1 (cost=0.00..314.83 rows=14,386 width=16) (actual time=0.018..2.995 rows=14,351 loops=1)

  • Filter: (to_iso_code = 'USD'::text)
36. 2,436.246 2,436.246 ↑ 1.0 1 812,082

Index Scan using ix_t203_opp_split_fact_sid_timestamp on t203_opp_split_fact t203_opp_split_fact_1 (cost=0.57..5.32 rows=1 width=28) (actual time=0.003..0.003 rows=1 loops=812,082)

  • Index Cond: ((t203_opp_split_fact.sid = sid) AND (t203_opp_split_fact.sid = sid) AND (start_stamp <= '1542700799999'::bigint) AND (end_stamp > '1542700799999'::bigint))
  • Filter: (NOT deleted)
  • Rows Removed by Filter: 0
37. 66.875 70.773 ↓ 54.6 785,718 1

Sort (cost=1,308.43..1,344.39 rows=14,387 width=16) (actual time=9.423..70.773 rows=785,718 loops=1)

  • Sort Key: cur290_t1_r1.sid, cur290_t1_r1.rate_date
  • Sort Method: quicksort Memory: 1057kB
38. 0.840 3.898 ↑ 1.0 14,351 1

Append (cost=0.00..314.83 rows=14,387 width=16) (actual time=0.040..3.898 rows=14,351 loops=1)

39. 0.004 0.004 ↓ 0.0 0 1

Seq Scan on clari_conversion_rate cur290_t1_r1 (cost=0.00..0.00 rows=1 width=16) (actual time=0.004..0.004 rows=0 loops=1)

  • Filter: (to_iso_code = 'USD'::text)
40. 3.054 3.054 ↑ 1.0 14,351 1

Seq Scan on usd_clari_conversion_rate cur290_t1_r1_1 (cost=0.00..314.83 rows=14,386 width=16) (actual time=0.035..3.054 rows=14,351 loops=1)

  • Filter: (to_iso_code = 'USD'::text)
41.          

SubPlan (forMerge Left Join)

42. 0.003 0.003 ↑ 1.0 2 1

CTE Scan on picklist_0 cte0_2 (cost=0.00..0.04 rows=2 width=4) (actual time=0.002..0.003 rows=2 loops=1)

43. 0.001 0.001 ↑ 1.0 2 1

CTE Scan on picklist_0 cte0_3 (cost=0.00..0.04 rows=2 width=4) (actual time=0.000..0.001 rows=2 loops=1)

44. 0.043 0.043 ↑ 2.1 570 1

CTE Scan on ownercte (cost=0.00..23.76 rows=1,188 width=4) (actual time=0.000..0.043 rows=570 loops=1)

45.          

CTE openwont1ids

46. 556.459 9,614.661 ↓ 4,060.4 812,082 1

HashAggregate (cost=11,836.12..11,838.12 rows=200 width=4) (actual time=9,362.560..9,614.661 rows=812,082 loops=1)

  • Group Key: cte0_5.c1
47. 9,058.202 9,058.202 ↓ 1.5 812,082 1

CTE Scan on openwont1 cte0_5 (cost=0.00..10,521.00 rows=526,050 width=4) (actual time=7,818.045..9,058.202 rows=812,082 loops=1)

48.          

CTE bucketab

49. 223.070 1,370.258 ↑ 3,287.8 16 1

GroupAggregate (cost=80,286.98..90,018.91 rows=52,605 width=68) (actual time=1,028.873..1,370.258 rows=16 loops=1)

  • Group Key: cte0_6.c5, (CASE WHEN cte0_6.c6 THEN CASE WHEN cte0_6.c4 THEN 'convertedWon'::text ELSE 'convertedOpen'::text END ELSE CASE WHEN cte0_6.c4 THEN 'unconvertedWon'::text ELSE 'unconvertedOpen'::text END END), cte0_6.c3
50. 976.077 1,147.188 ↓ 1.5 812,082 1

Sort (cost=80,286.98..81,602.11 rows=526,050 width=64) (actual time=780.327..1,147.188 rows=812,082 loops=1)

  • Sort Key: cte0_6.c5, (CASE WHEN cte0_6.c6 THEN CASE WHEN cte0_6.c4 THEN 'convertedWon'::text ELSE 'convertedOpen'::text END ELSE CASE WHEN cte0_6.c4 THEN 'unconvertedWon'::text ELSE 'unconvertedOpen'::text END END), cte0_6.c3
  • Sort Method: external merge Disk: 45680kB
51. 171.111 171.111 ↓ 1.5 812,082 1

CTE Scan on openwont1 cte0_6 (cost=0.00..10,521.00 rows=526,050 width=64) (actual time=0.019..171.111 rows=812,082 loops=1)

52.          

CTE picklist_3

53. 0.047 0.047 ↑ 1.1 16 1

Seq Scan on t205_opportunitystagenamepicklistdim t205_opportunitystagenamepicklistdim_3 (cost=0.00..6.00 rows=17 width=4) (actual time=0.019..0.047 rows=16 loops=1)

  • Filter: (correlated_value = ANY ('{"16 - Closed / Invalid or Duplicate Oppty","Closed - Dead","Closed - Call later","13 \\u2013 Closed / Lost to No Decision",Churn,"12 - Closed / Lost to Competition","Trial Lost","Closed Lost","15 - Closed / Lost to Churn","Closed Won","14 - Closed / Mid Cycle Qualify Out","13 - Closed / Lost to No Decision","Stage 16 - Closed / Invalid or Duplicate","Trial Won","Closed - Free","11 - Delayed or Deprioritized","Closed - No Decision"}'::text[]))
  • Rows Removed by Filter: 48
54.          

CTE bucketd

55. 99.939 14,569.393 ↑ 6,158.5 4 1

GroupAggregate (cost=985,332.86..986,195.05 rows=24,634 width=120) (actual time=14,414.813..14,569.393 rows=4 loops=1)

  • Group Key: '1533193199999'::bigint, (CASE WHEN (t203_opp_split_fact_3.sid IS NULL) THEN 'trendNew'::text WHEN (NOT (hashed SubPlan 12)) THEN CASE WHEN (t203_opp_split_fact_3.c782_opp_close_date > 20180930) THEN 'pulledIn'::text WHEN (t203_opp_split_fact_3.c782_opp_close_date < 20180701) THEN 'pushedIn'::text WHEN (hashed SubPlan 13) THEN 'other'::text ELSE 'ownerChange'::text END ELSE 'other'::text END)
56. 230.895 14,469.454 ↓ 17.5 431,204 1

Sort (cost=985,305.75..985,367.33 rows=24,634 width=60) (actual time=14,414.565..14,469.454 rows=431,204 loops=1)

  • Sort Key: (CASE WHEN (t203_opp_split_fact_3.sid IS NULL) THEN 'trendNew'::text WHEN (NOT (hashed SubPlan 12)) THEN CASE WHEN (t203_opp_split_fact_3.c782_opp_close_date > 20180930) THEN 'pulledIn'::text WHEN (t203_opp_split_fact_3.c782_opp_close_date < 20180701) THEN 'pushedIn'::text WHEN (hashed SubPlan 13) THEN 'other'::text ELSE 'ownerChange'::text END ELSE 'other'::text END)
  • Sort Method: external merge Disk: 21080kB
57. 219.727 14,238.559 ↓ 17.5 431,204 1

Nested Loop Left Join (cost=64.03..983,508.90 rows=24,634 width=60) (actual time=10,017.282..14,238.559 rows=431,204 loops=1)

58. 200.159 13,156.370 ↓ 17.5 431,204 1

Nested Loop Left Join (cost=36.35..840,489.83 rows=24,634 width=20) (actual time=10,017.264..13,156.370 rows=431,204 loops=1)

59. 102.890 12,093.803 ↓ 17.5 431,204 1

Hash Join (cost=36.35..832,400.39 rows=24,634 width=20) (actual time=10,017.227..12,093.803 rows=431,204 loops=1)

  • Hash Cond: (t203_opp_split_fact_2.c712_opportunity_split_ownerid = ownercte_3.c1)
60. 97.299 11,990.628 ↓ 8.8 433,316 1

Nested Loop (cost=5.12..832,060.00 rows=49,267 width=24) (actual time=10,006.657..11,990.628 rows=433,316 loops=1)

61. 0.001 0.043 ↑ 1.0 2 1

Unique (cost=0.05..0.06 rows=2 width=4) (actual time=0.038..0.043 rows=2 loops=1)

62. 0.014 0.042 ↑ 1.0 2 1

Sort (cost=0.05..0.06 rows=2 width=4) (actual time=0.038..0.042 rows=2 loops=1)

  • Sort Key: cte0_9.c1
  • Sort Method: quicksort Memory: 25kB
63. 0.028 0.028 ↑ 1.0 2 1

CTE Scan on picklist_0 cte0_9 (cost=0.00..0.04 rows=2 width=4) (actual time=0.019..0.028 rows=2 loops=1)

64. 2,104.789 11,893.286 ↓ 8.8 216,658 2

Index Scan using ix_t203_opp_split_fact_closedate_stage_timestamp on t203_opp_split_fact t203_opp_split_fact_2 (cost=5.07..415,783.64 rows=24,633 width=28) (actual time=5,158.077..5,946.643 rows=216,658 loops=2)

  • Index Cond: ((c782_opp_close_date >= 20180701) AND (c782_opp_close_date <= 20180930) AND (c771_opp_stagename = cte0_9.c1) AND (start_stamp <= '1542700799999'::bigint) AND (end_stamp > '1542700799999'::bigint))
  • Filter: ((NOT deleted) AND (NOT (hashed SubPlan 14)))
  • Rows Removed by Filter: 505035
65.          

SubPlan (forIndex Scan)

66. 9,788.497 9,788.497 ↓ 4,060.4 812,082 1

CTE Scan on openwont1ids cte0_8 (cost=0.00..4.00 rows=200 width=4) (actual time=9,362.561..9,788.497 rows=812,082 loops=1)

67. 0.054 0.285 ↓ 2.9 570 1

Hash (cost=28.73..28.73 rows=200 width=4) (actual time=0.285..0.285 rows=570 loops=1)

  • Buckets: 1024 Batches: 1 Memory Usage: 29kB
68. 0.187 0.231 ↓ 2.9 570 1

HashAggregate (cost=26.73..28.73 rows=200 width=4) (actual time=0.163..0.231 rows=570 loops=1)

  • Group Key: ownercte_3.c1
69. 0.044 0.044 ↑ 2.1 570 1

CTE Scan on ownercte ownercte_3 (cost=0.00..23.76 rows=1,188 width=4) (actual time=0.003..0.044 rows=570 loops=1)

70. 0.000 862.408 ↑ 2.0 1 431,204

Append (cost=0.00..0.31 rows=2 width=16) (actual time=0.002..0.002 rows=1 loops=431,204)

71. 0.000 0.000 ↓ 0.0 0 431,204

Seq Scan on clari_conversion_rate cur290_t0_r0_2 (cost=0.00..0.00 rows=1 width=16) (actual time=0.000..0.000 rows=0 loops=431,204)

  • Filter: ((to_iso_code = 'USD'::text) AND (t203_opp_split_fact_2.c778_opp_currency_code = sid) AND (t203_opp_split_fact_2.c782_opp_close_date = rate_date))
72. 862.408 862.408 ↑ 1.0 1 431,204

Index Scan using ix_usd_clari_conversion_rate_date_isocode on usd_clari_conversion_rate cur290_t0_r0_3 (cost=0.29..0.31 rows=1 width=16) (actual time=0.002..0.002 rows=1 loops=431,204)

  • Index Cond: ((t203_opp_split_fact_2.c782_opp_close_date = rate_date) AND (t203_opp_split_fact_2.c778_opp_currency_code = sid))
  • Filter: (to_iso_code = 'USD'::text)
73. 862.408 862.408 ↓ 0.0 0 431,204

Index Scan using ix_t203_opp_split_fact_sid_timestamp on t203_opp_split_fact t203_opp_split_fact_3 (cost=0.57..5.78 rows=1 width=16) (actual time=0.002..0.002 rows=0 loops=431,204)

  • Index Cond: ((t203_opp_split_fact_2.sid = sid) AND (t203_opp_split_fact_2.sid = sid) AND (start_stamp <= '1533193199999'::bigint) AND (end_stamp > '1533193199999'::bigint))
  • Filter: (NOT deleted)
74.          

SubPlan (forNested Loop Left Join)

75. 0.054 0.054 ↑ 1.1 16 1

CTE Scan on picklist_3 cte0_7 (cost=0.00..0.34 rows=17 width=4) (actual time=0.021..0.054 rows=16 loops=1)

76. 0.000 0.000 ↓ 0.0 0

CTE Scan on ownercte ownercte_2 (cost=0.00..23.76 rows=1,188 width=4) (never executed)

77. 0.011 14,569.411 ↑ 6,158.5 4 1

Subquery Scan on *SELECT* 1 (cost=0.00..800.61 rows=24,634 width=96) (actual time=14,414.822..14,569.411 rows=4 loops=1)

78. 14,569.400 14,569.400 ↑ 6,158.5 4 1

CTE Scan on bucketd cte0 (cost=0.00..492.68 rows=24,634 width=120) (actual time=14,414.816..14,569.400 rows=4 loops=1)

79. 0.031 1,370.348 ↑ 1,052.1 16 1

Hash Join (cost=5.44..1,423.15 rows=16,834 width=83) (actual time=1,028.943..1,370.348 rows=16 loops=1)

  • Hash Cond: (cte0_1.c6 = t205_opportunitystagenamepicklistdim.sid)
80. 1,370.270 1,370.270 ↑ 3,287.8 16 1

CTE Scan on bucketab cte0_1 (cost=0.00..1,052.10 rows=52,605 width=68) (actual time=1,028.877..1,370.270 rows=16 loops=1)

81. 0.015 0.047 ↑ 1.0 64 1

Hash (cost=4.64..4.64 rows=64 width=23) (actual time=0.047..0.047 rows=64 loops=1)

  • Buckets: 1024 Batches: 1 Memory Usage: 12kB
82. 0.032 0.032 ↑ 1.0 64 1

Seq Scan on t205_opportunitystagenamepicklistdim (cost=0.00..4.64 rows=64 width=23) (actual time=0.014..0.032 rows=64 loops=1)