Skip to content

[bench] Sort group by hashes#20796

Closed
Dandandan wants to merge 7 commits intoapache:mainfrom
Dandandan:sort_hashes
Closed

[bench] Sort group by hashes#20796
Dandandan wants to merge 7 commits intoapache:mainfrom
Dandandan:sort_hashes

Conversation

@Dandandan
Copy link
Contributor

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?

@Dandandan
Copy link
Contributor Author

Dandandan commented Mar 8, 2026

run benchmarks

@github-actions github-actions bot added the physical-plan Changes to the physical-plan crate label Mar 8, 2026
@alamb-ghbot
Copy link

🤖 Hi @Dandandan, thanks for the request (#20796 (comment)).

scrape_comments.py only supports whitelisted benchmarks.

  • Standard: clickbench_1, clickbench_extended, clickbench_partitioned, clickbench_pushdown, external_aggr, tpcds, tpch, tpch10, tpch_mem, tpch_mem10
  • Criterion: aggregate_query_sql, aggregate_vectorized, array_set_ops, case_when, character_length, in_list, left, plan_reuse, range_and_generate_series, replace, reset_plan_states, sort, sql_planner, strpos, substr_index, with_hashes

Please choose one or more of these with run benchmark <name> or run benchmark <name1> <name2>...

You can also set environment variables on subsequent lines:

run benchmark tpch_mem
DATAFUSION_RUNTIME_MEMORY_LIMIT=1G

@Dandandan Dandandan changed the title [bench[ Sort group by hashes [bench] Sort group by hashes Mar 8, 2026
@Dandandan
Copy link
Contributor Author

run benchmarks

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing sort_hashes (0e5e2b6) to 92078d9 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

Pre-reserve hashtable capacity to stabilize bucket layout, then sort
indices by rotating hashes so bucket-determining low bits become the
primary sort key. Use next_power_of_two() to recover actual bucket
count from capacity() (which returns elements, not buckets).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and sort_hashes
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ sort_hashes ┃       Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0 │  2407.46 ms │  2386.01 ms │    no change │
│ QQuery 1 │   843.72 ms │   829.77 ms │    no change │
│ QQuery 2 │  1677.95 ms │  1731.29 ms │    no change │
│ QQuery 3 │  1147.16 ms │  1416.07 ms │ 1.23x slower │
│ QQuery 4 │  2404.51 ms │  2760.97 ms │ 1.15x slower │
│ QQuery 5 │ 28595.71 ms │ 29137.35 ms │    no change │
│ QQuery 6 │  3910.45 ms │  3938.55 ms │    no change │
│ QQuery 7 │  2993.76 ms │  3727.08 ms │ 1.24x slower │
└──────────┴─────────────┴─────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 43980.73ms │
│ Total Time (sort_hashes)   │ 45927.09ms │
│ Average Time (HEAD)        │  5497.59ms │
│ Average Time (sort_hashes) │  5740.89ms │
│ Queries Faster             │          0 │
│ Queries Slower             │          3 │
│ Queries with No Change     │          5 │
│ Queries with Failure       │          0 │
└────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.60 ms │     2.64 ms │     no change │
│ QQuery 1  │    50.31 ms │    51.58 ms │     no change │
│ QQuery 2  │   163.69 ms │   159.85 ms │     no change │
│ QQuery 3  │   165.40 ms │   164.77 ms │     no change │
│ QQuery 4  │  1110.31 ms │  1830.77 ms │  1.65x slower │
│ QQuery 5  │  1272.27 ms │  1308.92 ms │     no change │
│ QQuery 6  │     6.74 ms │     6.69 ms │     no change │
│ QQuery 7  │    54.79 ms │    56.88 ms │     no change │
│ QQuery 8  │  1516.44 ms │  2261.44 ms │  1.49x slower │
│ QQuery 9  │  1883.01 ms │  2159.43 ms │  1.15x slower │
│ QQuery 10 │   341.33 ms │   383.94 ms │  1.12x slower │
│ QQuery 11 │   392.16 ms │   437.85 ms │  1.12x slower │
│ QQuery 12 │  1223.17 ms │  1269.15 ms │     no change │
│ QQuery 13 │  1974.60 ms │  2282.60 ms │  1.16x slower │
│ QQuery 14 │  1221.21 ms │  1483.55 ms │  1.21x slower │
│ QQuery 15 │  1244.21 ms │  2006.81 ms │  1.61x slower │
│ QQuery 16 │  2627.19 ms │  3485.22 ms │  1.33x slower │
│ QQuery 17 │  2596.39 ms │  3458.09 ms │  1.33x slower │
│ QQuery 18 │  5676.35 ms │  6567.34 ms │  1.16x slower │
│ QQuery 19 │   129.27 ms │   122.74 ms │ +1.05x faster │
│ QQuery 20 │  2008.26 ms │  1857.92 ms │ +1.08x faster │
│ QQuery 21 │  2209.31 ms │  2087.20 ms │ +1.06x faster │
│ QQuery 22 │  3657.79 ms │  3767.54 ms │     no change │
│ QQuery 23 │ 32827.96 ms │ 11845.57 ms │ +2.77x faster │
│ QQuery 24 │   206.50 ms │   189.61 ms │ +1.09x faster │
│ QQuery 25 │   440.17 ms │   433.61 ms │     no change │
│ QQuery 26 │   204.84 ms │   205.76 ms │     no change │
│ QQuery 27 │  2790.68 ms │  2778.36 ms │     no change │
│ QQuery 28 │ 23945.13 ms │ 25466.07 ms │  1.06x slower │
│ QQuery 29 │  1037.92 ms │  1061.59 ms │     no change │
│ QQuery 30 │  1263.94 ms │  1423.60 ms │  1.13x slower │
│ QQuery 31 │  1391.25 ms │  1498.33 ms │  1.08x slower │
│ QQuery 32 │  4960.29 ms │  5223.21 ms │  1.05x slower │
│ QQuery 33 │  6148.95 ms │  5824.48 ms │ +1.06x faster │
│ QQuery 34 │  6735.33 ms │  6314.23 ms │ +1.07x faster │
│ QQuery 35 │  1227.87 ms │  1833.74 ms │  1.49x slower │
│ QQuery 36 │   183.08 ms │   187.12 ms │     no change │
│ QQuery 37 │    73.78 ms │    70.03 ms │ +1.05x faster │
│ QQuery 38 │   109.92 ms │   110.32 ms │     no change │
│ QQuery 39 │   332.88 ms │   382.03 ms │  1.15x slower │
│ QQuery 40 │    41.44 ms │    43.57 ms │  1.05x slower │
│ QQuery 41 │    34.99 ms │    35.58 ms │     no change │
│ QQuery 42 │    31.16 ms │    50.77 ms │  1.63x slower │
└───────────┴─────────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃             ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 115514.89ms │
│ Total Time (sort_hashes)   │ 102190.51ms │
│ Average Time (HEAD)        │   2686.39ms │
│ Average Time (sort_hashes) │   2376.52ms │
│ Queries Faster             │           8 │
│ Queries Slower             │          19 │
│ Queries with No Change     │          16 │
│ Queries with Failure       │           0 │
└────────────────────────────┴─────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 130.25 ms │   134.34 ms │     no change │
│ QQuery 2  │  33.62 ms │    34.15 ms │     no change │
│ QQuery 3  │  39.02 ms │    40.92 ms │     no change │
│ QQuery 4  │  35.62 ms │    35.64 ms │     no change │
│ QQuery 5  │  94.87 ms │    91.36 ms │     no change │
│ QQuery 6  │  24.86 ms │    24.71 ms │     no change │
│ QQuery 7  │ 158.32 ms │   159.84 ms │     no change │
│ QQuery 8  │  41.48 ms │    41.62 ms │     no change │
│ QQuery 9  │ 113.16 ms │   112.11 ms │     no change │
│ QQuery 10 │  71.44 ms │    77.43 ms │  1.08x slower │
│ QQuery 11 │  19.02 ms │    19.30 ms │     no change │
│ QQuery 12 │  68.32 ms │    65.51 ms │     no change │
│ QQuery 13 │  56.21 ms │    70.11 ms │  1.25x slower │
│ QQuery 14 │  16.29 ms │    16.79 ms │     no change │
│ QQuery 15 │  33.22 ms │    40.06 ms │  1.21x slower │
│ QQuery 16 │  29.75 ms │    36.06 ms │  1.21x slower │
│ QQuery 17 │ 175.18 ms │   241.32 ms │  1.38x slower │
│ QQuery 18 │ 304.05 ms │   363.23 ms │  1.19x slower │
│ QQuery 19 │  53.63 ms │    50.92 ms │ +1.05x faster │
│ QQuery 20 │  64.66 ms │    73.66 ms │  1.14x slower │
│ QQuery 21 │ 193.53 ms │   200.96 ms │     no change │
│ QQuery 22 │  24.60 ms │    24.94 ms │     no change │
└───────────┴───────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 1781.09ms │
│ Total Time (sort_hashes)   │ 1954.97ms │
│ Average Time (HEAD)        │   80.96ms │
│ Average Time (sort_hashes) │   88.86ms │
│ Queries Faster             │         1 │
│ Queries Slower             │         7 │
│ Queries with No Change     │        14 │
│ Queries with Failure       │         0 │
└────────────────────────────┴───────────┘

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing sort_hashes (af8d99c) to 92078d9 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@Dandandan
Copy link
Contributor Author

run benchmarks

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and sort_hashes
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ sort_hashes ┃       Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0 │  2430.69 ms │  2425.35 ms │    no change │
│ QQuery 1 │   829.70 ms │   903.37 ms │ 1.09x slower │
│ QQuery 2 │  1721.95 ms │  1872.96 ms │ 1.09x slower │
│ QQuery 3 │  1099.57 ms │  1386.41 ms │ 1.26x slower │
│ QQuery 4 │  2398.12 ms │  2790.12 ms │ 1.16x slower │
│ QQuery 5 │ 27197.89 ms │ 28110.17 ms │    no change │
│ QQuery 6 │  3935.81 ms │  4191.71 ms │ 1.07x slower │
│ QQuery 7 │  2955.94 ms │  3998.43 ms │ 1.35x slower │
└──────────┴─────────────┴─────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 42569.67ms │
│ Total Time (sort_hashes)   │ 45678.52ms │
│ Average Time (HEAD)        │  5321.21ms │
│ Average Time (sort_hashes) │  5709.82ms │
│ Queries Faster             │          0 │
│ Queries Slower             │          6 │
│ Queries with No Change     │          2 │
│ Queries with Failure       │          0 │
└────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.54 ms │     2.60 ms │     no change │
│ QQuery 1  │    50.49 ms │    52.75 ms │     no change │
│ QQuery 2  │   162.71 ms │   162.66 ms │     no change │
│ QQuery 3  │   170.18 ms │   173.60 ms │     no change │
│ QQuery 4  │  1056.84 ms │  1927.18 ms │  1.82x slower │
│ QQuery 5  │  1282.32 ms │  1356.51 ms │  1.06x slower │
│ QQuery 6  │     6.78 ms │     6.48 ms │     no change │
│ QQuery 7  │    55.96 ms │    57.11 ms │     no change │
│ QQuery 8  │  1504.05 ms │  2262.43 ms │  1.50x slower │
│ QQuery 9  │  1854.21 ms │  2218.28 ms │  1.20x slower │
│ QQuery 10 │   342.56 ms │   414.91 ms │  1.21x slower │
│ QQuery 11 │   395.34 ms │   463.23 ms │  1.17x slower │
│ QQuery 12 │  1213.72 ms │  1252.62 ms │     no change │
│ QQuery 13 │  2008.05 ms │  2270.88 ms │  1.13x slower │
│ QQuery 14 │  1229.04 ms │  1485.50 ms │  1.21x slower │
│ QQuery 15 │  1268.34 ms │  2080.32 ms │  1.64x slower │
│ QQuery 16 │  2616.99 ms │  3491.86 ms │  1.33x slower │
│ QQuery 17 │  2587.29 ms │  3473.34 ms │  1.34x slower │
│ QQuery 18 │  5314.07 ms │  6349.38 ms │  1.19x slower │
│ QQuery 19 │   133.02 ms │   129.09 ms │     no change │
│ QQuery 20 │  1839.78 ms │  1948.31 ms │  1.06x slower │
│ QQuery 21 │  2127.46 ms │  2314.75 ms │  1.09x slower │
│ QQuery 22 │  3552.66 ms │  3913.56 ms │  1.10x slower │
│ QQuery 23 │ 24131.57 ms │ 11967.72 ms │ +2.02x faster │
│ QQuery 24 │   191.12 ms │   207.69 ms │  1.09x slower │
│ QQuery 25 │   439.78 ms │   454.91 ms │     no change │
│ QQuery 26 │   202.31 ms │   206.98 ms │     no change │
│ QQuery 27 │  2679.64 ms │  2923.05 ms │  1.09x slower │
│ QQuery 28 │ 22453.52 ms │ 23935.18 ms │  1.07x slower │
│ QQuery 29 │  1056.90 ms │  1079.06 ms │     no change │
│ QQuery 30 │  1285.11 ms │  1451.32 ms │  1.13x slower │
│ QQuery 31 │  1400.96 ms │  1530.46 ms │  1.09x slower │
│ QQuery 32 │  5021.76 ms │  5461.89 ms │  1.09x slower │
│ QQuery 33 │  5843.71 ms │  5834.81 ms │     no change │
│ QQuery 34 │  6227.91 ms │  6361.79 ms │     no change │
│ QQuery 35 │  1201.57 ms │  1875.75 ms │  1.56x slower │
│ QQuery 36 │   186.31 ms │   185.53 ms │     no change │
│ QQuery 37 │    73.01 ms │    71.97 ms │     no change │
│ QQuery 38 │   110.31 ms │   112.96 ms │     no change │
│ QQuery 39 │   342.15 ms │   384.51 ms │  1.12x slower │
│ QQuery 40 │    41.47 ms │    40.90 ms │     no change │
│ QQuery 41 │    34.08 ms │    35.61 ms │     no change │
│ QQuery 42 │    30.85 ms │    53.05 ms │  1.72x slower │
└───────────┴─────────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃             ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 103728.46ms │
│ Total Time (sort_hashes)   │ 101982.49ms │
│ Average Time (HEAD)        │   2412.29ms │
│ Average Time (sort_hashes) │   2371.69ms │
│ Queries Faster             │           1 │
│ Queries Slower             │          24 │
│ Queries with No Change     │          18 │
│ Queries with Failure       │           0 │
└────────────────────────────┴─────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 126.17 ms │   133.57 ms │  1.06x slower │
│ QQuery 2  │  32.44 ms │    34.75 ms │  1.07x slower │
│ QQuery 3  │  39.09 ms │    37.86 ms │     no change │
│ QQuery 4  │  35.75 ms │    34.58 ms │     no change │
│ QQuery 5  │  92.24 ms │    90.57 ms │     no change │
│ QQuery 6  │  24.36 ms │    24.45 ms │     no change │
│ QQuery 7  │ 158.10 ms │   148.16 ms │ +1.07x faster │
│ QQuery 8  │  40.15 ms │    39.15 ms │     no change │
│ QQuery 9  │ 112.41 ms │   111.40 ms │     no change │
│ QQuery 10 │  73.22 ms │    76.69 ms │     no change │
│ QQuery 11 │  18.64 ms │    19.55 ms │     no change │
│ QQuery 12 │  65.48 ms │    65.24 ms │     no change │
│ QQuery 13 │  53.47 ms │    70.63 ms │  1.32x slower │
│ QQuery 14 │  15.95 ms │    16.48 ms │     no change │
│ QQuery 15 │  33.24 ms │    39.22 ms │  1.18x slower │
│ QQuery 16 │  30.53 ms │    35.20 ms │  1.15x slower │
│ QQuery 17 │ 169.36 ms │   234.95 ms │  1.39x slower │
│ QQuery 18 │ 303.55 ms │   364.95 ms │  1.20x slower │
│ QQuery 19 │  51.88 ms │    54.68 ms │  1.05x slower │
│ QQuery 20 │  64.15 ms │    74.67 ms │  1.16x slower │
│ QQuery 21 │ 202.77 ms │   198.77 ms │     no change │
│ QQuery 22 │  24.52 ms │    25.06 ms │     no change │
└───────────┴───────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 1767.47ms │
│ Total Time (sort_hashes)   │ 1930.57ms │
│ Average Time (HEAD)        │   80.34ms │
│ Average Time (sort_hashes) │   87.75ms │
│ Queries Faster             │         1 │
│ Queries Slower             │         9 │
│ Queries with No Change     │        12 │
│ Queries with Failure       │         0 │
└────────────────────────────┴───────────┘

@Dandandan
Copy link
Contributor Author

run benchmarks

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing sort_hashes (2bacf51) to 92078d9 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and sort_hashes
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ sort_hashes ┃       Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0 │  2395.01 ms │  2445.40 ms │    no change │
│ QQuery 1 │   834.01 ms │   842.43 ms │    no change │
│ QQuery 2 │  1705.16 ms │  1734.78 ms │    no change │
│ QQuery 3 │  1077.81 ms │  1205.21 ms │ 1.12x slower │
│ QQuery 4 │  2398.44 ms │  2474.77 ms │    no change │
│ QQuery 5 │ 28751.19 ms │ 28824.42 ms │    no change │
│ QQuery 6 │  3960.45 ms │  3946.90 ms │    no change │
│ QQuery 7 │  2902.35 ms │  3077.48 ms │ 1.06x slower │
└──────────┴─────────────┴─────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 44024.43ms │
│ Total Time (sort_hashes)   │ 44551.39ms │
│ Average Time (HEAD)        │  5503.05ms │
│ Average Time (sort_hashes) │  5568.92ms │
│ Queries Faster             │          0 │
│ Queries Slower             │          2 │
│ Queries with No Change     │          6 │
│ Queries with Failure       │          0 │
└────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.55 ms │     2.67 ms │     no change │
│ QQuery 1  │    51.18 ms │    51.17 ms │     no change │
│ QQuery 2  │   160.59 ms │   165.79 ms │     no change │
│ QQuery 3  │   163.38 ms │   167.94 ms │     no change │
│ QQuery 4  │  1070.95 ms │  1248.33 ms │  1.17x slower │
│ QQuery 5  │  1260.37 ms │  1320.05 ms │     no change │
│ QQuery 6  │     6.87 ms │     6.49 ms │ +1.06x faster │
│ QQuery 7  │    55.05 ms │    59.75 ms │  1.09x slower │
│ QQuery 8  │  1498.44 ms │  1672.47 ms │  1.12x slower │
│ QQuery 9  │  1879.82 ms │  2075.30 ms │  1.10x slower │
│ QQuery 10 │   340.03 ms │   350.21 ms │     no change │
│ QQuery 11 │   398.67 ms │   406.00 ms │     no change │
│ QQuery 12 │  1195.38 ms │  1258.33 ms │  1.05x slower │
│ QQuery 13 │  1995.75 ms │  2190.02 ms │  1.10x slower │
│ QQuery 14 │  1205.16 ms │  1390.21 ms │  1.15x slower │
│ QQuery 15 │  1241.35 ms │  1396.78 ms │  1.13x slower │
│ QQuery 16 │  2650.01 ms │  2859.93 ms │  1.08x slower │
│ QQuery 17 │  2558.81 ms │  2846.39 ms │  1.11x slower │
│ QQuery 18 │  5643.02 ms │  5663.78 ms │     no change │
│ QQuery 19 │   129.60 ms │   129.83 ms │     no change │
│ QQuery 20 │  1881.22 ms │  1842.40 ms │     no change │
│ QQuery 21 │  2142.39 ms │  2167.24 ms │     no change │
│ QQuery 22 │  3684.29 ms │  3727.09 ms │     no change │
│ QQuery 23 │ 22129.63 ms │ 11966.09 ms │ +1.85x faster │
│ QQuery 24 │   199.64 ms │   205.20 ms │     no change │
│ QQuery 25 │   425.58 ms │   433.49 ms │     no change │
│ QQuery 26 │   204.63 ms │   202.11 ms │     no change │
│ QQuery 27 │  2728.59 ms │  2809.95 ms │     no change │
│ QQuery 28 │ 23356.49 ms │ 25701.33 ms │  1.10x slower │
│ QQuery 29 │  1055.22 ms │  1050.76 ms │     no change │
│ QQuery 30 │  1267.68 ms │  1300.14 ms │     no change │
│ QQuery 31 │  1360.97 ms │  1384.20 ms │     no change │
│ QQuery 32 │  5335.44 ms │  4479.97 ms │ +1.19x faster │
│ QQuery 33 │  5998.66 ms │  5582.71 ms │ +1.07x faster │
│ QQuery 34 │  6782.37 ms │  6540.15 ms │     no change │
│ QQuery 35 │  1317.47 ms │  1349.99 ms │     no change │
│ QQuery 36 │   185.42 ms │   180.85 ms │     no change │
│ QQuery 37 │    71.78 ms │    72.24 ms │     no change │
│ QQuery 38 │   108.22 ms │   110.12 ms │     no change │
│ QQuery 39 │   332.77 ms │   365.06 ms │  1.10x slower │
│ QQuery 40 │    43.08 ms │    36.84 ms │ +1.17x faster │
│ QQuery 41 │    33.77 ms │    38.82 ms │  1.15x slower │
│ QQuery 42 │    31.37 ms │    37.02 ms │  1.18x slower │
└───────────┴─────────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃             ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 104183.64ms │
│ Total Time (sort_hashes)   │  96845.23ms │
│ Average Time (HEAD)        │   2422.88ms │
│ Average Time (sort_hashes) │   2252.21ms │
│ Queries Faster             │           5 │
│ Queries Slower             │          14 │
│ Queries with No Change     │          24 │
│ Queries with Failure       │           0 │
└────────────────────────────┴─────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ sort_hashes ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │ 128.98 ms │   135.73 ms │ 1.05x slower │
│ QQuery 2  │  33.12 ms │    32.57 ms │    no change │
│ QQuery 3  │  38.35 ms │    39.76 ms │    no change │
│ QQuery 4  │  35.33 ms │    34.65 ms │    no change │
│ QQuery 5  │  90.42 ms │    91.05 ms │    no change │
│ QQuery 6  │  24.47 ms │    24.41 ms │    no change │
│ QQuery 7  │ 157.22 ms │   157.47 ms │    no change │
│ QQuery 8  │  42.04 ms │    41.41 ms │    no change │
│ QQuery 9  │ 109.65 ms │   113.36 ms │    no change │
│ QQuery 10 │  72.38 ms │    75.49 ms │    no change │
│ QQuery 11 │  18.84 ms │    18.74 ms │    no change │
│ QQuery 12 │  67.41 ms │    66.78 ms │    no change │
│ QQuery 13 │  53.31 ms │    57.75 ms │ 1.08x slower │
│ QQuery 14 │  16.51 ms │    15.77 ms │    no change │
│ QQuery 15 │  33.06 ms │    34.69 ms │    no change │
│ QQuery 16 │  30.98 ms │    33.67 ms │ 1.09x slower │
│ QQuery 17 │ 175.27 ms │   183.42 ms │    no change │
│ QQuery 18 │ 300.48 ms │   307.06 ms │    no change │
│ QQuery 19 │  50.52 ms │    51.56 ms │    no change │
│ QQuery 20 │  63.35 ms │    64.12 ms │    no change │
│ QQuery 21 │ 198.74 ms │   195.22 ms │    no change │
│ QQuery 22 │  24.81 ms │    24.43 ms │    no change │
└───────────┴───────────┴─────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 1765.22ms │
│ Total Time (sort_hashes)   │ 1799.12ms │
│ Average Time (HEAD)        │   80.24ms │
│ Average Time (sort_hashes) │   81.78ms │
│ Queries Faster             │         0 │
│ Queries Slower             │         3 │
│ Queries with No Change     │        19 │
│ Queries with Failure       │         0 │
└────────────────────────────┴───────────┘

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing sort_hashes (2bacf51) to 92078d9 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and sort_hashes
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ sort_hashes ┃       Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0 │  2453.15 ms │  2525.77 ms │    no change │
│ QQuery 1 │   833.87 ms │   838.78 ms │    no change │
│ QQuery 2 │  1679.96 ms │  1707.14 ms │    no change │
│ QQuery 3 │  1120.48 ms │  1196.03 ms │ 1.07x slower │
│ QQuery 4 │  2474.33 ms │  2583.34 ms │    no change │
│ QQuery 5 │ 28875.66 ms │ 29383.89 ms │    no change │
│ QQuery 6 │  3949.48 ms │  4011.91 ms │    no change │
│ QQuery 7 │  3020.25 ms │  3074.63 ms │    no change │
└──────────┴─────────────┴─────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 44407.17ms │
│ Total Time (sort_hashes)   │ 45321.48ms │
│ Average Time (HEAD)        │  5550.90ms │
│ Average Time (sort_hashes) │  5665.18ms │
│ Queries Faster             │          0 │
│ Queries Slower             │          1 │
│ Queries with No Change     │          7 │
│ Queries with Failure       │          0 │
└────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.56 ms │     2.54 ms │     no change │
│ QQuery 1  │    50.94 ms │    52.10 ms │     no change │
│ QQuery 2  │   163.67 ms │   164.30 ms │     no change │
│ QQuery 3  │   162.55 ms │   171.35 ms │  1.05x slower │
│ QQuery 4  │  1089.65 ms │  1312.51 ms │  1.20x slower │
│ QQuery 5  │  1276.54 ms │  1357.39 ms │  1.06x slower │
│ QQuery 6  │     6.49 ms │     6.35 ms │     no change │
│ QQuery 7  │    53.75 ms │    57.61 ms │  1.07x slower │
│ QQuery 8  │  1523.59 ms │  1704.90 ms │  1.12x slower │
│ QQuery 9  │  1838.99 ms │  2107.63 ms │  1.15x slower │
│ QQuery 10 │   344.02 ms │   352.92 ms │     no change │
│ QQuery 11 │   381.19 ms │   412.21 ms │  1.08x slower │
│ QQuery 12 │  1213.90 ms │  1306.06 ms │  1.08x slower │
│ QQuery 13 │  1980.44 ms │  2211.97 ms │  1.12x slower │
│ QQuery 14 │  1233.50 ms │  1389.12 ms │  1.13x slower │
│ QQuery 15 │  1278.97 ms │  1458.69 ms │  1.14x slower │
│ QQuery 16 │  2611.31 ms │  2911.18 ms │  1.11x slower │
│ QQuery 17 │  2595.21 ms │  2885.96 ms │  1.11x slower │
│ QQuery 18 │  5905.62 ms │  5454.43 ms │ +1.08x faster │
│ QQuery 19 │   126.72 ms │   131.53 ms │     no change │
│ QQuery 20 │  1909.22 ms │  1881.43 ms │     no change │
│ QQuery 21 │  2192.56 ms │  2114.76 ms │     no change │
│ QQuery 22 │  3796.02 ms │  3738.91 ms │     no change │
│ QQuery 23 │ 24690.37 ms │ 11941.07 ms │ +2.07x faster │
│ QQuery 24 │   201.89 ms │   205.51 ms │     no change │
│ QQuery 25 │   444.23 ms │   441.24 ms │     no change │
│ QQuery 26 │   217.99 ms │   193.87 ms │ +1.12x faster │
│ QQuery 27 │  2713.77 ms │  2781.30 ms │     no change │
│ QQuery 28 │ 23737.40 ms │ 25731.91 ms │  1.08x slower │
│ QQuery 29 │  1038.48 ms │  1018.41 ms │     no change │
│ QQuery 30 │  1291.65 ms │  1313.96 ms │     no change │
│ QQuery 31 │  1368.29 ms │  1377.90 ms │     no change │
│ QQuery 32 │  5320.23 ms │  5267.39 ms │     no change │
│ QQuery 33 │  6110.39 ms │  6181.91 ms │     no change │
│ QQuery 34 │  6427.06 ms │  6251.39 ms │     no change │
│ QQuery 35 │  1231.87 ms │  1394.91 ms │  1.13x slower │
│ QQuery 36 │   186.28 ms │   189.02 ms │     no change │
│ QQuery 37 │    69.70 ms │    72.19 ms │     no change │
│ QQuery 38 │   116.59 ms │   112.28 ms │     no change │
│ QQuery 39 │   338.25 ms │   366.20 ms │  1.08x slower │
│ QQuery 40 │    41.46 ms │    39.38 ms │ +1.05x faster │
│ QQuery 41 │    34.76 ms │    37.08 ms │  1.07x slower │
│ QQuery 42 │    29.84 ms │    35.77 ms │  1.20x slower │
└───────────┴─────────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃             ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 107347.90ms │
│ Total Time (sort_hashes)   │  98138.53ms │
│ Average Time (HEAD)        │   2496.46ms │
│ Average Time (sort_hashes) │   2282.29ms │
│ Queries Faster             │           4 │
│ Queries Slower             │          18 │
│ Queries with No Change     │          21 │
│ Queries with Failure       │           0 │
└────────────────────────────┴─────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 128.81 ms │   132.65 ms │     no change │
│ QQuery 2  │  32.37 ms │    32.66 ms │     no change │
│ QQuery 3  │  35.92 ms │    41.03 ms │  1.14x slower │
│ QQuery 4  │  36.91 ms │    34.46 ms │ +1.07x faster │
│ QQuery 5  │  91.86 ms │    90.65 ms │     no change │
│ QQuery 6  │  24.59 ms │    24.55 ms │     no change │
│ QQuery 7  │ 157.70 ms │   157.10 ms │     no change │
│ QQuery 8  │  41.15 ms │    40.56 ms │     no change │
│ QQuery 9  │ 107.76 ms │   110.71 ms │     no change │
│ QQuery 10 │  71.50 ms │    76.50 ms │  1.07x slower │
│ QQuery 11 │  18.60 ms │    19.14 ms │     no change │
│ QQuery 12 │  64.25 ms │    67.58 ms │  1.05x slower │
│ QQuery 13 │  55.49 ms │    56.04 ms │     no change │
│ QQuery 14 │  15.61 ms │    15.87 ms │     no change │
│ QQuery 15 │  35.42 ms │    34.67 ms │     no change │
│ QQuery 16 │  30.18 ms │    32.65 ms │  1.08x slower │
│ QQuery 17 │ 169.56 ms │   188.05 ms │  1.11x slower │
│ QQuery 18 │ 302.81 ms │   310.49 ms │     no change │
│ QQuery 19 │  52.77 ms │    52.01 ms │     no change │
│ QQuery 20 │  62.39 ms │    64.50 ms │     no change │
│ QQuery 21 │ 197.41 ms │   200.58 ms │     no change │
│ QQuery 22 │  24.79 ms │    24.83 ms │     no change │
└───────────┴───────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 1757.88ms │
│ Total Time (sort_hashes)   │ 1807.27ms │
│ Average Time (HEAD)        │   79.90ms │
│ Average Time (sort_hashes) │   82.15ms │
│ Queries Faster             │         1 │
│ Queries Slower             │         5 │
│ Queries with No Change     │        16 │
│ Queries with Failure       │         0 │
└────────────────────────────┴───────────┘

…, and reserve based on unique hash count

- Add count sort optimization to GroupValuesPrimitive for cache-friendly hash table probing
- Skip count sort when hash table fits in L2 cache (<256KB) across all implementations
- Use count_unique on sorted hashes instead of reserve(n_rows) to avoid over-allocating
- Extract shared count_sort and count_unique helpers to group_values/mod.rs

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

run benchmarks

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing sort_hashes (d9326ad) to 92078d9 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and sort_hashes
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ sort_hashes ┃       Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0 │  2420.04 ms │  2473.77 ms │    no change │
│ QQuery 1 │   827.91 ms │   908.14 ms │ 1.10x slower │
│ QQuery 2 │  1707.22 ms │  1865.21 ms │ 1.09x slower │
│ QQuery 3 │  1126.75 ms │  1129.13 ms │    no change │
│ QQuery 4 │  2395.98 ms │  2510.32 ms │    no change │
│ QQuery 5 │ 27961.69 ms │ 28548.07 ms │    no change │
│ QQuery 6 │  4016.57 ms │  4194.14 ms │    no change │
│ QQuery 7 │  2973.37 ms │  3057.84 ms │    no change │
└──────────┴─────────────┴─────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 43429.53ms │
│ Total Time (sort_hashes)   │ 44686.62ms │
│ Average Time (HEAD)        │  5428.69ms │
│ Average Time (sort_hashes) │  5585.83ms │
│ Queries Faster             │          0 │
│ Queries Slower             │          2 │
│ Queries with No Change     │          6 │
│ Queries with Failure       │          0 │
└────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.60 ms │     2.64 ms │     no change │
│ QQuery 1  │    51.90 ms │    50.75 ms │     no change │
│ QQuery 2  │   158.59 ms │   162.15 ms │     no change │
│ QQuery 3  │   167.84 ms │   168.52 ms │     no change │
│ QQuery 4  │  1103.57 ms │  1247.04 ms │  1.13x slower │
│ QQuery 5  │  1279.43 ms │  1375.06 ms │  1.07x slower │
│ QQuery 6  │     7.47 ms │     6.88 ms │ +1.09x faster │
│ QQuery 7  │    56.44 ms │    55.46 ms │     no change │
│ QQuery 8  │  1496.97 ms │  1600.31 ms │  1.07x slower │
│ QQuery 9  │  1857.99 ms │  1976.92 ms │  1.06x slower │
│ QQuery 10 │   343.02 ms │   378.55 ms │  1.10x slower │
│ QQuery 11 │   388.68 ms │   418.81 ms │  1.08x slower │
│ QQuery 12 │  1192.62 ms │  1260.89 ms │  1.06x slower │
│ QQuery 13 │  1983.78 ms │  2159.62 ms │  1.09x slower │
│ QQuery 14 │  1236.58 ms │  1352.70 ms │  1.09x slower │
│ QQuery 15 │  1232.12 ms │  1394.62 ms │  1.13x slower │
│ QQuery 16 │  2590.88 ms │  2857.24 ms │  1.10x slower │
│ QQuery 17 │  2599.86 ms │  2829.13 ms │  1.09x slower │
│ QQuery 18 │  6086.24 ms │  5455.81 ms │ +1.12x faster │
│ QQuery 19 │   126.48 ms │   130.50 ms │     no change │
│ QQuery 20 │  1867.01 ms │  1973.00 ms │  1.06x slower │
│ QQuery 21 │  2238.15 ms │  2238.22 ms │     no change │
│ QQuery 22 │  3816.34 ms │  3915.84 ms │     no change │
│ QQuery 23 │ 21282.27 ms │ 12510.47 ms │ +1.70x faster │
│ QQuery 24 │   192.01 ms │   199.49 ms │     no change │
│ QQuery 25 │   433.49 ms │   455.04 ms │     no change │
│ QQuery 26 │   207.75 ms │   203.16 ms │     no change │
│ QQuery 27 │  2726.25 ms │  2875.60 ms │  1.05x slower │
│ QQuery 28 │ 23296.67 ms │ 24363.53 ms │     no change │
│ QQuery 29 │  1037.36 ms │  1053.85 ms │     no change │
│ QQuery 30 │  1285.23 ms │  1298.22 ms │     no change │
│ QQuery 31 │  1419.47 ms │  1393.13 ms │     no change │
│ QQuery 32 │  5220.50 ms │  4461.39 ms │ +1.17x faster │
│ QQuery 33 │  6257.61 ms │  5743.47 ms │ +1.09x faster │
│ QQuery 34 │  6230.76 ms │  6482.54 ms │     no change │
│ QQuery 35 │  1210.23 ms │  1354.07 ms │  1.12x slower │
│ QQuery 36 │   180.52 ms │   189.55 ms │  1.05x slower │
│ QQuery 37 │    72.12 ms │    73.11 ms │     no change │
│ QQuery 38 │   110.52 ms │   113.71 ms │     no change │
│ QQuery 39 │   328.38 ms │   359.44 ms │  1.09x slower │
│ QQuery 40 │    45.10 ms │    38.90 ms │ +1.16x faster │
│ QQuery 41 │    35.47 ms │    35.21 ms │     no change │
│ QQuery 42 │    29.97 ms │    34.41 ms │  1.15x slower │
└───────────┴─────────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Benchmark Summary          ┃             ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 103486.24ms │
│ Total Time (sort_hashes)   │  96248.93ms │
│ Average Time (HEAD)        │   2406.66ms │
│ Average Time (sort_hashes) │   2238.35ms │
│ Queries Faster             │           6 │
│ Queries Slower             │          18 │
│ Queries with No Change     │          19 │
│ Queries with Failure       │           0 │
└────────────────────────────┴─────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ sort_hashes ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 128.80 ms │   128.65 ms │     no change │
│ QQuery 2  │  32.37 ms │    32.79 ms │     no change │
│ QQuery 3  │  39.48 ms │    35.95 ms │ +1.10x faster │
│ QQuery 4  │  35.58 ms │    35.53 ms │     no change │
│ QQuery 5  │  92.34 ms │    93.07 ms │     no change │
│ QQuery 6  │  24.52 ms │    24.38 ms │     no change │
│ QQuery 7  │ 156.94 ms │   154.73 ms │     no change │
│ QQuery 8  │  40.72 ms │    40.23 ms │     no change │
│ QQuery 9  │ 109.25 ms │   111.61 ms │     no change │
│ QQuery 10 │  71.02 ms │    72.25 ms │     no change │
│ QQuery 11 │  19.20 ms │    19.04 ms │     no change │
│ QQuery 12 │  65.66 ms │    66.23 ms │     no change │
│ QQuery 13 │  59.05 ms │    57.84 ms │     no change │
│ QQuery 14 │  15.18 ms │    16.07 ms │  1.06x slower │
│ QQuery 15 │  33.41 ms │    34.72 ms │     no change │
│ QQuery 16 │  29.98 ms │    30.56 ms │     no change │
│ QQuery 17 │ 169.57 ms │   177.87 ms │     no change │
│ QQuery 18 │ 298.01 ms │   314.11 ms │  1.05x slower │
│ QQuery 19 │  49.26 ms │    51.66 ms │     no change │
│ QQuery 20 │  60.30 ms │    62.84 ms │     no change │
│ QQuery 21 │ 197.64 ms │   198.45 ms │     no change │
│ QQuery 22 │  22.89 ms │    24.59 ms │  1.07x slower │
└───────────┴───────────┴─────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)          │ 1751.16ms │
│ Total Time (sort_hashes)   │ 1783.16ms │
│ Average Time (HEAD)        │   79.60ms │
│ Average Time (sort_hashes) │   81.05ms │
│ Queries Faster             │         1 │
│ Queries Slower             │         3 │
│ Queries with No Change     │        18 │
│ Queries with Failure       │         0 │
└────────────────────────────┴───────────┘

@Dandandan Dandandan closed this Mar 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

physical-plan Changes to the physical-plan crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants