When I use explain analyze
to profile a join query:
D create or replace table r1 as select range, (random()*100)::UINT8 as r from range(0,500000);
D create or replace table r2 as select range, (random()*100)::UINT8 as r from range(0,500000);
D explain analyze select avg(r1.range + r2.range) from r1 join r2 on r1.r = r2.r;
I see that Total Time (~9s) is less than the HASH_JOIN operator time (~21s), how should I interpret that?
┌─────────────────────────────────────┐
│┌───────────────────────────────────┐│
││ Total Time: 9.10s ││
│└───────────────────────────────────┘│
└─────────────────────────────────────┘
┌───────────────────────────┐
│ EXPLAIN_ANALYZE │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ 0 │
│ (0.00s) │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ UNGROUPED_AGGREGATE │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ avg(#0) │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ 1 │
│ (6.83s) │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ PROJECTION │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ (range) + (range) │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ 2499963940 │
│ (4.69s) │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ HASH_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ INNER │
│ r = r │
│ EC = 2551020408.163265 ├──────────────┐
│ COST = 2551020408.163265 │ │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ 2499963940 │ │
│ (21.19s) │ │
└─────────────┬─────────────┘ │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│ SEQ_SCAN ││ SEQ_SCAN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ r1 ││ r2 │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ r ││ r │
│ range ││ range │
│ EC=500000 ││ EC=500000 │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ 500000 ││ 500000 │
│ (0.00s) ││ (0.00s) │
└───────────────────────────┘└───────────────────────────┘