Skip to content

[vibe bench] feat: implement LeftSingle join type for scalar subquery decorrelation#20999

Closed
Dandandan wants to merge 3 commits intoapache:mainfrom
Dandandan:feat/left-single-join
Closed

[vibe bench] feat: implement LeftSingle join type for scalar subquery decorrelation#20999
Dandandan wants to merge 3 commits intoapache:mainfrom
Dandandan:feat/left-single-join

Conversation

@Dandandan
Copy link
Contributor

Introduce a new LeftSingle join operator that behaves like a left outer join but errors at runtime if more than one right-side row matches any given left-side row. This enforces the SQL scalar subquery invariant (at most one row) at the join level rather than relying on recursive evaluation, enabling O(n) hash-based execution.

The scalar_subquery_to_join optimizer rule now emits LeftSingle joins instead of Left joins, and the eliminate_outer_join rule can still convert LeftSingle to Inner when the right side is proven non-nullable.

Which issue does this PR close?

  • Closes #.

Rationale for this change

What changes are included in this PR?

Are these changes tested?

Are there any user-facing changes?

Introduce a new LeftSingle join operator that behaves like a left outer
join but errors at runtime if more than one right-side row matches any
given left-side row. This enforces the SQL scalar subquery invariant
(at most one row) at the join level rather than relying on recursive
evaluation, enabling O(n) hash-based execution.

The scalar_subquery_to_join optimizer rule now emits LeftSingle joins
instead of Left joins, and the eliminate_outer_join rule can still
convert LeftSingle to Inner when the right side is proven non-nullable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Dandandan Dandandan marked this pull request as draft March 17, 2026 15:33
@Dandandan Dandandan changed the title [vibe bench[ feat: implement LeftSingle join type for scalar subquery decorrelation [vibe bench] feat: implement LeftSingle join type for scalar subquery decorrelation Mar 17, 2026
@Dandandan
Copy link
Contributor Author

run benchmarks

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4075896985-365-lrct6 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (8086973) to fa6706a (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4075896985-366-f6jk6 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (8086973) to fa6706a (merge-base) diff using: tpcds
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4075896985-367-dgrwx 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (8086973) to fa6706a (merge-base) diff using: tpch
Results will be posted here when complete

- Replace HashSet with bitmap in check_single_match for efficiency
- Use DataFusionError::Execution instead of Internal (user-facing error)
- Simplify supports_swap to just `!matches!(self, LeftSingle)`
- Don't eliminate LeftSingle to Inner (would lose at-most-one constraint)
- Use nested match instead of if/else chain in functional_dependencies

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃          feat_left-single-join ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │ 48.28 / 49.42 ±1.27 / 51.67 ms │ 47.56 / 48.38 ±0.50 / 49.13 ms │    no change │
│ QQuery 2  │ 26.01 / 26.24 ±0.37 / 26.98 ms │ 26.17 / 26.34 ±0.15 / 26.57 ms │    no change │
│ QQuery 3  │ 35.34 / 36.00 ±0.82 / 37.44 ms │ 34.49 / 34.89 ±0.33 / 35.49 ms │    no change │
│ QQuery 4  │ 22.46 / 23.41 ±0.85 / 25.00 ms │ 22.61 / 23.58 ±0.65 / 24.37 ms │    no change │
│ QQuery 5  │ 55.09 / 56.70 ±1.45 / 58.63 ms │ 54.86 / 56.50 ±1.42 / 58.36 ms │    no change │
│ QQuery 6  │ 18.11 / 18.28 ±0.14 / 18.49 ms │ 18.83 / 19.17 ±0.23 / 19.52 ms │    no change │
│ QQuery 7  │ 59.24 / 61.26 ±1.12 / 62.56 ms │ 61.66 / 63.45 ±1.13 / 65.01 ms │    no change │
│ QQuery 8  │ 52.98 / 53.52 ±0.52 / 54.19 ms │ 54.36 / 54.95 ±0.56 / 55.86 ms │    no change │
│ QQuery 9  │ 59.19 / 59.98 ±0.85 / 61.54 ms │ 59.94 / 61.80 ±1.77 / 64.06 ms │    no change │
│ QQuery 10 │ 74.06 / 75.47 ±1.63 / 78.61 ms │ 78.35 / 79.60 ±1.05 / 81.10 ms │ 1.05x slower │
│ QQuery 11 │ 16.73 / 17.04 ±0.27 / 17.37 ms │ 18.50 / 18.68 ±0.20 / 19.00 ms │ 1.10x slower │
│ QQuery 12 │ 29.13 / 30.65 ±2.32 / 35.27 ms │ 30.24 / 31.09 ±0.56 / 31.87 ms │    no change │
│ QQuery 13 │ 40.95 / 41.21 ±0.24 / 41.60 ms │ 41.53 / 43.27 ±1.20 / 44.44 ms │ 1.05x slower │
│ QQuery 14 │ 29.64 / 30.40 ±1.05 / 32.48 ms │ 30.90 / 31.15 ±0.28 / 31.69 ms │    no change │
│ QQuery 15 │ 36.55 / 37.50 ±0.69 / 38.44 ms │ 38.69 / 39.06 ±0.25 / 39.48 ms │    no change │
│ QQuery 16 │ 18.03 / 18.66 ±0.39 / 19.16 ms │ 18.85 / 19.37 ±0.30 / 19.68 ms │    no change │
│ QQuery 17 │ 75.01 / 75.86 ±0.73 / 76.98 ms │ 83.17 / 85.13 ±2.22 / 89.17 ms │ 1.12x slower │
│ QQuery 18 │ 81.51 / 83.86 ±1.39 / 85.10 ms │ 86.40 / 87.88 ±1.14 / 89.37 ms │    no change │
│ QQuery 19 │ 39.94 / 40.44 ±0.36 / 41.04 ms │ 40.94 / 41.80 ±0.82 / 43.00 ms │    no change │
│ QQuery 20 │ 44.85 / 45.42 ±0.38 / 45.94 ms │ 46.51 / 47.50 ±0.59 / 48.37 ms │    no change │
│ QQuery 21 │ 71.99 / 74.50 ±1.65 / 76.19 ms │ 74.62 / 77.52 ±1.67 / 79.18 ms │    no change │
│ QQuery 22 │ 21.11 / 21.62 ±0.52 / 22.57 ms │ 21.42 / 21.86 ±0.45 / 22.48 ms │    no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                    ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                    │  977.47ms │
│ Total Time (feat_left-single-join)   │ 1012.98ms │
│ Average Time (HEAD)                  │   44.43ms │
│ Average Time (feat_left-single-join) │   46.04ms │
│ Queries Faster                       │         0 │
│ Queries Slower                       │         4 │
│ Queries with No Change               │        18 │
│ Queries with Failure                 │         0 │
└──────────────────────────────────────┴───────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.2s
Peak memory 3.9 GiB
Avg memory 3.5 GiB
CPU user 34.8s
CPU sys 3.2s
Disk read 0 B
Disk write 136.0 KiB

tpch — branch

Metric Value
Wall time 5.3s
Peak memory 3.9 GiB
Avg memory 3.5 GiB
CPU user 36.1s
CPU sys 3.4s
Disk read 0 B
Disk write 56.0 KiB

@Dandandan
Copy link
Contributor Author

run benchmarks

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4076021711-370-f2sqg 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (2875ca7) to fa6706a (merge-base) diff using: tpch
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4076021711-369-ltqcx 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (2875ca7) to fa6706a (merge-base) diff using: tpcds
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4076021711-368-6d66l 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (2875ca7) to fa6706a (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                     HEAD ┃                    feat_left-single-join ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           49.65 / 50.12 ±0.47 / 51.02 ms │           49.22 / 49.97 ±0.67 / 50.85 ms │     no change │
│ QQuery 2  │        154.58 / 155.84 ±1.29 / 158.20 ms │        154.84 / 155.62 ±0.72 / 156.84 ms │     no change │
│ QQuery 3  │        120.64 / 121.15 ±0.82 / 122.79 ms │        120.78 / 121.58 ±0.59 / 122.32 ms │     no change │
│ QQuery 4  │    1341.42 / 1382.23 ±37.24 / 1428.59 ms │    1339.80 / 1407.20 ±56.17 / 1477.10 ms │     no change │
│ QQuery 5  │        187.74 / 188.42 ±0.60 / 189.34 ms │        187.68 / 189.46 ±1.90 / 192.72 ms │     no change │
│ QQuery 6  │     996.62 / 1026.67 ±33.10 / 1067.38 ms │    1026.61 / 1040.84 ±15.66 / 1070.57 ms │     no change │
│ QQuery 7  │        362.94 / 367.57 ±3.00 / 372.26 ms │        357.08 / 361.04 ±2.93 / 364.58 ms │     no change │
│ QQuery 8  │        124.69 / 125.32 ±0.70 / 126.53 ms │        123.91 / 125.45 ±1.35 / 127.70 ms │     no change │
│ QQuery 9  │        118.62 / 121.63 ±5.40 / 132.41 ms │        111.67 / 116.26 ±3.33 / 119.02 ms │     no change │
│ QQuery 10 │        114.43 / 115.80 ±1.35 / 118.22 ms │        115.35 / 117.37 ±1.41 / 119.25 ms │     no change │
│ QQuery 11 │       914.96 / 946.39 ±25.54 / 984.22 ms │     968.36 / 1020.17 ±35.01 / 1058.07 ms │  1.08x slower │
│ QQuery 12 │           47.05 / 49.12 ±1.27 / 50.72 ms │           48.58 / 49.72 ±0.80 / 50.62 ms │     no change │
│ QQuery 13 │        406.36 / 408.26 ±1.38 / 410.34 ms │        402.75 / 407.08 ±4.08 / 413.39 ms │     no change │
│ QQuery 14 │     1096.38 / 1100.99 ±3.63 / 1106.37 ms │     1096.67 / 1105.78 ±6.77 / 1115.25 ms │     no change │
│ QQuery 15 │           18.59 / 19.44 ±0.65 / 20.27 ms │           17.85 / 18.52 ±0.70 / 19.60 ms │     no change │
│ QQuery 16 │           47.01 / 47.85 ±0.53 / 48.36 ms │           45.67 / 46.22 ±0.51 / 47.13 ms │     no change │
│ QQuery 17 │        251.57 / 255.67 ±2.86 / 259.99 ms │        248.46 / 251.19 ±1.71 / 253.67 ms │     no change │
│ QQuery 18 │        135.03 / 136.05 ±0.73 / 137.19 ms │        133.01 / 134.08 ±0.67 / 135.04 ms │     no change │
│ QQuery 19 │        165.33 / 165.82 ±0.40 / 166.55 ms │        161.87 / 166.12 ±2.82 / 169.37 ms │     no change │
│ QQuery 20 │           16.37 / 16.98 ±0.56 / 17.97 ms │           15.76 / 16.87 ±0.74 / 18.03 ms │     no change │
│ QQuery 21 │           24.67 / 25.26 ±0.43 / 25.84 ms │           24.91 / 25.34 ±0.36 / 25.90 ms │     no change │
│ QQuery 22 │        514.69 / 521.53 ±5.54 / 530.74 ms │        532.04 / 533.12 ±1.04 / 535.01 ms │     no change │
│ QQuery 23 │        939.17 / 947.97 ±6.27 / 956.60 ms │       694.71 / 708.78 ±11.49 / 722.61 ms │ +1.34x faster │
│ QQuery 24 │        435.63 / 439.03 ±3.29 / 444.71 ms │        432.44 / 436.05 ±3.89 / 442.92 ms │     no change │
│ QQuery 25 │        373.54 / 374.99 ±1.11 / 376.34 ms │        363.35 / 366.82 ±2.29 / 370.10 ms │     no change │
│ QQuery 26 │           85.34 / 89.15 ±2.10 / 91.13 ms │           84.92 / 85.45 ±0.58 / 86.54 ms │     no change │
│ QQuery 27 │        358.67 / 361.87 ±2.17 / 365.18 ms │        348.89 / 353.52 ±3.23 / 358.30 ms │     no change │
│ QQuery 28 │        154.32 / 157.63 ±2.10 / 160.14 ms │        154.90 / 156.28 ±1.03 / 157.50 ms │     no change │
│ QQuery 29 │        310.56 / 312.90 ±1.59 / 315.15 ms │        313.77 / 316.98 ±2.81 / 320.08 ms │     no change │
│ QQuery 30 │           46.75 / 49.54 ±1.59 / 51.01 ms │           48.68 / 50.19 ±1.30 / 52.20 ms │     no change │
│ QQuery 31 │        185.59 / 187.63 ±1.36 / 189.25 ms │        188.49 / 190.78 ±2.18 / 194.45 ms │     no change │
│ QQuery 32 │           62.41 / 63.00 ±0.52 / 63.64 ms │           64.39 / 65.50 ±1.00 / 66.92 ms │     no change │
│ QQuery 33 │        150.70 / 152.38 ±1.34 / 154.29 ms │        155.04 / 157.52 ±1.63 / 159.47 ms │     no change │
│ QQuery 34 │        110.51 / 111.08 ±0.40 / 111.74 ms │        113.07 / 116.52 ±2.14 / 118.97 ms │     no change │
│ QQuery 35 │        115.87 / 117.45 ±1.00 / 118.84 ms │        121.62 / 122.31 ±0.77 / 123.65 ms │     no change │
│ QQuery 36 │        221.95 / 226.93 ±3.76 / 230.93 ms │        224.44 / 231.60 ±4.48 / 236.80 ms │     no change │
│ QQuery 37 │        185.86 / 187.81 ±1.44 / 189.84 ms │        183.82 / 187.61 ±2.13 / 189.59 ms │     no change │
│ QQuery 38 │          94.67 / 97.74 ±2.25 / 100.70 ms │           93.34 / 96.01 ±1.64 / 97.90 ms │     no change │
│ QQuery 39 │        134.88 / 140.43 ±2.79 / 142.18 ms │        139.27 / 141.32 ±1.72 / 144.36 ms │     no change │
│ QQuery 40 │        118.88 / 123.08 ±4.06 / 130.42 ms │        116.68 / 122.68 ±6.37 / 134.65 ms │     no change │
│ QQuery 41 │           17.99 / 19.79 ±0.93 / 20.64 ms │           18.45 / 19.13 ±0.51 / 19.81 ms │     no change │
│ QQuery 42 │        113.21 / 114.97 ±0.88 / 115.50 ms │        113.06 / 114.48 ±1.24 / 116.10 ms │     no change │
│ QQuery 43 │           88.85 / 89.83 ±0.59 / 90.39 ms │           87.92 / 88.94 ±0.83 / 90.38 ms │     no change │
│ QQuery 44 │           17.33 / 18.24 ±0.89 / 19.81 ms │           17.25 / 17.50 ±0.19 / 17.77 ms │     no change │
│ QQuery 45 │           57.18 / 58.93 ±1.08 / 60.33 ms │           56.25 / 56.86 ±0.70 / 58.22 ms │     no change │
│ QQuery 46 │        245.05 / 246.70 ±1.41 / 248.49 ms │        238.03 / 242.70 ±2.61 / 245.56 ms │     no change │
│ QQuery 47 │       746.58 / 779.03 ±16.42 / 790.37 ms │       718.70 / 729.07 ±10.67 / 749.34 ms │ +1.07x faster │
│ QQuery 48 │        295.31 / 302.50 ±7.45 / 315.56 ms │        297.73 / 300.41 ±1.80 / 302.59 ms │     no change │
│ QQuery 49 │        265.29 / 270.04 ±3.05 / 274.81 ms │        264.57 / 266.66 ±2.12 / 269.25 ms │     no change │
│ QQuery 50 │        239.07 / 242.19 ±2.55 / 244.91 ms │        242.45 / 249.29 ±4.17 / 253.79 ms │     no change │
│ QQuery 51 │        190.40 / 192.54 ±2.07 / 195.73 ms │        192.13 / 198.51 ±3.53 / 202.13 ms │     no change │
│ QQuery 52 │        113.77 / 115.36 ±1.82 / 118.15 ms │        114.49 / 115.06 ±0.30 / 115.35 ms │     no change │
│ QQuery 53 │        110.23 / 111.06 ±0.71 / 112.26 ms │        109.56 / 110.74 ±1.01 / 112.60 ms │     no change │
│ QQuery 54 │        155.07 / 156.43 ±1.03 / 157.91 ms │        157.86 / 159.70 ±1.29 / 161.77 ms │     no change │
│ QQuery 55 │        110.99 / 112.69 ±1.34 / 114.39 ms │        112.79 / 114.48 ±1.42 / 116.29 ms │     no change │
│ QQuery 56 │        152.62 / 153.53 ±0.88 / 155.19 ms │        151.97 / 153.48 ±1.28 / 155.66 ms │     no change │
│ QQuery 57 │        188.11 / 192.08 ±3.10 / 196.12 ms │        188.48 / 191.65 ±1.67 / 193.12 ms │     no change │
│ QQuery 58 │        309.87 / 320.95 ±7.15 / 328.54 ms │        315.53 / 321.53 ±5.44 / 330.80 ms │     no change │
│ QQuery 59 │        210.75 / 213.08 ±1.58 / 215.37 ms │        209.18 / 210.91 ±1.32 / 212.81 ms │     no change │
│ QQuery 60 │        155.00 / 157.00 ±1.36 / 159.12 ms │        156.71 / 157.93 ±0.66 / 158.66 ms │     no change │
│ QQuery 61 │        181.40 / 182.60 ±1.19 / 184.83 ms │        180.32 / 181.49 ±0.91 / 182.96 ms │     no change │
│ QQuery 62 │       908.40 / 960.35 ±33.52 / 998.00 ms │       917.37 / 932.05 ±14.59 / 958.49 ms │     no change │
│ QQuery 63 │        110.71 / 112.87 ±1.71 / 115.52 ms │        112.31 / 113.35 ±0.78 / 114.14 ms │     no change │
│ QQuery 64 │        713.57 / 718.58 ±3.58 / 722.97 ms │        721.64 / 725.70 ±4.45 / 734.31 ms │     no change │
│ QQuery 65 │        259.70 / 261.89 ±2.26 / 266.15 ms │        260.80 / 264.03 ±2.48 / 268.19 ms │     no change │
│ QQuery 66 │        264.55 / 271.21 ±4.96 / 279.64 ms │        261.89 / 269.88 ±4.04 / 272.94 ms │     no change │
│ QQuery 67 │        339.02 / 347.01 ±6.59 / 354.43 ms │        339.08 / 344.96 ±5.09 / 350.76 ms │     no change │
│ QQuery 68 │        297.46 / 300.79 ±2.56 / 304.05 ms │        288.01 / 290.89 ±2.54 / 294.16 ms │     no change │
│ QQuery 69 │        112.65 / 115.05 ±2.44 / 118.99 ms │        114.33 / 115.00 ±0.65 / 116.23 ms │     no change │
│ QQuery 70 │        346.44 / 358.90 ±8.35 / 372.60 ms │        346.41 / 359.12 ±9.81 / 372.25 ms │     no change │
│ QQuery 71 │        141.90 / 144.68 ±1.67 / 146.82 ms │        141.99 / 143.43 ±1.53 / 146.36 ms │     no change │
│ QQuery 72 │       713.18 / 724.47 ±11.27 / 744.56 ms │        740.23 / 752.56 ±8.41 / 762.41 ms │     no change │
│ QQuery 73 │        107.57 / 108.18 ±0.68 / 109.11 ms │        109.59 / 112.10 ±1.93 / 115.41 ms │     no change │
│ QQuery 74 │        568.40 / 579.05 ±8.92 / 590.24 ms │       563.80 / 590.26 ±31.98 / 653.18 ms │     no change │
│ QQuery 75 │        295.78 / 298.07 ±1.71 / 300.18 ms │        293.70 / 295.76 ±2.40 / 299.93 ms │     no change │
│ QQuery 76 │        141.16 / 141.86 ±0.58 / 142.67 ms │        139.19 / 140.76 ±1.13 / 142.57 ms │     no change │
│ QQuery 77 │        207.68 / 208.61 ±0.89 / 209.73 ms │        205.39 / 207.27 ±1.07 / 208.69 ms │     no change │
│ QQuery 78 │        374.51 / 379.50 ±3.80 / 383.03 ms │        363.31 / 367.28 ±3.30 / 372.60 ms │     no change │
│ QQuery 79 │        248.67 / 249.77 ±0.67 / 250.62 ms │        236.33 / 240.25 ±2.27 / 243.22 ms │     no change │
│ QQuery 80 │        343.59 / 347.67 ±3.34 / 351.65 ms │        345.70 / 349.22 ±2.62 / 353.77 ms │     no change │
│ QQuery 81 │           32.08 / 32.52 ±0.42 / 33.29 ms │           32.26 / 33.24 ±0.71 / 34.09 ms │     no change │
│ QQuery 82 │        207.76 / 211.55 ±2.68 / 214.88 ms │        211.90 / 215.62 ±3.36 / 220.75 ms │     no change │
│ QQuery 83 │           47.89 / 48.90 ±1.03 / 50.57 ms │           48.78 / 49.98 ±0.72 / 50.95 ms │     no change │
│ QQuery 84 │           51.82 / 53.36 ±0.82 / 54.07 ms │           53.72 / 54.42 ±0.61 / 55.52 ms │     no change │
│ QQuery 85 │        153.84 / 155.74 ±1.50 / 157.61 ms │        156.22 / 158.65 ±2.52 / 163.50 ms │     no change │
│ QQuery 86 │           40.98 / 43.11 ±1.22 / 44.41 ms │           42.18 / 44.19 ±1.32 / 46.33 ms │     no change │
│ QQuery 87 │          94.51 / 97.17 ±2.40 / 100.90 ms │          94.06 / 99.07 ±3.30 / 104.28 ms │     no change │
│ QQuery 88 │        114.87 / 115.23 ±0.22 / 115.55 ms │        115.69 / 116.60 ±1.10 / 118.52 ms │     no change │
│ QQuery 89 │        125.52 / 126.84 ±0.94 / 127.74 ms │        126.75 / 127.85 ±1.12 / 129.83 ms │     no change │
│ QQuery 90 │           28.85 / 30.01 ±0.98 / 31.78 ms │           28.87 / 30.13 ±1.09 / 32.00 ms │     no change │
│ QQuery 91 │           64.41 / 67.15 ±1.53 / 68.68 ms │           67.35 / 68.33 ±0.94 / 69.99 ms │     no change │
│ QQuery 92 │           61.86 / 63.00 ±0.85 / 64.17 ms │           62.61 / 64.33 ±1.62 / 67.17 ms │     no change │
│ QQuery 93 │        195.82 / 198.54 ±2.20 / 201.85 ms │        196.68 / 197.70 ±0.71 / 198.59 ms │     no change │
│ QQuery 94 │           65.20 / 66.14 ±0.96 / 67.95 ms │           65.97 / 66.96 ±0.56 / 67.50 ms │     no change │
│ QQuery 95 │        143.73 / 145.51 ±1.13 / 147.17 ms │        143.38 / 145.74 ±2.35 / 149.73 ms │     no change │
│ QQuery 96 │           78.43 / 80.90 ±1.64 / 83.46 ms │           80.28 / 81.04 ±0.42 / 81.54 ms │     no change │
│ QQuery 97 │        139.74 / 141.93 ±1.64 / 144.38 ms │        132.85 / 135.71 ±2.33 / 139.56 ms │     no change │
│ QQuery 98 │        155.86 / 158.72 ±2.29 / 160.87 ms │        155.10 / 158.31 ±1.78 / 159.85 ms │     no change │
│ QQuery 99 │ 10751.70 / 10811.96 ±38.19 / 10870.70 ms │ 10753.87 / 10788.21 ±27.55 / 10818.95 ms │     no change │
└───────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 34814.99ms │
│ Total Time (feat_left-single-join)   │ 34615.39ms │
│ Average Time (HEAD)                  │   351.67ms │
│ Average Time (feat_left-single-join) │   349.65ms │
│ Queries Faster                       │          2 │
│ Queries Slower                       │          1 │
│ Queries with No Change               │         96 │
│ Queries with Failure                 │          0 │
└──────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 174.4s
Peak memory 5.7 GiB
Avg memory 4.6 GiB
CPU user 275.2s
CPU sys 21.7s
Disk read 0 B
Disk write 636.2 MiB

tpcds — branch

Metric Value
Wall time 173.4s
Peak memory 5.5 GiB
Avg memory 4.5 GiB
CPU user 277.3s
CPU sys 20.9s
Disk read 0 B
Disk write 780.0 KiB

@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                 feat_left-single-join ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.60 / 4.78 ±6.30 / 17.38 ms │          1.68 / 5.07 ±6.58 / 18.23 ms │  1.06x slower │
│ QQuery 1  │        14.61 / 14.95 ±0.19 / 15.21 ms │        15.22 / 15.61 ±0.28 / 15.94 ms │     no change │
│ QQuery 2  │        56.13 / 56.80 ±0.37 / 57.22 ms │        57.69 / 58.07 ±0.23 / 58.40 ms │     no change │
│ QQuery 3  │        47.68 / 51.24 ±2.52 / 54.03 ms │        49.40 / 52.55 ±2.18 / 55.05 ms │     no change │
│ QQuery 4  │     309.01 / 313.93 ±3.81 / 318.87 ms │     316.63 / 319.84 ±2.71 / 323.51 ms │     no change │
│ QQuery 5  │     351.63 / 353.48 ±1.25 / 355.26 ms │     348.75 / 356.04 ±5.32 / 364.27 ms │     no change │
│ QQuery 6  │           5.43 / 6.07 ±0.53 / 6.71 ms │          5.22 / 9.04 ±5.11 / 19.08 ms │  1.49x slower │
│ QQuery 7  │        16.69 / 16.96 ±0.16 / 17.20 ms │        18.08 / 18.98 ±1.20 / 21.27 ms │  1.12x slower │
│ QQuery 8  │    441.65 / 465.80 ±14.61 / 486.29 ms │     437.46 / 450.31 ±9.77 / 466.74 ms │     no change │
│ QQuery 9  │    688.46 / 729.16 ±32.95 / 766.23 ms │     671.84 / 684.62 ±9.83 / 694.04 ms │ +1.07x faster │
│ QQuery 10 │        92.69 / 94.74 ±1.72 / 97.02 ms │       91.94 / 95.92 ±3.70 / 102.82 ms │     no change │
│ QQuery 11 │     105.21 / 106.37 ±1.04 / 108.06 ms │     107.63 / 108.95 ±1.15 / 110.67 ms │     no change │
│ QQuery 12 │     341.63 / 350.91 ±9.73 / 367.18 ms │     340.95 / 351.58 ±8.68 / 367.48 ms │     no change │
│ QQuery 13 │     457.85 / 477.16 ±9.92 / 484.59 ms │    483.91 / 501.07 ±11.61 / 515.21 ms │  1.05x slower │
│ QQuery 14 │     356.47 / 363.29 ±5.36 / 371.86 ms │     380.69 / 387.83 ±3.85 / 392.37 ms │  1.07x slower │
│ QQuery 15 │     407.40 / 412.89 ±6.04 / 423.94 ms │    375.57 / 410.14 ±28.07 / 445.06 ms │     no change │
│ QQuery 16 │    752.20 / 800.13 ±31.29 / 840.44 ms │    745.61 / 763.08 ±11.47 / 780.97 ms │     no change │
│ QQuery 17 │     743.76 / 753.17 ±6.84 / 763.85 ms │    741.82 / 777.04 ±41.54 / 845.19 ms │     no change │
│ QQuery 18 │ 1439.54 / 1496.82 ±36.65 / 1545.36 ms │ 1488.43 / 1568.18 ±61.56 / 1651.25 ms │     no change │
│ QQuery 19 │        36.01 / 37.68 ±1.31 / 39.77 ms │        35.70 / 38.32 ±2.74 / 43.17 ms │     no change │
│ QQuery 20 │    722.29 / 738.08 ±14.63 / 758.15 ms │    715.45 / 729.02 ±19.15 / 766.35 ms │     no change │
│ QQuery 21 │     755.52 / 766.95 ±9.63 / 782.13 ms │     757.15 / 760.96 ±3.98 / 765.84 ms │     no change │
│ QQuery 22 │ 1132.99 / 1151.72 ±14.92 / 1169.15 ms │  1123.29 / 1127.19 ±3.96 / 1133.08 ms │     no change │
│ QQuery 23 │ 3156.40 / 3183.23 ±14.64 / 3198.71 ms │ 3184.46 / 3242.08 ±53.86 / 3312.52 ms │     no change │
│ QQuery 24 │     104.16 / 105.59 ±1.33 / 107.21 ms │     107.88 / 111.23 ±2.20 / 114.07 ms │  1.05x slower │
│ QQuery 25 │     137.57 / 140.40 ±2.13 / 142.53 ms │     143.96 / 145.66 ±1.24 / 147.17 ms │     no change │
│ QQuery 26 │      98.05 / 102.41 ±2.25 / 104.36 ms │     103.95 / 105.41 ±1.65 / 108.49 ms │     no change │
│ QQuery 27 │     848.14 / 856.74 ±7.05 / 864.37 ms │     846.07 / 850.04 ±3.87 / 856.26 ms │     no change │
│ QQuery 28 │ 7741.32 / 7790.38 ±31.74 / 7825.49 ms │ 7748.04 / 7758.34 ±13.76 / 7785.61 ms │     no change │
│ QQuery 29 │        56.54 / 61.09 ±5.00 / 70.24 ms │        58.02 / 64.76 ±7.46 / 75.44 ms │  1.06x slower │
│ QQuery 30 │    367.82 / 378.52 ±10.08 / 396.38 ms │     388.24 / 393.29 ±3.39 / 398.32 ms │     no change │
│ QQuery 31 │     362.80 / 372.00 ±7.25 / 384.48 ms │    362.16 / 381.98 ±12.50 / 398.87 ms │     no change │
│ QQuery 32 │ 1068.25 / 1099.78 ±31.82 / 1154.88 ms │ 1066.47 / 1106.36 ±31.70 / 1138.58 ms │     no change │
│ QQuery 33 │ 1466.84 / 1502.33 ±43.99 / 1588.70 ms │ 1499.12 / 1562.68 ±43.32 / 1615.10 ms │     no change │
│ QQuery 34 │ 1468.90 / 1530.27 ±57.41 / 1605.14 ms │ 1565.67 / 1597.82 ±27.81 / 1640.55 ms │     no change │
│ QQuery 35 │     399.86 / 402.24 ±2.27 / 406.50 ms │    466.28 / 489.73 ±16.17 / 509.54 ms │  1.22x slower │
│ QQuery 36 │     113.84 / 121.37 ±3.88 / 124.94 ms │    130.38 / 143.29 ±13.29 / 168.38 ms │  1.18x slower │
│ QQuery 37 │        49.57 / 51.83 ±1.35 / 53.67 ms │        54.07 / 61.22 ±8.85 / 78.23 ms │  1.18x slower │
│ QQuery 38 │        75.03 / 76.79 ±1.12 / 77.97 ms │        77.72 / 84.89 ±4.15 / 89.84 ms │  1.11x slower │
│ QQuery 39 │     234.81 / 245.43 ±7.09 / 255.80 ms │    231.70 / 242.42 ±10.68 / 258.44 ms │     no change │
│ QQuery 40 │        27.73 / 29.74 ±1.68 / 32.42 ms │        24.24 / 26.79 ±1.40 / 28.50 ms │ +1.11x faster │
│ QQuery 41 │        22.24 / 22.77 ±0.40 / 23.30 ms │        21.11 / 22.90 ±1.38 / 24.47 ms │     no change │
│ QQuery 42 │        21.24 / 21.90 ±0.50 / 22.68 ms │        20.77 / 21.56 ±1.14 / 23.79 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 27657.92ms │
│ Total Time (feat_left-single-join)   │ 28001.83ms │
│ Average Time (HEAD)                  │   643.21ms │
│ Average Time (feat_left-single-join) │   651.21ms │
│ Queries Faster                       │          2 │
│ Queries Slower                       │         11 │
│ Queries with No Change               │         30 │
│ Queries with Failure                 │          0 │
└──────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 139.5s
Peak memory 38.5 GiB
Avg memory 29.0 GiB
CPU user 1305.7s
CPU sys 92.1s
Disk read 0 B
Disk write 4.5 GiB

clickbench_partitioned — branch

Metric Value
Wall time 140.5s
Peak memory 39.1 GiB
Avg memory 30.1 GiB
CPU user 1314.5s
CPU sys 98.2s
Disk read 0 B
Disk write 728.0 KiB

@github-actions github-actions bot added sql SQL Planner logical-expr Logical plan and expressions physical-expr Changes to the physical-expr crates optimizer Optimizer rules core Core DataFusion crate substrait Changes to the substrait crate common Related to common crate proto Related to proto crate physical-plan Changes to the physical-plan crate labels Mar 17, 2026
@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃          feat_left-single-join ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 47.39 / 48.14 ±0.74 / 49.34 ms │ 47.18 / 47.93 ±1.07 / 50.04 ms │     no change │
│ QQuery 2  │ 25.80 / 25.99 ±0.16 / 26.28 ms │ 26.91 / 27.18 ±0.23 / 27.56 ms │     no change │
│ QQuery 3  │ 34.42 / 34.91 ±0.36 / 35.54 ms │ 34.30 / 34.48 ±0.13 / 34.68 ms │     no change │
│ QQuery 4  │ 22.08 / 22.81 ±0.61 / 23.92 ms │ 22.41 / 23.73 ±0.68 / 24.37 ms │     no change │
│ QQuery 5  │ 51.98 / 53.98 ±1.36 / 55.80 ms │ 52.35 / 54.96 ±2.43 / 59.13 ms │     no change │
│ QQuery 6  │ 18.00 / 18.29 ±0.24 / 18.61 ms │ 18.09 / 18.21 ±0.15 / 18.51 ms │     no change │
│ QQuery 7  │ 58.82 / 60.33 ±1.35 / 62.87 ms │ 57.92 / 59.79 ±1.79 / 62.54 ms │     no change │
│ QQuery 8  │ 53.14 / 53.38 ±0.28 / 53.91 ms │ 53.05 / 53.70 ±0.46 / 54.47 ms │     no change │
│ QQuery 9  │ 57.92 / 59.00 ±1.07 / 60.58 ms │ 58.96 / 60.29 ±1.13 / 62.12 ms │     no change │
│ QQuery 10 │ 75.04 / 75.63 ±0.55 / 76.65 ms │ 73.88 / 76.84 ±1.84 / 78.43 ms │     no change │
│ QQuery 11 │ 17.64 / 17.92 ±0.21 / 18.15 ms │ 15.95 / 16.48 ±0.41 / 16.90 ms │ +1.09x faster │
│ QQuery 12 │ 29.56 / 30.77 ±1.66 / 34.03 ms │ 29.77 / 30.11 ±0.26 / 30.40 ms │     no change │
│ QQuery 13 │ 41.15 / 41.67 ±0.30 / 42.04 ms │ 42.11 / 43.00 ±0.82 / 44.18 ms │     no change │
│ QQuery 14 │ 30.08 / 30.36 ±0.33 / 31.00 ms │ 30.23 / 30.52 ±0.24 / 30.90 ms │     no change │
│ QQuery 15 │ 37.18 / 37.67 ±0.37 / 38.14 ms │ 32.36 / 35.34 ±2.48 / 39.67 ms │ +1.07x faster │
│ QQuery 16 │ 18.59 / 18.86 ±0.26 / 19.19 ms │ 18.69 / 19.27 ±0.42 / 19.95 ms │     no change │
│ QQuery 17 │ 78.61 / 79.65 ±1.17 / 81.92 ms │ 80.09 / 81.69 ±1.54 / 83.88 ms │     no change │
│ QQuery 18 │ 82.20 / 84.63 ±1.51 / 86.64 ms │ 86.87 / 88.88 ±1.59 / 91.16 ms │  1.05x slower │
│ QQuery 19 │ 39.50 / 40.64 ±0.89 / 42.01 ms │ 40.00 / 41.41 ±1.97 / 45.29 ms │     no change │
│ QQuery 20 │ 44.20 / 45.47 ±0.83 / 46.83 ms │ 45.63 / 46.14 ±0.40 / 46.84 ms │     no change │
│ QQuery 21 │ 73.76 / 74.43 ±0.50 / 75.05 ms │ 73.45 / 75.47 ±1.36 / 77.38 ms │     no change │
│ QQuery 22 │ 20.96 / 21.39 ±0.35 / 21.92 ms │ 21.03 / 21.55 ±0.38 / 22.09 ms │     no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                    ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 975.92ms │
│ Total Time (feat_left-single-join)   │ 986.95ms │
│ Average Time (HEAD)                  │  44.36ms │
│ Average Time (feat_left-single-join) │  44.86ms │
│ Queries Faster                       │        2 │
│ Queries Slower                       │        1 │
│ Queries with No Change               │       19 │
│ Queries with Failure                 │        0 │
└──────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.2s
Peak memory 3.9 GiB
Avg memory 3.5 GiB
CPU user 34.5s
CPU sys 3.4s
Disk read 0 B
Disk write 148.0 KiB

tpch — branch

Metric Value
Wall time 5.2s
Peak memory 4.1 GiB
Avg memory 3.5 GiB
CPU user 34.8s
CPU sys 3.4s
Disk read 0 B
Disk write 56.0 KiB

@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                 feat_left-single-join ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.63 / 4.84 ±6.31 / 17.47 ms │          1.64 / 4.90 ±6.39 / 17.67 ms │     no change │
│ QQuery 1  │        14.86 / 15.06 ±0.14 / 15.26 ms │        15.53 / 15.65 ±0.09 / 15.79 ms │     no change │
│ QQuery 2  │        56.77 / 57.08 ±0.22 / 57.47 ms │        57.51 / 57.85 ±0.34 / 58.44 ms │     no change │
│ QQuery 3  │        49.60 / 50.85 ±0.94 / 52.44 ms │        51.02 / 52.75 ±1.39 / 54.66 ms │     no change │
│ QQuery 4  │     303.26 / 309.87 ±4.72 / 315.42 ms │     321.64 / 331.02 ±8.55 / 346.60 ms │  1.07x slower │
│ QQuery 5  │     351.54 / 354.37 ±3.08 / 360.20 ms │     368.27 / 373.81 ±4.03 / 379.59 ms │  1.05x slower │
│ QQuery 6  │           5.17 / 5.75 ±0.46 / 6.59 ms │          5.93 / 8.44 ±2.98 / 14.28 ms │  1.47x slower │
│ QQuery 7  │        17.13 / 17.58 ±0.39 / 18.28 ms │        18.04 / 18.51 ±0.86 / 20.23 ms │  1.05x slower │
│ QQuery 8  │     437.86 / 443.36 ±4.24 / 450.46 ms │    465.35 / 479.91 ±10.19 / 492.97 ms │  1.08x slower │
│ QQuery 9  │    675.04 / 694.18 ±16.35 / 715.03 ms │    718.67 / 734.97 ±11.68 / 750.95 ms │  1.06x slower │
│ QQuery 10 │       92.67 / 95.00 ±2.86 / 100.39 ms │       94.95 / 98.22 ±3.03 / 103.85 ms │     no change │
│ QQuery 11 │     106.53 / 108.97 ±1.32 / 110.07 ms │     108.41 / 109.89 ±1.38 / 112.33 ms │     no change │
│ QQuery 12 │     357.73 / 366.51 ±8.00 / 380.84 ms │     351.97 / 354.32 ±1.82 / 356.64 ms │     no change │
│ QQuery 13 │     493.45 / 500.53 ±5.16 / 507.88 ms │    466.98 / 482.31 ±11.06 / 500.83 ms │     no change │
│ QQuery 14 │     370.98 / 376.06 ±3.39 / 381.64 ms │     362.53 / 365.07 ±1.92 / 367.60 ms │     no change │
│ QQuery 15 │    392.22 / 417.53 ±24.80 / 460.22 ms │    377.14 / 394.42 ±16.42 / 419.04 ms │ +1.06x faster │
│ QQuery 16 │    808.93 / 830.28 ±24.69 / 878.05 ms │    755.62 / 767.18 ±11.69 / 787.22 ms │ +1.08x faster │
│ QQuery 17 │    811.05 / 845.85 ±25.80 / 883.19 ms │    747.32 / 780.56 ±33.17 / 839.74 ms │ +1.08x faster │
│ QQuery 18 │ 1568.22 / 1687.96 ±75.66 / 1756.34 ms │ 1504.81 / 1539.72 ±48.19 / 1632.51 ms │ +1.10x faster │
│ QQuery 19 │      40.39 / 60.95 ±35.98 / 132.79 ms │        36.12 / 37.66 ±2.57 / 42.78 ms │ +1.62x faster │
│ QQuery 20 │    740.40 / 772.57 ±33.57 / 824.89 ms │    718.27 / 731.51 ±14.54 / 758.89 ms │ +1.06x faster │
│ QQuery 21 │     780.72 / 787.83 ±4.98 / 794.47 ms │     760.26 / 765.71 ±4.98 / 774.40 ms │     no change │
│ QQuery 22 │  1164.62 / 1171.71 ±8.30 / 1187.86 ms │  1132.86 / 1138.53 ±3.46 / 1142.21 ms │     no change │
│ QQuery 23 │ 3295.16 / 3322.38 ±29.06 / 3373.44 ms │ 3180.19 / 3207.05 ±15.64 / 3225.03 ms │     no change │
│ QQuery 24 │     105.42 / 110.65 ±6.82 / 124.02 ms │     105.86 / 107.56 ±2.42 / 112.26 ms │     no change │
│ QQuery 25 │     142.45 / 145.91 ±3.50 / 152.61 ms │     140.29 / 141.94 ±0.90 / 142.92 ms │     no change │
│ QQuery 26 │     106.15 / 107.39 ±0.96 / 108.88 ms │     101.60 / 104.35 ±2.27 / 107.10 ms │     no change │
│ QQuery 27 │     855.54 / 863.90 ±7.04 / 875.27 ms │     855.50 / 861.60 ±4.74 / 866.68 ms │     no change │
│ QQuery 28 │ 7749.14 / 7786.83 ±27.72 / 7832.22 ms │ 7739.80 / 7783.38 ±30.62 / 7818.98 ms │     no change │
│ QQuery 29 │        57.49 / 61.77 ±4.79 / 70.90 ms │        56.97 / 61.33 ±4.03 / 67.49 ms │     no change │
│ QQuery 30 │     371.56 / 376.63 ±3.89 / 382.83 ms │     366.77 / 377.45 ±7.63 / 387.25 ms │     no change │
│ QQuery 31 │    359.69 / 384.11 ±17.12 / 412.01 ms │    371.07 / 381.77 ±13.11 / 406.41 ms │     no change │
│ QQuery 32 │ 1082.35 / 1109.09 ±23.53 / 1143.40 ms │ 1150.33 / 1285.17 ±95.91 / 1429.29 ms │  1.16x slower │
│ QQuery 33 │  1539.41 / 1552.50 ±9.73 / 1567.56 ms │  1522.21 / 1529.81 ±6.95 / 1540.54 ms │     no change │
│ QQuery 34 │ 1534.63 / 1552.46 ±21.28 / 1594.22 ms │ 1503.92 / 1518.24 ±16.46 / 1545.22 ms │     no change │
│ QQuery 35 │     446.56 / 452.65 ±5.18 / 461.96 ms │     416.04 / 425.03 ±7.46 / 434.11 ms │ +1.06x faster │
│ QQuery 36 │     127.58 / 130.03 ±1.93 / 132.76 ms │     123.88 / 128.46 ±3.10 / 131.86 ms │     no change │
│ QQuery 37 │        52.90 / 54.29 ±1.53 / 57.18 ms │        51.48 / 53.95 ±1.46 / 55.53 ms │     no change │
│ QQuery 38 │        75.54 / 79.37 ±2.21 / 81.76 ms │        77.54 / 79.34 ±1.16 / 80.57 ms │     no change │
│ QQuery 39 │     234.70 / 239.97 ±4.10 / 243.99 ms │     224.78 / 236.58 ±7.39 / 246.77 ms │     no change │
│ QQuery 40 │        25.69 / 27.65 ±1.73 / 30.44 ms │        24.98 / 28.88 ±2.16 / 31.22 ms │     no change │
│ QQuery 41 │        21.66 / 22.85 ±1.28 / 25.23 ms │        22.53 / 23.51 ±1.23 / 25.92 ms │     no change │
│ QQuery 42 │        21.78 / 22.31 ±0.33 / 22.65 ms │        21.55 / 22.26 ±0.50 / 23.09 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 28377.40ms │
│ Total Time (feat_left-single-join)   │ 28000.52ms │
│ Average Time (HEAD)                  │   659.94ms │
│ Average Time (feat_left-single-join) │   651.17ms │
│ Queries Faster                       │          7 │
│ Queries Slower                       │          7 │
│ Queries with No Change               │         29 │
│ Queries with Failure                 │          0 │
└──────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 143.1s
Peak memory 42.1 GiB
Avg memory 31.9 GiB
CPU user 1338.9s
CPU sys 95.4s
Disk read 0 B
Disk write 3.8 GiB

clickbench_partitioned — branch

Metric Value
Wall time 141.2s
Peak memory 42.3 GiB
Avg memory 29.6 GiB
CPU user 1312.4s
CPU sys 101.0s
Disk read 0 B
Disk write 748.0 KiB

@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                     HEAD ┃                    feat_left-single-join ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           50.08 / 50.99 ±0.80 / 52.12 ms │           50.61 / 51.90 ±0.89 / 52.84 ms │     no change │
│ QQuery 2  │        154.20 / 156.18 ±1.19 / 157.69 ms │        152.77 / 155.32 ±1.39 / 156.69 ms │     no change │
│ QQuery 3  │        120.50 / 121.76 ±1.02 / 123.06 ms │        120.83 / 121.45 ±0.60 / 122.33 ms │     no change │
│ QQuery 4  │    1438.09 / 1461.59 ±21.20 / 1494.81 ms │    1433.46 / 1459.25 ±19.46 / 1492.45 ms │     no change │
│ QQuery 5  │        185.95 / 187.92 ±1.41 / 189.71 ms │        186.34 / 188.57 ±1.58 / 191.14 ms │     no change │
│ QQuery 6  │    1006.80 / 1034.51 ±27.09 / 1085.26 ms │ 40572.48 / 40684.65 ±72.62 / 40776.08 ms │ 39.33x slower │
│ QQuery 7  │        361.09 / 365.91 ±3.83 / 372.19 ms │        363.03 / 366.87 ±2.85 / 371.19 ms │     no change │
│ QQuery 8  │        124.30 / 124.93 ±0.40 / 125.38 ms │        124.00 / 124.90 ±0.62 / 125.70 ms │     no change │
│ QQuery 9  │        113.75 / 118.12 ±2.24 / 119.79 ms │        110.79 / 115.27 ±3.23 / 118.94 ms │     no change │
│ QQuery 10 │        114.27 / 115.64 ±1.25 / 117.48 ms │        114.29 / 115.59 ±0.96 / 116.96 ms │     no change │
│ QQuery 11 │     1024.80 / 1034.98 ±6.70 / 1042.36 ms │    1010.27 / 1022.78 ±10.00 / 1037.13 ms │     no change │
│ QQuery 12 │           46.82 / 49.19 ±1.20 / 50.01 ms │           47.90 / 49.42 ±0.98 / 50.51 ms │     no change │
│ QQuery 13 │        412.52 / 415.03 ±3.03 / 420.71 ms │        411.54 / 413.89 ±2.13 / 417.64 ms │     no change │
│ QQuery 14 │     1104.48 / 1110.04 ±4.28 / 1117.62 ms │        925.07 / 935.02 ±6.31 / 944.48 ms │ +1.19x faster │
│ QQuery 15 │           18.98 / 20.10 ±0.99 / 21.28 ms │           18.88 / 21.34 ±2.68 / 26.45 ms │  1.06x slower │
│ QQuery 16 │           47.23 / 47.48 ±0.26 / 47.97 ms │           45.98 / 47.02 ±0.67 / 48.05 ms │     no change │
│ QQuery 17 │        253.48 / 255.35 ±1.40 / 257.29 ms │        255.83 / 258.09 ±1.72 / 260.53 ms │     no change │
│ QQuery 18 │        132.92 / 135.47 ±1.61 / 137.19 ms │        136.85 / 137.70 ±0.91 / 139.36 ms │     no change │
│ QQuery 19 │        165.99 / 167.41 ±1.21 / 169.27 ms │        165.17 / 166.26 ±0.60 / 166.88 ms │     no change │
│ QQuery 20 │           16.43 / 16.89 ±0.59 / 18.04 ms │           16.03 / 16.67 ±0.37 / 17.14 ms │     no change │
│ QQuery 21 │           24.32 / 25.07 ±0.66 / 26.04 ms │           24.42 / 25.01 ±0.52 / 25.73 ms │     no change │
│ QQuery 22 │        523.09 / 530.48 ±5.43 / 537.27 ms │        523.85 / 527.69 ±4.17 / 535.43 ms │     no change │
│ QQuery 23 │        970.22 / 981.23 ±7.80 / 994.51 ms │       693.06 / 707.86 ±10.10 / 723.15 ms │ +1.39x faster │
│ QQuery 24 │        441.82 / 445.62 ±5.85 / 457.26 ms │        442.64 / 444.71 ±2.01 / 448.21 ms │     no change │
│ QQuery 25 │        363.75 / 370.86 ±3.82 / 374.35 ms │        371.76 / 374.31 ±1.97 / 376.88 ms │     no change │
│ QQuery 26 │           84.69 / 86.35 ±1.40 / 88.48 ms │           84.99 / 88.01 ±2.08 / 91.32 ms │     no change │
│ QQuery 27 │        356.68 / 361.45 ±2.66 / 364.77 ms │        357.30 / 359.76 ±1.93 / 362.19 ms │     no change │
│ QQuery 28 │        156.82 / 158.43 ±1.27 / 160.05 ms │        155.30 / 157.02 ±2.48 / 161.82 ms │     no change │
│ QQuery 29 │        314.67 / 319.67 ±3.12 / 324.38 ms │        310.96 / 315.17 ±2.56 / 317.78 ms │     no change │
│ QQuery 30 │           47.42 / 49.38 ±1.47 / 51.46 ms │           50.00 / 52.29 ±1.35 / 54.02 ms │  1.06x slower │
│ QQuery 31 │        188.36 / 189.99 ±1.20 / 191.26 ms │        186.21 / 187.64 ±1.58 / 189.94 ms │     no change │
│ QQuery 32 │           63.22 / 64.11 ±0.54 / 64.61 ms │           63.86 / 65.10 ±0.95 / 66.36 ms │     no change │
│ QQuery 33 │        154.97 / 155.91 ±0.77 / 156.92 ms │        153.34 / 154.46 ±1.03 / 155.78 ms │     no change │
│ QQuery 34 │        114.91 / 115.96 ±1.17 / 118.16 ms │        112.86 / 113.52 ±0.70 / 114.79 ms │     no change │
│ QQuery 35 │        119.77 / 122.15 ±1.34 / 123.53 ms │        119.01 / 121.02 ±1.47 / 122.70 ms │     no change │
│ QQuery 36 │        230.60 / 234.59 ±2.38 / 237.02 ms │        219.26 / 226.16 ±5.25 / 232.34 ms │     no change │
│ QQuery 37 │        186.98 / 192.09 ±2.70 / 194.65 ms │        185.74 / 189.35 ±2.28 / 192.65 ms │     no change │
│ QQuery 38 │          95.71 / 99.41 ±2.56 / 103.71 ms │           93.90 / 96.71 ±1.58 / 98.41 ms │     no change │
│ QQuery 39 │        142.03 / 145.02 ±2.20 / 148.63 ms │        141.04 / 142.54 ±0.97 / 144.10 ms │     no change │
│ QQuery 40 │        120.64 / 124.59 ±3.69 / 130.50 ms │        117.32 / 124.61 ±6.04 / 135.37 ms │     no change │
│ QQuery 41 │           18.31 / 19.45 ±1.00 / 20.98 ms │           18.55 / 19.73 ±1.01 / 21.36 ms │     no change │
│ QQuery 42 │        113.96 / 114.60 ±0.48 / 115.22 ms │        112.38 / 113.50 ±1.02 / 115.33 ms │     no change │
│ QQuery 43 │           89.48 / 90.96 ±1.02 / 92.41 ms │           89.48 / 90.15 ±0.59 / 90.96 ms │     no change │
│ QQuery 44 │           18.01 / 18.38 ±0.30 / 18.85 ms │           17.19 / 17.43 ±0.17 / 17.66 ms │ +1.05x faster │
│ QQuery 45 │           57.29 / 59.01 ±1.24 / 60.31 ms │           55.94 / 57.53 ±0.85 / 58.49 ms │     no change │
│ QQuery 46 │        253.82 / 257.48 ±2.18 / 259.82 ms │        240.47 / 243.40 ±3.10 / 248.46 ms │ +1.06x faster │
│ QQuery 47 │        839.16 / 848.66 ±7.17 / 860.68 ms │        764.50 / 769.83 ±4.45 / 777.69 ms │ +1.10x faster │
│ QQuery 48 │        296.63 / 303.86 ±4.14 / 308.97 ms │        291.68 / 299.69 ±4.61 / 305.02 ms │     no change │
│ QQuery 49 │        267.79 / 270.39 ±1.91 / 273.08 ms │        267.70 / 269.32 ±1.61 / 272.01 ms │     no change │
│ QQuery 50 │        255.02 / 259.98 ±5.11 / 267.10 ms │        240.55 / 246.27 ±3.08 / 249.84 ms │ +1.06x faster │
│ QQuery 51 │        193.18 / 196.58 ±4.23 / 204.73 ms │        195.53 / 196.33 ±0.65 / 197.23 ms │     no change │
│ QQuery 52 │        114.60 / 115.53 ±0.71 / 116.41 ms │        115.09 / 116.50 ±0.87 / 117.67 ms │     no change │
│ QQuery 53 │        109.90 / 111.23 ±0.87 / 112.62 ms │        109.69 / 111.70 ±2.28 / 115.31 ms │     no change │
│ QQuery 54 │        155.12 / 158.63 ±2.33 / 161.94 ms │        157.64 / 159.06 ±1.19 / 161.00 ms │     no change │
│ QQuery 55 │        112.84 / 114.24 ±1.25 / 116.36 ms │        111.55 / 112.32 ±0.70 / 113.38 ms │     no change │
│ QQuery 56 │        154.48 / 155.68 ±0.71 / 156.47 ms │        153.30 / 154.52 ±0.81 / 155.55 ms │     no change │
│ QQuery 57 │        190.34 / 191.78 ±1.38 / 194.19 ms │        188.11 / 192.21 ±2.23 / 194.88 ms │     no change │
│ QQuery 58 │        309.49 / 319.22 ±6.62 / 326.68 ms │        290.80 / 294.01 ±2.52 / 297.68 ms │ +1.09x faster │
│ QQuery 59 │        210.14 / 212.49 ±1.50 / 214.35 ms │        210.91 / 212.80 ±1.87 / 215.82 ms │     no change │
│ QQuery 60 │        154.67 / 156.59 ±1.09 / 157.42 ms │        155.05 / 156.30 ±0.75 / 157.28 ms │     no change │
│ QQuery 61 │        182.04 / 183.79 ±1.44 / 186.11 ms │        181.30 / 182.67 ±1.00 / 183.99 ms │     no change │
│ QQuery 62 │      931.31 / 968.12 ±32.02 / 1010.75 ms │       911.70 / 945.62 ±29.24 / 993.88 ms │     no change │
│ QQuery 63 │        112.20 / 113.63 ±1.14 / 115.34 ms │        111.15 / 112.41 ±0.88 / 113.59 ms │     no change │
│ QQuery 64 │        734.99 / 737.45 ±3.16 / 743.07 ms │        726.34 / 733.99 ±4.06 / 737.58 ms │     no change │
│ QQuery 65 │        269.73 / 274.35 ±2.66 / 277.11 ms │        265.87 / 268.91 ±1.79 / 271.04 ms │     no change │
│ QQuery 66 │        250.86 / 261.51 ±7.05 / 272.65 ms │       240.58 / 252.79 ±10.15 / 269.49 ms │     no change │
│ QQuery 67 │        345.70 / 354.01 ±8.26 / 368.60 ms │        342.77 / 354.91 ±8.16 / 366.59 ms │     no change │
│ QQuery 68 │        295.14 / 297.54 ±3.06 / 303.31 ms │        292.56 / 297.54 ±5.26 / 306.47 ms │     no change │
│ QQuery 69 │        113.93 / 114.30 ±0.35 / 114.92 ms │        113.52 / 115.41 ±1.49 / 117.33 ms │     no change │
│ QQuery 70 │       333.74 / 359.23 ±14.63 / 374.14 ms │        355.56 / 362.60 ±7.06 / 372.53 ms │     no change │
│ QQuery 71 │        142.50 / 144.43 ±1.39 / 146.78 ms │        142.68 / 145.09 ±1.65 / 147.49 ms │     no change │
│ QQuery 72 │        735.67 / 746.76 ±9.06 / 761.89 ms │       721.93 / 745.47 ±13.28 / 758.18 ms │     no change │
│ QQuery 73 │        107.49 / 109.69 ±1.53 / 112.04 ms │        109.10 / 110.69 ±1.25 / 112.37 ms │     no change │
│ QQuery 74 │        642.37 / 651.21 ±8.84 / 666.63 ms │       646.06 / 660.21 ±14.69 / 688.64 ms │     no change │
│ QQuery 75 │        295.73 / 297.79 ±1.65 / 300.39 ms │        298.45 / 300.69 ±1.24 / 301.95 ms │     no change │
│ QQuery 76 │        139.70 / 140.99 ±1.25 / 143.23 ms │        142.07 / 143.61 ±0.93 / 144.69 ms │     no change │
│ QQuery 77 │        203.63 / 206.24 ±1.97 / 208.19 ms │        205.66 / 206.95 ±1.05 / 208.30 ms │     no change │
│ QQuery 78 │        367.32 / 372.85 ±3.75 / 377.10 ms │        377.80 / 380.70 ±1.61 / 382.23 ms │     no change │
│ QQuery 79 │        245.20 / 248.30 ±2.24 / 251.99 ms │        254.26 / 258.67 ±2.28 / 260.44 ms │     no change │
│ QQuery 80 │        346.85 / 348.29 ±1.31 / 350.63 ms │        347.95 / 351.87 ±3.23 / 355.27 ms │     no change │
│ QQuery 81 │           31.27 / 32.86 ±1.19 / 34.23 ms │           34.25 / 35.10 ±0.72 / 36.15 ms │  1.07x slower │
│ QQuery 82 │        210.01 / 212.23 ±2.18 / 215.99 ms │        210.04 / 212.51 ±2.42 / 217.15 ms │     no change │
│ QQuery 83 │           46.79 / 47.44 ±0.46 / 48.11 ms │           48.52 / 50.31 ±1.26 / 51.82 ms │  1.06x slower │
│ QQuery 84 │           52.96 / 53.50 ±0.44 / 54.09 ms │           53.76 / 55.25 ±1.18 / 56.55 ms │     no change │
│ QQuery 85 │        154.68 / 155.45 ±0.71 / 156.44 ms │        153.16 / 157.22 ±2.35 / 159.27 ms │     no change │
│ QQuery 86 │           41.53 / 42.84 ±0.82 / 43.59 ms │           42.60 / 44.03 ±0.76 / 44.72 ms │     no change │
│ QQuery 87 │           95.20 / 96.88 ±1.34 / 98.48 ms │         97.95 / 101.59 ±2.93 / 105.68 ms │     no change │
│ QQuery 88 │        115.45 / 116.29 ±0.68 / 117.21 ms │        115.34 / 116.56 ±0.89 / 117.86 ms │     no change │
│ QQuery 89 │        125.70 / 128.28 ±1.82 / 131.13 ms │        129.36 / 131.42 ±1.46 / 133.49 ms │     no change │
│ QQuery 90 │           29.65 / 30.14 ±0.38 / 30.47 ms │           28.91 / 29.69 ±0.64 / 30.61 ms │     no change │
│ QQuery 91 │           67.64 / 69.71 ±1.05 / 70.37 ms │           68.57 / 69.65 ±0.82 / 71.04 ms │     no change │
│ QQuery 92 │           62.06 / 64.00 ±1.05 / 65.24 ms │           64.09 / 65.33 ±1.27 / 67.65 ms │     no change │
│ QQuery 93 │        204.03 / 205.92 ±1.81 / 208.22 ms │        205.17 / 206.94 ±1.21 / 208.47 ms │     no change │
│ QQuery 94 │           67.70 / 68.39 ±0.86 / 70.07 ms │           69.02 / 69.53 ±0.49 / 70.22 ms │     no change │
│ QQuery 95 │        144.89 / 146.25 ±1.54 / 149.07 ms │        145.29 / 147.88 ±1.72 / 150.67 ms │     no change │
│ QQuery 96 │           77.96 / 80.24 ±1.20 / 81.09 ms │           78.16 / 80.32 ±1.48 / 81.95 ms │     no change │
│ QQuery 97 │        138.05 / 140.41 ±1.22 / 141.38 ms │        138.77 / 141.83 ±1.64 / 143.58 ms │     no change │
│ QQuery 98 │        158.65 / 161.97 ±2.44 / 165.30 ms │        158.69 / 164.27 ±3.84 / 168.19 ms │     no change │
│ QQuery 99 │ 10867.89 / 10883.65 ±15.48 / 10911.30 ms │ 10829.37 / 10860.93 ±24.60 / 10893.43 ms │     no change │
└───────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 35403.51ms │
│ Total Time (feat_left-single-join)   │ 74428.65ms │
│ Average Time (HEAD)                  │   357.61ms │
│ Average Time (feat_left-single-join) │   751.80ms │
│ Queries Faster                       │          7 │
│ Queries Slower                       │          5 │
│ Queries with No Change               │         87 │
│ Queries with Failure                 │          0 │
└──────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 177.4s
Peak memory 5.5 GiB
Avg memory 4.5 GiB
CPU user 282.3s
CPU sys 20.8s
Disk read 0 B
Disk write 637.0 MiB

tpcds — branch

Metric Value
Wall time 372.5s
Peak memory 5.7 GiB
Avg memory 5.1 GiB
CPU user 481.0s
CPU sys 21.2s
Disk read 0 B
Disk write 792.0 KiB

…gression

The eliminate_outer_join optimization is safe for LeftSingle because:
- The WHERE clause already filters out NULL (unmatched) rows
- The GROUP BY added during scalar subquery decorrelation guarantees
  at-most-one row per group, so the single-match constraint holds
- Without this, LeftSingle is treated like Left for optimization,
  preventing filter pushdown and causing massive plan regressions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Dandandan
Copy link
Contributor Author

run benchmarks

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4076315890-371-h4fg2 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (5dddda7) to fa6706a (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4076315890-372-qslzk 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (5dddda7) to fa6706a (merge-base) diff using: tpcds
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark running (GKE) | trigger
Linux bench-c4076315890-373-nr6v2 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux
Comparing feat/left-single-join (5dddda7) to fa6706a (merge-base) diff using: tpch
Results will be posted here when complete

@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃          feat_left-single-join ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 1  │ 47.00 / 47.71 ±0.69 / 48.76 ms │ 46.71 / 47.67 ±0.75 / 48.87 ms │ no change │
│ QQuery 2  │ 24.66 / 24.96 ±0.28 / 25.42 ms │ 25.36 / 25.84 ±0.53 / 26.82 ms │ no change │
│ QQuery 3  │ 33.97 / 34.30 ±0.27 / 34.66 ms │ 33.68 / 33.89 ±0.22 / 34.28 ms │ no change │
│ QQuery 4  │ 21.71 / 23.16 ±0.95 / 24.70 ms │ 21.99 / 23.02 ±0.78 / 23.83 ms │ no change │
│ QQuery 5  │ 51.65 / 53.50 ±1.33 / 54.62 ms │ 50.53 / 51.74 ±1.21 / 53.95 ms │ no change │
│ QQuery 6  │ 17.57 / 17.95 ±0.24 / 18.23 ms │ 17.78 / 18.12 ±0.38 / 18.83 ms │ no change │
│ QQuery 7  │ 57.63 / 58.45 ±0.93 / 60.08 ms │ 56.41 / 58.85 ±1.31 / 60.34 ms │ no change │
│ QQuery 8  │ 51.16 / 51.64 ±0.52 / 52.63 ms │ 51.77 / 52.23 ±0.40 / 52.75 ms │ no change │
│ QQuery 9  │ 57.87 / 58.18 ±0.24 / 58.43 ms │ 57.41 / 59.12 ±1.19 / 60.89 ms │ no change │
│ QQuery 10 │ 73.36 / 74.64 ±0.75 / 75.67 ms │ 73.72 / 74.21 ±0.36 / 74.82 ms │ no change │
│ QQuery 11 │ 16.72 / 17.28 ±0.52 / 17.96 ms │ 16.97 / 17.04 ±0.04 / 17.08 ms │ no change │
│ QQuery 12 │ 29.12 / 29.83 ±1.07 / 31.97 ms │ 28.66 / 29.17 ±0.29 / 29.47 ms │ no change │
│ QQuery 13 │ 40.05 / 40.93 ±0.76 / 41.82 ms │ 39.43 / 40.49 ±0.86 / 41.46 ms │ no change │
│ QQuery 14 │ 29.58 / 29.88 ±0.33 / 30.52 ms │ 29.65 / 29.98 ±0.23 / 30.32 ms │ no change │
│ QQuery 15 │ 36.45 / 36.90 ±0.28 / 37.22 ms │ 36.16 / 36.72 ±0.44 / 37.23 ms │ no change │
│ QQuery 16 │ 18.03 / 18.24 ±0.14 / 18.39 ms │ 17.68 / 18.14 ±0.31 / 18.64 ms │ no change │
│ QQuery 17 │ 74.39 / 75.91 ±1.17 / 77.68 ms │ 75.81 / 76.75 ±1.08 / 78.75 ms │ no change │
│ QQuery 18 │ 82.03 / 83.32 ±0.91 / 84.80 ms │ 80.85 / 83.17 ±1.64 / 85.59 ms │ no change │
│ QQuery 19 │ 38.79 / 39.19 ±0.32 / 39.60 ms │ 38.69 / 39.41 ±0.70 / 40.75 ms │ no change │
│ QQuery 20 │ 42.90 / 44.24 ±0.96 / 45.67 ms │ 42.84 / 43.44 ±0.39 / 43.91 ms │ no change │
│ QQuery 21 │ 68.79 / 70.55 ±1.37 / 71.74 ms │ 67.91 / 70.70 ±1.54 / 72.17 ms │ no change │
│ QQuery 22 │ 19.89 / 20.15 ±0.23 / 20.42 ms │ 20.21 / 20.86 ±0.52 / 21.77 ms │ no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                    ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 950.91ms │
│ Total Time (feat_left-single-join)   │ 950.56ms │
│ Average Time (HEAD)                  │  43.22ms │
│ Average Time (feat_left-single-join) │  43.21ms │
│ Queries Faster                       │        0 │
│ Queries Slower                       │        0 │
│ Queries with No Change               │       22 │
│ Queries with Failure                 │        0 │
└──────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 4.0 GiB
Avg memory 3.5 GiB
CPU user 34.3s
CPU sys 3.0s
Disk read 0 B
Disk write 136.0 KiB

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 4.0 GiB
Avg memory 3.5 GiB
CPU user 34.1s
CPU sys 3.1s
Disk read 0 B
Disk write 56.0 KiB

@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                 feat_left-single-join ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.60 / 4.78 ±6.28 / 17.33 ms │          1.62 / 4.86 ±6.33 / 17.53 ms │     no change │
│ QQuery 1  │        14.73 / 14.94 ±0.11 / 15.07 ms │        15.03 / 15.50 ±0.27 / 15.77 ms │     no change │
│ QQuery 2  │        56.27 / 56.48 ±0.11 / 56.56 ms │        58.93 / 59.31 ±0.31 / 59.86 ms │  1.05x slower │
│ QQuery 3  │        48.84 / 51.50 ±1.43 / 52.83 ms │        48.59 / 55.14 ±3.89 / 58.94 ms │  1.07x slower │
│ QQuery 4  │     321.33 / 335.29 ±9.87 / 346.77 ms │    317.80 / 346.12 ±19.12 / 374.20 ms │     no change │
│ QQuery 5  │     352.40 / 358.29 ±4.29 / 363.44 ms │     355.79 / 361.09 ±3.31 / 365.65 ms │     no change │
│ QQuery 6  │           5.02 / 6.00 ±0.88 / 7.65 ms │           5.46 / 6.62 ±0.80 / 7.44 ms │  1.10x slower │
│ QQuery 7  │        16.98 / 17.48 ±0.37 / 17.91 ms │        17.40 / 18.47 ±1.02 / 20.27 ms │  1.06x slower │
│ QQuery 8  │     448.32 / 452.19 ±3.89 / 459.44 ms │     451.30 / 461.79 ±7.72 / 470.95 ms │     no change │
│ QQuery 9  │     677.91 / 683.22 ±4.57 / 691.36 ms │    726.31 / 747.25 ±14.41 / 765.17 ms │  1.09x slower │
│ QQuery 10 │       91.35 / 94.02 ±3.92 / 101.78 ms │       93.71 / 96.63 ±3.68 / 103.57 ms │     no change │
│ QQuery 11 │     103.97 / 105.20 ±0.74 / 106.21 ms │     107.72 / 108.61 ±0.64 / 109.52 ms │     no change │
│ QQuery 12 │     344.47 / 350.84 ±4.53 / 355.92 ms │     357.75 / 368.86 ±9.04 / 379.51 ms │  1.05x slower │
│ QQuery 13 │    467.29 / 481.34 ±16.61 / 513.66 ms │     512.21 / 522.46 ±5.89 / 528.42 ms │  1.09x slower │
│ QQuery 14 │     359.52 / 364.91 ±4.91 / 371.87 ms │    369.82 / 383.14 ±10.48 / 401.90 ms │     no change │
│ QQuery 15 │    370.41 / 398.68 ±23.33 / 428.44 ms │    381.23 / 404.96 ±27.58 / 457.25 ms │     no change │
│ QQuery 16 │    755.02 / 773.63 ±16.58 / 804.74 ms │    774.57 / 790.60 ±20.23 / 829.35 ms │     no change │
│ QQuery 17 │     743.26 / 745.38 ±1.55 / 747.22 ms │    762.99 / 775.52 ±10.97 / 791.46 ms │     no change │
│ QQuery 18 │ 1456.23 / 1508.46 ±37.74 / 1561.44 ms │  1545.65 / 1551.26 ±3.19 / 1555.15 ms │     no change │
│ QQuery 19 │        35.35 / 37.40 ±1.67 / 40.31 ms │       35.76 / 48.68 ±22.42 / 93.48 ms │  1.30x slower │
│ QQuery 20 │    704.45 / 734.12 ±25.66 / 765.78 ms │    707.44 / 727.07 ±21.25 / 768.21 ms │     no change │
│ QQuery 21 │     753.46 / 757.44 ±3.74 / 764.51 ms │     756.20 / 767.17 ±8.62 / 781.15 ms │     no change │
│ QQuery 22 │  1126.84 / 1132.65 ±6.31 / 1144.87 ms │  1127.05 / 1132.52 ±5.05 / 1142.06 ms │     no change │
│ QQuery 23 │ 3137.74 / 3182.68 ±32.18 / 3228.20 ms │ 3190.96 / 3254.41 ±58.77 / 3362.27 ms │     no change │
│ QQuery 24 │     100.22 / 104.78 ±4.13 / 111.13 ms │     102.37 / 106.26 ±3.28 / 111.34 ms │     no change │
│ QQuery 25 │     136.78 / 139.54 ±1.48 / 141.04 ms │     143.61 / 146.32 ±2.39 / 150.79 ms │     no change │
│ QQuery 26 │      99.65 / 102.86 ±1.72 / 104.40 ms │     106.37 / 107.33 ±1.18 / 109.61 ms │     no change │
│ QQuery 27 │     847.19 / 850.45 ±2.22 / 853.19 ms │     846.63 / 853.32 ±7.89 / 868.52 ms │     no change │
│ QQuery 28 │ 7712.72 / 7776.71 ±37.43 / 7824.49 ms │ 7737.11 / 7784.12 ±34.63 / 7820.90 ms │     no change │
│ QQuery 29 │        57.08 / 62.15 ±4.02 / 68.41 ms │        58.46 / 61.83 ±2.63 / 65.84 ms │     no change │
│ QQuery 30 │     370.96 / 380.11 ±5.95 / 385.70 ms │    359.13 / 371.70 ±12.98 / 394.37 ms │     no change │
│ QQuery 31 │    363.99 / 378.58 ±13.59 / 403.94 ms │     371.61 / 378.95 ±8.00 / 394.22 ms │     no change │
│ QQuery 32 │ 1180.76 / 1314.48 ±92.61 / 1431.86 ms │ 1104.64 / 1122.00 ±17.34 / 1154.06 ms │ +1.17x faster │
│ QQuery 33 │ 1495.02 / 1556.44 ±52.29 / 1644.77 ms │  1532.32 / 1547.49 ±8.96 / 1559.00 ms │     no change │
│ QQuery 34 │ 1492.49 / 1514.33 ±22.35 / 1552.24 ms │ 1512.31 / 1528.90 ±10.81 / 1546.19 ms │     no change │
│ QQuery 35 │     402.74 / 413.95 ±9.68 / 429.31 ms │     418.69 / 423.67 ±5.36 / 433.97 ms │     no change │
│ QQuery 36 │     122.95 / 125.99 ±1.95 / 128.65 ms │     121.85 / 125.16 ±2.27 / 128.44 ms │     no change │
│ QQuery 37 │        50.34 / 51.89 ±1.31 / 53.63 ms │        50.44 / 52.33 ±2.10 / 56.26 ms │     no change │
│ QQuery 38 │        75.71 / 77.68 ±1.89 / 81.13 ms │        75.57 / 77.74 ±2.29 / 80.87 ms │     no change │
│ QQuery 39 │     224.96 / 231.98 ±6.22 / 239.67 ms │     230.97 / 236.79 ±4.36 / 241.86 ms │     no change │
│ QQuery 40 │        24.99 / 27.10 ±1.90 / 30.63 ms │        22.34 / 26.67 ±3.17 / 31.72 ms │     no change │
│ QQuery 41 │        22.33 / 22.75 ±0.23 / 23.03 ms │        21.38 / 22.79 ±1.24 / 25.03 ms │     no change │
│ QQuery 42 │        21.08 / 21.63 ±0.46 / 22.48 ms │        21.28 / 21.83 ±0.37 / 22.20 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 27800.33ms │
│ Total Time (feat_left-single-join)   │ 28003.21ms │
│ Average Time (HEAD)                  │   646.52ms │
│ Average Time (feat_left-single-join) │   651.24ms │
│ Queries Faster                       │          1 │
│ Queries Slower                       │          8 │
│ Queries with No Change               │         34 │
│ Queries with Failure                 │          0 │
└──────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 140.1s
Peak memory 39.7 GiB
Avg memory 29.1 GiB
CPU user 1304.5s
CPU sys 99.3s
Disk read 0 B
Disk write 4.4 GiB

clickbench_partitioned — branch

Metric Value
Wall time 141.1s
Peak memory 41.4 GiB
Avg memory 30.3 GiB
CPU user 1322.9s
CPU sys 93.2s
Disk read 0 B
Disk write 116.0 KiB

@adriangbot
Copy link

🤖 Benchmark completed (GKE) | trigger

Details

Comparing HEAD and feat_left-single-join
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                     HEAD ┃                    feat_left-single-join ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           51.62 / 53.34 ±1.07 / 54.84 ms │           52.44 / 53.93 ±1.00 / 55.54 ms │     no change │
│ QQuery 2  │        157.82 / 158.95 ±0.74 / 159.94 ms │        157.93 / 159.65 ±1.34 / 161.97 ms │     no change │
│ QQuery 3  │        121.17 / 122.20 ±0.62 / 123.09 ms │        121.83 / 122.63 ±0.60 / 123.30 ms │     no change │
│ QQuery 4  │    1499.01 / 1540.29 ±22.79 / 1564.46 ms │    1526.35 / 1541.54 ±11.50 / 1558.34 ms │     no change │
│ QQuery 5  │        190.61 / 191.28 ±0.44 / 191.80 ms │        191.30 / 194.39 ±2.22 / 197.73 ms │     no change │
│ QQuery 6  │    1068.41 / 1098.59 ±22.67 / 1130.77 ms │    1053.72 / 1072.11 ±14.78 / 1092.51 ms │     no change │
│ QQuery 7  │        368.14 / 375.14 ±4.55 / 381.52 ms │        370.37 / 375.27 ±4.80 / 384.39 ms │     no change │
│ QQuery 8  │        125.34 / 127.02 ±1.19 / 128.81 ms │        127.29 / 128.94 ±1.27 / 130.68 ms │     no change │
│ QQuery 9  │        120.65 / 121.79 ±1.15 / 123.47 ms │       119.31 / 127.16 ±10.09 / 147.13 ms │     no change │
│ QQuery 10 │        115.32 / 118.19 ±1.65 / 120.15 ms │        119.88 / 121.02 ±0.70 / 121.95 ms │     no change │
│ QQuery 11 │     1100.62 / 1109.83 ±5.95 / 1118.75 ms │     1109.53 / 1118.06 ±6.31 / 1128.31 ms │     no change │
│ QQuery 12 │           49.67 / 51.52 ±1.48 / 53.56 ms │           49.63 / 51.36 ±1.43 / 53.71 ms │     no change │
│ QQuery 13 │        423.82 / 425.93 ±1.24 / 427.37 ms │        428.84 / 432.02 ±2.49 / 435.19 ms │     no change │
│ QQuery 14 │    1123.76 / 1142.89 ±11.33 / 1157.09 ms │     1137.14 / 1153.60 ±9.36 / 1165.48 ms │     no change │
│ QQuery 15 │           19.83 / 21.04 ±0.90 / 22.06 ms │           20.19 / 21.51 ±1.28 / 23.67 ms │     no change │
│ QQuery 16 │           47.39 / 47.94 ±0.51 / 48.79 ms │           48.06 / 49.12 ±0.67 / 50.04 ms │     no change │
│ QQuery 17 │        261.07 / 262.69 ±1.09 / 264.43 ms │        267.20 / 268.88 ±1.51 / 270.60 ms │     no change │
│ QQuery 18 │        138.22 / 139.61 ±1.11 / 140.75 ms │        140.11 / 142.18 ±1.66 / 145.02 ms │     no change │
│ QQuery 19 │        170.30 / 172.10 ±1.87 / 175.73 ms │        174.27 / 177.16 ±2.43 / 180.41 ms │     no change │
│ QQuery 20 │           16.88 / 17.32 ±0.36 / 17.91 ms │           17.27 / 18.02 ±0.40 / 18.36 ms │     no change │
│ QQuery 21 │           25.32 / 25.71 ±0.39 / 26.40 ms │           25.75 / 26.99 ±0.86 / 28.36 ms │     no change │
│ QQuery 22 │        553.75 / 560.02 ±4.29 / 566.21 ms │        556.87 / 563.93 ±5.37 / 571.06 ms │     no change │
│ QQuery 23 │     1027.12 / 1037.06 ±7.15 / 1046.92 ms │       759.41 / 772.14 ±10.11 / 785.12 ms │ +1.34x faster │
│ QQuery 24 │        459.55 / 461.65 ±1.58 / 464.39 ms │        463.69 / 467.07 ±4.23 / 475.24 ms │     no change │
│ QQuery 25 │        378.52 / 384.96 ±3.36 / 387.82 ms │        386.49 / 388.88 ±1.81 / 391.77 ms │     no change │
│ QQuery 26 │           87.64 / 90.53 ±1.79 / 92.64 ms │           90.29 / 93.11 ±2.18 / 95.81 ms │     no change │
│ QQuery 27 │        365.30 / 367.77 ±2.40 / 370.72 ms │        364.63 / 371.48 ±3.58 / 374.52 ms │     no change │
│ QQuery 28 │        158.95 / 159.77 ±0.64 / 160.86 ms │        161.52 / 164.62 ±1.70 / 166.69 ms │     no change │
│ QQuery 29 │        321.75 / 325.71 ±2.76 / 329.55 ms │        328.40 / 333.27 ±2.99 / 337.10 ms │     no change │
│ QQuery 30 │           50.79 / 52.32 ±1.61 / 55.22 ms │           51.36 / 53.40 ±1.73 / 56.27 ms │     no change │
│ QQuery 31 │        190.03 / 191.77 ±1.58 / 194.55 ms │        190.79 / 194.87 ±2.40 / 198.27 ms │     no change │
│ QQuery 32 │           63.78 / 64.61 ±0.65 / 65.39 ms │           65.16 / 66.42 ±1.05 / 68.25 ms │     no change │
│ QQuery 33 │        156.71 / 157.89 ±0.76 / 158.82 ms │        160.47 / 163.15 ±2.09 / 166.70 ms │     no change │
│ QQuery 34 │        115.78 / 117.14 ±0.99 / 118.51 ms │        117.28 / 118.43 ±1.26 / 120.62 ms │     no change │
│ QQuery 35 │        120.08 / 122.75 ±1.43 / 124.39 ms │        121.23 / 124.71 ±2.16 / 126.88 ms │     no change │
│ QQuery 36 │        230.96 / 235.24 ±3.47 / 240.57 ms │        228.44 / 236.65 ±5.75 / 242.34 ms │     no change │
│ QQuery 37 │        187.23 / 192.78 ±3.32 / 196.18 ms │        192.10 / 193.83 ±1.48 / 196.10 ms │     no change │
│ QQuery 38 │         96.74 / 100.42 ±3.46 / 105.92 ms │         98.68 / 102.08 ±2.41 / 106.11 ms │     no change │
│ QQuery 39 │        145.59 / 151.80 ±4.67 / 158.16 ms │        153.98 / 157.78 ±2.65 / 160.08 ms │     no change │
│ QQuery 40 │        124.71 / 130.98 ±6.45 / 142.20 ms │        124.33 / 131.05 ±6.80 / 143.71 ms │     no change │
│ QQuery 41 │           18.65 / 20.04 ±0.79 / 20.93 ms │           19.38 / 20.39 ±1.21 / 22.63 ms │     no change │
│ QQuery 42 │        113.33 / 115.75 ±1.74 / 118.35 ms │        114.22 / 116.15 ±1.21 / 117.74 ms │     no change │
│ QQuery 43 │           89.26 / 90.62 ±0.91 / 91.65 ms │           90.44 / 91.73 ±1.24 / 93.80 ms │     no change │
│ QQuery 44 │           18.08 / 18.95 ±0.82 / 20.19 ms │           18.99 / 19.67 ±0.44 / 20.20 ms │     no change │
│ QQuery 45 │           57.98 / 59.35 ±1.22 / 61.13 ms │           60.09 / 61.13 ±0.83 / 62.18 ms │     no change │
│ QQuery 46 │        255.99 / 258.44 ±2.48 / 263.13 ms │        260.77 / 264.15 ±1.90 / 266.47 ms │     no change │
│ QQuery 47 │        842.80 / 846.73 ±2.71 / 851.14 ms │        861.65 / 869.99 ±6.15 / 876.22 ms │     no change │
│ QQuery 48 │        298.53 / 303.71 ±5.01 / 312.76 ms │        303.36 / 309.89 ±4.03 / 315.80 ms │     no change │
│ QQuery 49 │        272.22 / 273.71 ±2.27 / 278.23 ms │        274.87 / 279.62 ±3.68 / 284.17 ms │     no change │
│ QQuery 50 │        253.88 / 256.75 ±2.89 / 262.03 ms │        253.61 / 265.06 ±6.45 / 272.54 ms │     no change │
│ QQuery 51 │        196.63 / 198.55 ±1.85 / 201.07 ms │        199.21 / 204.45 ±3.20 / 208.40 ms │     no change │
│ QQuery 52 │        113.97 / 114.69 ±0.83 / 116.12 ms │        114.56 / 116.69 ±1.64 / 118.85 ms │     no change │
│ QQuery 53 │        111.44 / 112.62 ±0.83 / 113.99 ms │        110.98 / 113.57 ±2.21 / 116.22 ms │     no change │
│ QQuery 54 │        159.99 / 162.08 ±1.59 / 164.45 ms │        163.34 / 164.19 ±0.78 / 165.13 ms │     no change │
│ QQuery 55 │        112.59 / 114.54 ±1.17 / 115.84 ms │        113.66 / 115.53 ±1.43 / 117.21 ms │     no change │
│ QQuery 56 │        158.00 / 159.95 ±1.23 / 161.77 ms │        157.77 / 158.86 ±1.33 / 161.43 ms │     no change │
│ QQuery 57 │        194.32 / 196.92 ±2.64 / 200.58 ms │        199.39 / 202.68 ±3.17 / 208.42 ms │     no change │
│ QQuery 58 │       310.62 / 322.07 ±10.09 / 339.99 ms │       316.53 / 334.61 ±11.93 / 350.27 ms │     no change │
│ QQuery 59 │        217.03 / 220.28 ±1.84 / 221.88 ms │        224.70 / 225.98 ±1.41 / 228.48 ms │     no change │
│ QQuery 60 │        158.64 / 160.37 ±2.00 / 164.04 ms │        162.95 / 164.07 ±0.90 / 165.37 ms │     no change │
│ QQuery 61 │        186.05 / 188.91 ±1.83 / 191.38 ms │        192.04 / 193.50 ±1.54 / 196.15 ms │     no change │
│ QQuery 62 │      949.58 / 970.36 ±20.19 / 1005.23 ms │     957.38 / 1022.72 ±60.16 / 1114.70 ms │  1.05x slower │
│ QQuery 63 │        114.38 / 119.49 ±8.00 / 135.45 ms │        113.57 / 115.44 ±2.23 / 119.80 ms │     no change │
│ QQuery 64 │        757.97 / 768.78 ±7.08 / 777.84 ms │        758.62 / 771.21 ±6.81 / 777.73 ms │     no change │
│ QQuery 65 │        290.57 / 293.75 ±2.47 / 296.52 ms │        284.71 / 293.64 ±5.91 / 302.36 ms │     no change │
│ QQuery 66 │       258.24 / 272.79 ±15.28 / 299.64 ms │       257.87 / 275.52 ±13.45 / 294.64 ms │     no change │
│ QQuery 67 │        363.85 / 369.29 ±5.50 / 378.84 ms │        363.49 / 371.49 ±4.34 / 375.41 ms │     no change │
│ QQuery 68 │        301.52 / 309.14 ±4.59 / 314.93 ms │        308.37 / 312.59 ±3.45 / 318.57 ms │     no change │
│ QQuery 69 │        117.69 / 119.35 ±1.18 / 120.95 ms │        118.12 / 119.85 ±2.95 / 125.72 ms │     no change │
│ QQuery 70 │       368.62 / 378.15 ±11.44 / 400.30 ms │       368.85 / 379.56 ±10.51 / 394.19 ms │     no change │
│ QQuery 71 │        146.60 / 148.65 ±2.23 / 152.88 ms │        146.46 / 147.62 ±1.76 / 151.12 ms │     no change │
│ QQuery 72 │        775.40 / 783.10 ±6.49 / 790.16 ms │       755.02 / 781.88 ±18.88 / 807.61 ms │     no change │
│ QQuery 73 │        112.97 / 114.23 ±0.87 / 115.49 ms │        113.10 / 114.88 ±1.31 / 116.78 ms │     no change │
│ QQuery 74 │        698.64 / 700.71 ±1.92 / 704.08 ms │        689.74 / 697.32 ±5.86 / 705.98 ms │     no change │
│ QQuery 75 │        297.80 / 304.65 ±4.76 / 311.98 ms │        301.48 / 306.42 ±2.55 / 308.80 ms │     no change │
│ QQuery 76 │        143.67 / 144.33 ±0.70 / 145.66 ms │        145.08 / 146.47 ±2.06 / 150.55 ms │     no change │
│ QQuery 77 │        209.06 / 210.98 ±1.23 / 212.76 ms │        212.18 / 215.04 ±2.20 / 218.60 ms │     no change │
│ QQuery 78 │        380.53 / 386.73 ±3.68 / 391.20 ms │        389.80 / 392.83 ±3.25 / 398.77 ms │     no change │
│ QQuery 79 │        260.68 / 265.83 ±4.22 / 272.35 ms │        261.74 / 264.70 ±2.30 / 267.24 ms │     no change │
│ QQuery 80 │        350.85 / 355.01 ±3.66 / 360.93 ms │        353.97 / 358.10 ±2.38 / 360.57 ms │     no change │
│ QQuery 81 │           33.55 / 34.28 ±0.63 / 35.42 ms │           34.34 / 36.57 ±1.88 / 39.31 ms │  1.07x slower │
│ QQuery 82 │        213.29 / 214.35 ±1.21 / 216.63 ms │        212.77 / 215.75 ±2.73 / 219.81 ms │     no change │
│ QQuery 83 │           49.86 / 50.40 ±0.80 / 52.00 ms │           50.91 / 52.76 ±1.13 / 53.90 ms │     no change │
│ QQuery 84 │           53.00 / 54.67 ±1.06 / 56.15 ms │           54.89 / 55.91 ±1.00 / 57.73 ms │     no change │
│ QQuery 85 │        156.59 / 159.73 ±1.91 / 162.60 ms │        160.15 / 161.70 ±1.02 / 163.32 ms │     no change │
│ QQuery 86 │           44.16 / 45.08 ±0.74 / 46.21 ms │           43.98 / 44.88 ±0.75 / 45.93 ms │     no change │
│ QQuery 87 │         95.72 / 101.04 ±4.64 / 109.70 ms │        101.42 / 104.29 ±2.88 / 108.17 ms │     no change │
│ QQuery 88 │        118.82 / 120.18 ±1.41 / 122.68 ms │        121.11 / 122.63 ±1.25 / 124.47 ms │     no change │
│ QQuery 89 │        129.67 / 131.53 ±1.21 / 133.09 ms │        130.00 / 131.50 ±1.05 / 133.25 ms │     no change │
│ QQuery 90 │           30.46 / 30.67 ±0.28 / 31.19 ms │           31.09 / 31.91 ±0.62 / 32.78 ms │     no change │
│ QQuery 91 │           68.29 / 70.03 ±1.08 / 71.57 ms │           69.20 / 70.16 ±1.02 / 71.99 ms │     no change │
│ QQuery 92 │           64.22 / 65.70 ±1.34 / 67.47 ms │           65.62 / 65.93 ±0.24 / 66.27 ms │     no change │
│ QQuery 93 │        206.56 / 208.64 ±1.14 / 210.04 ms │        207.22 / 210.65 ±2.48 / 214.06 ms │     no change │
│ QQuery 94 │           68.09 / 69.40 ±0.91 / 70.72 ms │           69.75 / 70.75 ±0.93 / 72.36 ms │     no change │
│ QQuery 95 │        148.23 / 150.82 ±2.27 / 154.91 ms │        148.84 / 152.32 ±2.13 / 155.16 ms │     no change │
│ QQuery 96 │           82.27 / 83.80 ±1.14 / 85.12 ms │           80.44 / 82.80 ±1.30 / 84.28 ms │     no change │
│ QQuery 97 │        145.85 / 147.69 ±1.11 / 148.79 ms │        142.36 / 145.14 ±2.03 / 146.98 ms │     no change │
│ QQuery 98 │        163.50 / 167.17 ±2.58 / 170.95 ms │        160.87 / 164.14 ±1.86 / 165.67 ms │     no change │
│ QQuery 99 │ 11023.97 / 11047.79 ±27.14 / 11097.88 ms │ 10917.15 / 10961.42 ±40.21 / 11013.08 ms │     no change │
└───────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                    │ 36391.89ms │
│ Total Time (feat_left-single-join)   │ 36312.80ms │
│ Average Time (HEAD)                  │   367.59ms │
│ Average Time (feat_left-single-join) │   366.80ms │
│ Queries Faster                       │          1 │
│ Queries Slower                       │          2 │
│ Queries with No Change               │         96 │
│ Queries with Failure                 │          0 │
└──────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 182.3s
Peak memory 5.3 GiB
Avg memory 4.4 GiB
CPU user 290.0s
CPU sys 22.5s
Disk read 0 B
Disk write 636.1 MiB

tpcds — branch

Metric Value
Wall time 181.9s
Peak memory 5.3 GiB
Avg memory 4.4 GiB
CPU user 291.0s
CPU sys 22.6s
Disk read 0 B
Disk write 144.0 KiB

@Dandandan
Copy link
Contributor Author

│ QQuery 23 │ 1027.12 / 1037.06 ±7.15 / 1046.92 ms │ 759.41 / 772.14 ±10.11 / 785.12 ms │ +1.34x faster │

I think this is the main change

@alamb
Copy link
Contributor

alamb commented Mar 17, 2026

"[vibe bench]" 😆

@Dandandan Dandandan closed this Mar 17, 2026
@Dandandan
Copy link
Contributor Author

Probably not worth a new join type at this point (even though it is not that complex one).

Copy link
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Somehow I forgot to submit this review

/// - If a left row has exactly one match on the right: returns the matched pair
/// - If a left row has no match on the right: returns the left row with NULLs for right columns
/// - If a left row has more than one match on the right: returns a runtime error
LeftSingle,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At vertica we called this type of join PK join or a Unique join as it assuemes any particular join key is unique

Maybe we can use a similar term here (rather than Single)

LeftUnique 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

common Related to common crate core Core DataFusion crate logical-expr Logical plan and expressions optimizer Optimizer rules physical-expr Changes to the physical-expr crates physical-plan Changes to the physical-plan crate proto Related to proto crate sql SQL Planner substrait Changes to the substrait crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants