Skip to content

IN LIST: optimize Utf8View and BinaryView filters - #24088

Draft
geoffreyclaude wants to merge 8 commits into
apache:mainfrom
geoffreyclaude:codex/in-list-byte-view-hashset
Draft

IN LIST: optimize Utf8View and BinaryView filters#24088
geoffreyclaude wants to merge 8 commits into
apache:mainfrom
geoffreyclaude:codex/in-list-byte-view-hashset

Conversation

@geoffreyclaude

@geoffreyclaudegeoffreyclaude commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Note

Until #24102 merges, GitHub's Files changed tab also shows the earlier PRs in the stack. The direct diff from #24102 to this PR shows only this PR's byte-view changes.

Rationale for this change

Arrow represents every Utf8View and BinaryView value with a 16-byte view. When a value is at most 12 bytes long, the complete value is stored directly in that view:

32-bit length | up to 12 value bytes, zero-padded

Equal short values therefore have the same 128-bit view. DataFusion can look up that view directly, without reading another buffer or using Arrow's general value comparison.

This PR uses that faster path when every non-null value in the IN list is at most 12 bytes long. The byte-view adapter treats each inline view as a Decimal128 key and passes it to the shared primitive selector from #24283, the same selector used by #24102:

Decimal128 is only a 16-byte container here; no decimal operations are performed.

A longer input value cannot match a short list value because its encoded length is different, so it can be rejected without reading its backing bytes. If the list itself contains a value longer than 12 bytes, DataFusion keeps using the general filter.

Null list entries do not affect this choice, but are still recorded for SQL null behavior. After unwrapping any dictionary, the input and list must use the same view type: Utf8View is not mixed with BinaryView, and regular Utf8 and Binary keep their existing paths.

What changes are included in this PR?

  • Adds the short-value path for Utf8View and BinaryView.
  • Passes the 128-bit keys to the shared primitive selector instead of making a separate filter choice.
  • Keeps the general filter for longer list values or mismatched types.
  • Preserves slices, dictionaries, nulls, IN, and NOT IN.

Are these changes tested?

Tests cover both view types and both faster paths; the 4/5-value and 12/13-byte boundaries; long inputs and lists that require the general filter; exact-type routing; slices and dictionaries; input and list nulls; and IN and NOT IN.

Are there any user-facing changes?

No. SQL results and public APIs are unchanged.

Automated benchmark snapshot

Automated run on an aarch64 Neoverse V2 runner, comparing #24102 with this PR at exact commit 00dd083e. The benchmark evaluates 8,192-row batches after filter construction. Lower is better.

All 15 reported rows improved, with a 35.9% geometric-mean time reduction.

BenchmarkBeforeAfterChange
utf8view/short_8b/list=4/match=0%18.7 us11.6 us-38.0% (1.61x faster)
utf8view/short_8b/list=4/match=50%39.3 us11.6 us-70.5% (3.39x faster)
utf8view/short_8b/list=16/match=0%18.9 us14.1 us-25.4% (1.34x faster)
utf8view/short_8b/list=16/match=50%39.6 us30.1 us-24.0% (1.32x faster)
utf8view/short_8b/list=64/match=0%18.6 us13.4 us-28.0% (1.39x faster)
utf8view/short_8b/list=64/match=50%38.5 us28.4 us-26.2% (1.36x faster)
utf8view/short_8b/list=256/match=0%18.5 us13.4 us-27.6% (1.38x faster)
utf8view/short_8b/list=256/match=50%38.3 us25.7 us-32.9% (1.49x faster)
utf8view/len_12b/list=16/match=0%18.6 us15.4 us-17.2% (1.21x faster)
utf8view/len_12b/list=16/match=50%40.0 us18.3 us-54.2% (2.19x faster)
utf8view/len_12b/list=64/match=0%18.7 us13.7 us-26.7% (1.36x faster)
utf8view/len_12b/list=64/match=50%39.6 us25.9 us-34.6% (1.53x faster)
nulls/utf8view/short_8b/list=16/match=50%/nulls=20%38.7 us25.8 us-33.3% (1.50x faster)
nulls/utf8view/short_8b/list=16/match=50%/nulls=20%/NOT_IN38.5 us24.7 us-35.8% (1.56x faster)
nulls/utf8view/short_8b/list=16/match=50%/nulls=50%29.2 us17.8 us-39.0% (1.64x faster)

@github-actionsgithub-actionsBot added the physical-expr Changes to the physical-expr crates label Aug 4, 2026
@codecov-commenter

codecov-commenter commented Aug 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.91873% with 108 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.15%. Comparing base (426b351) to head (00dd083).
⚠️ Report is 106 commits behind head on main.

Files with missing linesPatch %Lines
...l-expr/src/expressions/in_list/primitive_filter.rs73.79%21 Missing and 17 partials ⚠️
...rc/expressions/in_list/fixed_size_binary_filter.rs83.56%13 Missing and 23 partials ⚠️
...l-expr/src/expressions/in_list/byte_view_filter.rs83.72%9 Missing and 12 partials ⚠️
...atafusion/physical-expr/src/expressions/in_list.rs78.94%1 Missing and 7 partials ⚠️
.../physical-expr/src/expressions/in_list/strategy.rs84.84%0 Missing and 5 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #24088 +/- ##
==========================================
+ Coverage 80.91% 81.15% +0.23% 
==========================================
Files 1102 1114 +12 Lines 377102 387354 +10252 Branches 377102 387354 +10252 ==========================================
+ Hits 305143 314345 +9202 - Misses 53769 54461 +692 - Partials 18190 18548 +358 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@geoffreyclaude

Copy link
Copy Markdown
ContributorAuthor

run benchmark in_list

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance:c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5191485522-1453-kq4t5 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected

Comparing codex/in-list-byte-view-hashset (65b67ba) to db0c31b (merge-base) diff

Run configuration
run benchmark in_list

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance:c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing codex/in-list-byte-view-hashset (65b67ba) to db0c31b (merge-base) diff

Run configuration
run benchmark in_list
CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected
Details

group HEAD codex_in-list-byte-view-hashset
----- ---- -------------------------------
in_list/Float32/list=100/nulls=0% 1.00 18.1±0.26µs ? ?/sec 1.26 22.9±1.53µs ? ?/sec
in_list/Float32/list=100/nulls=20% 1.35 49.8±2.50µs ? ?/sec 1.00 36.9±0.54µs ? ?/sec
in_list/Float32/list=28/nulls=0% 1.00 14.5±0.02µs ? ?/sec 1.00 14.5±0.03µs ? ?/sec
in_list/Float32/list=28/nulls=20% 1.00 14.6±0.03µs ? ?/sec 1.00 14.6±0.03µs ? ?/sec
in_list/Float32/list=3/nulls=0% 1.00 3.2±0.01µs ? ?/sec 1.00 3.2±0.01µs ? ?/sec
in_list/Float32/list=3/nulls=20% 1.00 3.3±0.01µs ? ?/sec 1.00 3.4±0.00µs ? ?/sec
in_list/Float32/list=8/nulls=0% 1.00 5.1±0.01µs ? ?/sec 1.00 5.1±0.02µs ? ?/sec
in_list/Float32/list=8/nulls=20% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.02µs ? ?/sec
in_list/Int16/list=100/nulls=0% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.01µs ? ?/sec
in_list/Int16/list=100/nulls=20% 1.00 5.4±0.01µs ? ?/sec 1.00 5.4±0.01µs ? ?/sec
in_list/Int16/list=28/nulls=0% 1.00 5.3±0.01µs ? ?/sec 1.01 5.4±0.09µs ? ?/sec
in_list/Int16/list=28/nulls=20% 1.00 5.5±0.02µs ? ?/sec 1.01 5.5±0.01µs ? ?/sec
in_list/Int16/list=3/nulls=0% 1.00 3.5±0.01µs ? ?/sec 1.00 3.5±0.01µs ? ?/sec
in_list/Int16/list=3/nulls=20% 1.00 3.6±0.01µs ? ?/sec 1.00 3.6±0.01µs ? ?/sec
in_list/Int16/list=8/nulls=0% 1.00 4.5±0.01µs ? ?/sec 1.00 4.5±0.02µs ? ?/sec
in_list/Int16/list=8/nulls=20% 1.00 4.7±0.01µs ? ?/sec 1.00 4.7±0.01µs ? ?/sec
in_list/Int32/list=100/nulls=0% 1.87 56.1±0.66µs ? ?/sec 1.00 30.0±0.54µs ? ?/sec
in_list/Int32/list=100/nulls=20% 2.07 57.8±0.62µs ? ?/sec 1.00 27.9±0.62µs ? ?/sec
in_list/Int32/list=28/nulls=0% 1.00 14.5±0.05µs ? ?/sec 1.00 14.5±0.02µs ? ?/sec
in_list/Int32/list=28/nulls=20% 1.00 14.7±0.02µs ? ?/sec 1.00 14.7±0.04µs ? ?/sec
in_list/Int32/list=3/nulls=0% 1.00 3.2±0.00µs ? ?/sec 1.00 3.2±0.02µs ? ?/sec
in_list/Int32/list=3/nulls=20% 1.00 3.4±0.02µs ? ?/sec 1.00 3.4±0.01µs ? ?/sec
in_list/Int32/list=8/nulls=0% 1.00 5.1±0.02µs ? ?/sec 1.00 5.1±0.02µs ? ?/sec
in_list/Int32/list=8/nulls=20% 1.00 5.3±0.02µs ? ?/sec 1.00 5.3±0.02µs ? ?/sec
in_list/TimestampNs/list=100/nulls=0% 1.00 54.8±0.80µs ? ?/sec 1.08 59.3±1.59µs ? ?/sec
in_list/TimestampNs/list=100/nulls=20% 1.00 62.4±1.41µs ? ?/sec 1.03 64.3±0.62µs ? ?/sec
in_list/TimestampNs/list=28/nulls=0% 1.00 31.5±0.63µs ? ?/sec 1.05 33.0±0.81µs ? ?/sec
in_list/TimestampNs/list=28/nulls=20% 1.00 40.9±1.00µs ? ?/sec 1.19 48.6±4.45µs ? ?/sec
in_list/TimestampNs/list=3/nulls=0% 1.00 3.8±0.01µs ? ?/sec 1.00 3.8±0.02µs ? ?/sec
in_list/TimestampNs/list=3/nulls=20% 1.00 3.9±0.00µs ? ?/sec 1.00 3.9±0.02µs ? ?/sec
in_list/TimestampNs/list=8/nulls=0% 1.00 7.3±0.01µs ? ?/sec 1.00 7.3±0.04µs ? ?/sec
in_list/TimestampNs/list=8/nulls=20% 1.00 7.5±0.01µs ? ?/sec 1.00 7.5±0.01µs ? ?/sec
in_list/UInt8/list=100/nulls=0% 1.00 5.3±0.01µs ? ?/sec 1.00 5.2±0.01µs ? ?/sec
in_list/UInt8/list=100/nulls=20% 1.00 5.4±0.01µs ? ?/sec 1.00 5.4±0.01µs ? ?/sec
in_list/UInt8/list=28/nulls=0% 1.00 5.3±0.02µs ? ?/sec 1.00 5.2±0.01µs ? ?/sec
in_list/UInt8/list=28/nulls=20% 1.00 5.4±0.01µs ? ?/sec 1.00 5.4±0.01µs ? ?/sec
in_list/UInt8/list=3/nulls=0% 1.00 3.3±0.01µs ? ?/sec 1.00 3.3±0.01µs ? ?/sec
in_list/UInt8/list=3/nulls=20% 1.00 3.4±0.00µs ? ?/sec 1.00 3.4±0.01µs ? ?/sec
in_list/UInt8/list=8/nulls=0% 1.00 3.8±0.01µs ? ?/sec 1.00 3.8±0.01µs ? ?/sec
in_list/UInt8/list=8/nulls=20% 1.00 3.9±0.01µs ? ?/sec 1.00 3.9±0.01µs ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100 1.02 82.1±2.17µs ? ?/sec 1.00 80.5±1.82µs ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12 1.00 48.7±2.62µs ? ?/sec 1.08 52.4±0.48µs ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3 1.00 100.2±3.17µs ? ?/sec 1.00 100.2±0.61µs ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100 1.00 76.8±0.61µs ? ?/sec 1.03 79.2±0.60µs ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12 1.00 54.2±1.02µs ? ?/sec 1.05 57.0±1.97µs ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3 1.02 51.0±1.85µs ? ?/sec 1.00 49.9±0.57µs ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100 1.00 123.1±1.93µs ? ?/sec 1.02 126.1±0.93µs ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12 1.00 57.5±0.67µs ? ?/sec 1.05 60.2±0.41µs ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3 1.00 92.1±0.49µs ? ?/sec 1.01 92.7±0.54µs ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100 1.00 121.0±0.73µs ? ?/sec 1.02 123.3±0.86µs ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12 1.00 71.3±0.44µs ? ?/sec 1.01 72.2±0.43µs ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3 1.00 79.2±0.54µs ? ?/sec 1.02 80.8±3.07µs ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100 1.00 64.5±0.50µs ? ?/sec 1.00 64.6±0.59µs ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12 1.00 26.6±0.11µs ? ?/sec 1.00 26.6±0.10µs ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3 1.00 28.2±0.19µs ? ?/sec 1.00 28.1±0.10µs ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100 1.00 68.2±0.28µs ? ?/sec 1.00 68.0±0.24µs ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12 1.00 29.1±0.08µs ? ?/sec 1.00 29.1±0.07µs ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3 1.00 31.6±0.04µs ? ?/sec 1.00 31.4±0.05µs ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100 1.00 64.7±0.34µs ? ?/sec 1.00 64.9±0.58µs ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12 1.01 26.9±0.08µs ? ?/sec 1.00 26.8±0.06µs ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3 1.01 29.2±0.14µs ? ?/sec 1.00 28.8±0.08µs ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100 1.00 69.2±0.47µs ? ?/sec 1.00 69.1±0.42µs ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12 1.00 29.7±0.06µs ? ?/sec 1.00 29.6±0.05µs ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3 1.06 34.0±1.47µs ? ?/sec 1.00 32.0±0.05µs ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0% 1.00 59.2±0.84µs ? ?/sec 1.01 59.8±0.75µs ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20% 1.10 54.6±2.38µs ? ?/sec 1.00 49.7±3.32µs ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0% 1.01 116.4±0.98µs ? ?/sec 1.00 115.0±1.58µs ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20% 1.00 126.0±2.18µs ? ?/sec 1.02 128.9±2.18µs ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0% 1.00 150.4±1.49µs ? ?/sec 1.02 153.6±2.76µs ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20% 1.00 144.3±1.52µs ? ?/sec 1.03 147.9±1.39µs ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0% 1.00 125.9±1.09µs ? ?/sec 1.00 126.1±0.75µs ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20% 1.00 50.1±2.81µs ? ?/sec 1.05 52.6±1.09µs ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0% 1.01 140.3±2.28µs ? ?/sec 1.00 139.3±2.08µs ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20% 1.00 99.5±2.06µs ? ?/sec 1.01 100.8±1.24µs ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0% 1.00 154.9±1.10µs ? ?/sec 1.00 155.4±2.18µs ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20% 1.00 150.1±1.84µs ? ?/sec 1.02 153.6±1.73µs ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0% 1.00 39.0±0.30µs ? ?/sec 1.00 38.9±0.60µs ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20% 1.05 63.9±1.08µs ? ?/sec 1.00 60.9±1.38µs ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0% 1.00 62.1±1.14µs ? ?/sec 1.00 62.2±1.30µs ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20% 1.00 64.2±0.58µs ? ?/sec 1.01 64.8±0.86µs ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0% 1.01 101.3±0.47µs ? ?/sec 1.00 100.2±1.02µs ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20% 1.01 128.4±1.00µs ? ?/sec 1.00 127.7±0.92µs ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0% 1.00 39.4±0.35µs ? ?/sec 1.00 39.3±0.55µs ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20% 1.04 41.2±1.12µs ? ?/sec 1.00 39.7±1.05µs ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0% 1.00 73.4±1.75µs ? ?/sec 1.00 73.7±1.51µs ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20% 1.02 69.7±1.15µs ? ?/sec 1.00 68.3±1.35µs ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0% 1.00 130.3±2.75µs ? ?/sec 1.00 129.8±2.28µs ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20% 1.00 114.8±1.08µs ? ?/sec 1.01 116.4±0.95µs ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100 1.01 101.6±1.00µs ? ?/sec 1.00 100.4±1.20µs ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12 1.00 30.8±0.89µs ? ?/sec 1.78 54.7±1.18µs ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3 1.38 38.0±1.03µs ? ?/sec 1.00 27.6±2.15µs ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100 1.00 104.7±1.10µs ? ?/sec 1.02 107.2±1.49µs ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12 1.01 66.4±0.90µs ? ?/sec 1.00 65.7±0.72µs ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3 1.00 27.6±0.60µs ? ?/sec 2.20 60.9±2.50µs ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100 1.00 115.6±0.95µs ? ?/sec 1.01 117.2±1.23µs ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12 1.00 62.3±0.77µs ? ?/sec 1.13 70.3±0.66µs ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3 1.00 28.2±1.10µs ? ?/sec 2.40 67.7±1.47µs ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100 1.00 85.4±1.32µs ? ?/sec 1.03 88.0±1.75µs ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12 1.00 33.8±0.63µs ? ?/sec 1.09 37.0±1.95µs ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3 1.00 33.5±0.98µs ? ?/sec 1.92 64.4±4.63µs ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100 1.00 76.2±0.43µs ? ?/sec 1.00 76.5±0.64µs ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12 1.87 18.0±0.07µs ? ?/sec 1.00 9.6±0.01µs ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3 1.89 18.2±0.04µs ? ?/sec 1.00 9.6±0.03µs ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100 1.00 70.4±0.44µs ? ?/sec 1.01 70.8±0.24µs ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12 2.28 22.2±0.08µs ? ?/sec 1.00 9.7±0.01µs ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3 2.28 22.2±0.11µs ? ?/sec 1.00 9.7±0.02µs ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100 1.01 77.0±0.27µs ? ?/sec 1.00 76.3±0.28µs ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12 1.17 18.4±0.12µs ? ?/sec 1.00 15.7±0.03µs ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3 1.21 19.2±0.14µs ? ?/sec 1.00 15.8±0.05µs ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100 1.00 70.6±0.29µs ? ?/sec 1.01 71.4±0.47µs ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12 1.42 22.4±0.07µs ? ?/sec 1.00 15.7±0.05µs ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3 1.43 22.3±0.06µs ? ?/sec 1.00 15.6±0.14µs ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0% 1.00 80.7±0.94µs ? ?/sec 1.07 86.1±1.20µs ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20% 1.00 62.3±2.40µs ? ?/sec 1.00 62.1±1.13µs ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0% 1.00 87.0±2.35µs ? ?/sec 1.03 89.3±2.49µs ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20% 1.05 89.5±4.46µs ? ?/sec 1.00 85.3±2.73µs ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0% 1.00 111.0±1.70µs ? ?/sec 1.03 113.9±1.77µs ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20% 1.04 122.5±4.31µs ? ?/sec 1.00 118.1±3.64µs ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0% 1.00 106.3±1.23µs ? ?/sec 1.05 111.9±0.94µs ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20% 1.00 76.0±2.06µs ? ?/sec 1.04 78.8±1.80µs ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0% 1.00 121.4±1.05µs ? ?/sec 1.01 123.1±2.13µs ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20% 1.05 73.4±2.33µs ? ?/sec 1.00 69.9±1.92µs ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0% 1.00 118.4±1.10µs ? ?/sec 1.02 121.2±1.20µs ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20% 1.04 117.4±1.68µs ? ?/sec 1.00 112.7±2.91µs ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0% 1.00 35.4±0.46µs ? ?/sec 1.04 36.9±0.38µs ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20% 1.02 31.9±0.17µs ? ?/sec 1.00 31.4±0.27µs ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0% 1.02 61.2±1.26µs ? ?/sec 1.00 60.2±0.74µs ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20% 1.10 65.0±1.04µs ? ?/sec 1.00 58.9±1.26µs ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0% 1.00 76.9±1.38µs ? ?/sec 1.00 76.7±1.31µs ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20% 1.09 109.0±1.90µs ? ?/sec 1.00 100.0±1.86µs ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0% 1.00 35.1±0.44µs ? ?/sec 1.05 36.8±0.36µs ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20% 1.02 32.4±0.33µs ? ?/sec 1.00 31.7±0.35µs ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0% 1.00 55.2±1.64µs ? ?/sec 1.02 56.3±1.65µs ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20% 1.13 58.9±0.95µs ? ?/sec 1.00 52.0±0.64µs ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0% 1.00 68.9±1.18µs ? ?/sec 1.01 69.9±2.62µs ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20% 1.13 105.8±1.70µs ? ?/sec 1.00 93.5±2.79µs ? ?/sec
in_list_cols/Int32/list=28/match=0%/nulls=0% 1.01 54.8±0.68µs ? ?/sec 1.00 54.3±0.24µs ? ?/sec
in_list_cols/Int32/list=28/match=0%/nulls=20% 1.00 72.3±0.48µs ? ?/sec 1.01 73.2±0.50µs ? ?/sec
in_list_cols/Int32/list=28/match=100%/nulls=0% 1.00 1887.6±7.97ns ? ?/sec 1.00 1880.6±6.16ns ? ?/sec
in_list_cols/Int32/list=28/match=100%/nulls=20% 1.00 72.2±0.51µs ? ?/sec 1.01 72.7±0.44µs ? ?/sec
in_list_cols/Int32/list=28/match=50%/nulls=0% 1.00 28.7±0.06µs ? ?/sec 1.00 28.8±0.13µs ? ?/sec
in_list_cols/Int32/list=28/match=50%/nulls=20% 1.00 71.5±0.27µs ? ?/sec 1.01 72.4±0.24µs ? ?/sec
in_list_cols/Int32/list=3/match=0%/nulls=0% 1.00 5.7±0.01µs ? ?/sec 1.00 5.7±0.01µs ? ?/sec
in_list_cols/Int32/list=3/match=0%/nulls=20% 1.00 7.1±0.01µs ? ?/sec 1.03 7.3±0.04µs ? ?/sec
in_list_cols/Int32/list=3/match=100%/nulls=0% 1.01 1882.5±5.17ns ? ?/sec 1.00 1871.0±5.27ns ? ?/sec
in_list_cols/Int32/list=3/match=100%/nulls=20% 1.00 7.1±0.02µs ? ?/sec 1.01 7.2±0.02µs ? ?/sec
in_list_cols/Int32/list=3/match=50%/nulls=0% 1.00 5.7±0.05µs ? ?/sec 1.00 5.7±0.01µs ? ?/sec
in_list_cols/Int32/list=3/match=50%/nulls=20% 1.00 7.1±0.02µs ? ?/sec 1.01 7.2±0.02µs ? ?/sec
in_list_cols/Int32/list=8/match=0%/nulls=0% 1.00 15.2±0.03µs ? ?/sec 1.00 15.2±0.02µs ? ?/sec
in_list_cols/Int32/list=8/match=0%/nulls=20% 1.00 19.8±0.06µs ? ?/sec 1.00 19.7±0.05µs ? ?/sec
in_list_cols/Int32/list=8/match=100%/nulls=0% 1.01 1880.8±5.46ns ? ?/sec 1.00 1867.4±11.36ns ? ?/sec
in_list_cols/Int32/list=8/match=100%/nulls=20% 1.01 19.8±0.05µs ? ?/sec 1.00 19.7±0.05µs ? ?/sec
in_list_cols/Int32/list=8/match=50%/nulls=0% 1.00 15.3±0.04µs ? ?/sec 1.00 15.2±0.05µs ? ?/sec
in_list_cols/Int32/list=8/match=50%/nulls=20% 1.00 19.8±0.04µs ? ?/sec 1.00 19.8±0.05µs ? ?/sec
in_list_cols/Utf8/list=28/match=0% 1.00 181.3±0.40µs ? ?/sec 1.00 180.4±0.46µs ? ?/sec
in_list_cols/Utf8/list=28/match=100% 1.05 740.1±1.83µs ? ?/sec 1.00 706.4±1.87µs ? ?/sec
in_list_cols/Utf8/list=28/match=50% 1.00 1148.5±2.04µs ? ?/sec 1.00 1154.2±1.86µs ? ?/sec
in_list_cols/Utf8/list=3/match=0% 1.00 18.9±0.03µs ? ?/sec 1.00 18.9±0.03µs ? ?/sec
in_list_cols/Utf8/list=3/match=100% 1.06 78.7±0.85µs ? ?/sec 1.00 73.9±0.34µs ? ?/sec
in_list_cols/Utf8/list=3/match=50% 1.00 100.1±0.72µs ? ?/sec 1.04 104.1±2.68µs ? ?/sec
in_list_cols/Utf8/list=8/match=0% 1.00 51.5±0.13µs ? ?/sec 1.00 51.6±0.29µs ? ?/sec
in_list_cols/Utf8/list=8/match=100% 1.05 210.3±0.76µs ? ?/sec 1.00 200.3±0.68µs ? ?/sec
in_list_cols/Utf8/list=8/match=50% 1.01 317.2±0.53µs ? ?/sec 1.00 314.8±1.81µs ? ?/sec

Resource Usage

in_list — base (merge-base)

MetricValue
Wall time310.1s
Peak memory44.8 MiB
Avg memory19.7 MiB
CPU user579.8s
CPU sys1.6s
Peak spill0 B

in_list — branch

MetricValue
Wall time305.1s
Peak memory42.3 MiB
Avg memory18.7 MiB
CPU user578.7s
CPU sys1.7s
Peak spill0 B

File an issue against this benchmark runner

@geoffreyclaude

Copy link
Copy Markdown
ContributorAuthor

run benchmark in_list_strategy

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance:c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5191695185-1456-pstns 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected

Comparing codex/in-list-byte-view-hashset (65b67ba) to db0c31b (merge-base) diff

Run configuration
run benchmark in_list_strategy

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance:c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing codex/in-list-byte-view-hashset (65b67ba) to db0c31b (merge-base) diff

Run configuration
run benchmark in_list_strategy
CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected
Details

group HEAD codex_in-list-byte-view-hashset
----- ---- -------------------------------
dictionary/i32/dict=10/list=16 1.00 7.9±0.01µs ? ?/sec 1.00 7.9±0.01µs ? ?/sec
dictionary/i32/dict=100/list=16 1.00 8.0±0.06µs ? ?/sec 1.00 8.0±0.01µs ? ?/sec
dictionary/i32/dict=100/list=16/NOT_IN 1.00 8.1±0.01µs ? ?/sec 1.00 8.1±0.00µs ? ?/sec
dictionary/i32/dict=100/list=4 1.00 8.0±0.01µs ? ?/sec 1.00 8.0±0.01µs ? ?/sec
dictionary/i32/dict=100/list=64 1.00 7.9±0.00µs ? ?/sec 1.00 8.0±0.07µs ? ?/sec
dictionary/i32/dict=1000/list=16 1.00 9.0±0.01µs ? ?/sec 1.00 9.0±0.01µs ? ?/sec
dictionary/utf8_long/dict=100/list=16 1.00 8.5±0.01µs ? ?/sec 1.00 8.5±0.01µs ? ?/sec
dictionary/utf8_short/dict=50/list=32 1.00 8.3±0.01µs ? ?/sec 1.00 8.3±0.01µs ? ?/sec
dictionary/utf8_short/dict=50/list=8 1.00 8.2±0.01µs ? ?/sec 1.00 8.2±0.01µs ? ?/sec
dictionary/utf8_short/dict=500/list=20 1.00 9.9±0.02µs ? ?/sec 1.00 9.8±0.01µs ? ?/sec
f32/large_list/list=64/match=0% 1.04 16.3±0.02µs ? ?/sec 1.00 15.7±0.01µs ? ?/sec
f32/large_list/list=64/match=50% 1.14 24.5±1.83µs ? ?/sec 1.00 21.5±0.25µs ? ?/sec
f32/small_list/list=32/match=0% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.01µs ? ?/sec
f32/small_list/list=32/match=50% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.01µs ? ?/sec
f32/small_list/list=4/match=0% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
f32/small_list/list=4/match=50% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
fixed_size_binary/fsb16/list=10000/match=0% 1.08 28.0±0.13µs ? ?/sec 1.00 25.9±0.07µs ? ?/sec
fixed_size_binary/fsb16/list=10000/match=50% 1.00 55.5±0.32µs ? ?/sec 1.06 58.7±0.46µs ? ?/sec
fixed_size_binary/fsb16/list=256/match=0% 1.03 25.4±0.05µs ? ?/sec 1.00 24.8±0.27µs ? ?/sec
fixed_size_binary/fsb16/list=256/match=50% 1.00 50.5±0.39µs ? ?/sec 1.03 52.1±0.59µs ? ?/sec
fixed_size_binary/fsb16/list=4/match=0% 1.02 24.0±0.02µs ? ?/sec 1.00 23.5±0.02µs ? ?/sec
fixed_size_binary/fsb16/list=4/match=50% 1.00 54.4±0.38µs ? ?/sec 1.02 55.4±0.61µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=0% 1.02 24.1±0.06µs ? ?/sec 1.00 23.6±0.02µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=50% 1.00 54.4±0.59µs ? ?/sec 1.01 54.9±0.63µs ? ?/sec
interval_month_day_nano/small_list/list=4/match=0% 1.00 12.2±0.01µs ? ?/sec 1.21 14.7±0.01µs ? ?/sec
interval_month_day_nano/small_list/list=4/match=50% 1.00 19.2±0.10µs ? ?/sec 1.08 20.8±0.06µs ? ?/sec
narrow_integer/f16/list=256/match=0% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=256/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=4/match=0% 1.00 3.7±0.00µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/f16/list=4/match=50% 1.00 3.7±0.01µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/f16/list=64/match=0% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=64/match=50% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=256/match=0% 1.01 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=256/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=4/match=0% 1.00 3.7±0.00µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/i16/list=4/match=50% 1.00 3.7±0.00µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/i16/list=64/match=0% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=64/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/u8/list=16/match=0% 1.00 4.7±0.00µs ? ?/sec 1.00 4.7±0.00µs ? ?/sec
narrow_integer/u8/list=16/match=50% 1.00 4.7±0.01µs ? ?/sec 1.00 4.7±0.01µs ? ?/sec
narrow_integer/u8/list=4/match=0% 1.00 3.4±0.02µs ? ?/sec 1.00 3.4±0.01µs ? ?/sec
narrow_integer/u8/list=4/match=50% 1.00 3.4±0.01µs ? ?/sec 1.00 3.4±0.01µs ? ?/sec
nulls/narrow_integer/u8/list=16/match=50%/nulls=20% 1.00 4.8±0.00µs ? ?/sec 1.00 4.8±0.00µs ? ?/sec
nulls/primitive/i32/large_list/list=64/match=50%/nulls=20% 1.28 22.1±0.15µs ? ?/sec 1.00 17.3±0.13µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20% 1.00 9.2±0.02µs ? ?/sec 1.00 9.2±0.02µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20%/NOT_IN 1.00 9.3±0.02µs ? ?/sec 1.00 9.4±0.02µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=50% 1.00 9.2±0.02µs ? ?/sec 1.00 9.2±0.02µs ? ?/sec
nulls/utf8/long_24b/list=16/match=50%/nulls=20% 1.00 71.1±0.28µs ? ?/sec 1.01 72.1±0.34µs ? ?/sec
nulls/utf8/short_8b/list=16/match=50%/nulls=20% 1.01 62.2±0.42µs ? ?/sec 1.00 61.7±0.46µs ? ?/sec
nulls/utf8view/long_24b/list=16/match=50%/nulls=20% 1.00 86.4±0.18µs ? ?/sec 1.01 87.2±0.22µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20% 1.52 38.5±0.14µs ? ?/sec 1.00 25.3±0.37µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20%/NOT_IN 1.65 38.7±0.17µs ? ?/sec 1.00 23.5±0.33µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=50% 1.81 28.9±0.11µs ? ?/sec 1.00 15.9±0.12µs ? ?/sec
primitive/i32/large_list/list=256/match=0% 1.18 16.0±0.09µs ? ?/sec 1.00 13.6±0.04µs ? ?/sec
primitive/i32/large_list/list=256/match=50% 1.03 24.3±0.44µs ? ?/sec 1.00 23.7±0.36µs ? ?/sec
primitive/i32/large_list/list=64/match=0% 1.16 16.1±0.06µs ? ?/sec 1.00 14.0±0.30µs ? ?/sec
primitive/i32/large_list/list=64/match=50% 1.14 25.1±0.19µs ? ?/sec 1.00 21.9±0.81µs ? ?/sec
primitive/i32/small_list/list=16/match=50%/NOT_IN 1.00 9.2±0.02µs ? ?/sec 1.00 9.2±0.02µs ? ?/sec
primitive/i32/small_list/list=32/match=0% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.02µs ? ?/sec
primitive/i32/small_list/list=32/match=50% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.05µs ? ?/sec
primitive/i32/small_list/list=4/match=0% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
primitive/i32/small_list/list=4/match=50% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
primitive/i64/large_list/list=128/match=0% 1.00 12.4±0.02µs ? ?/sec 1.03 12.8±0.04µs ? ?/sec
primitive/i64/large_list/list=128/match=50% 1.35 22.5±3.07µs ? ?/sec 1.00 16.6±0.09µs ? ?/sec
primitive/i64/large_list/list=32/match=0% 1.00 12.6±0.10µs ? ?/sec 1.00 12.6±0.02µs ? ?/sec
primitive/i64/large_list/list=32/match=50% 1.53 25.4±0.21µs ? ?/sec 1.00 16.6±0.10µs ? ?/sec
primitive/i64/small_list/list=16/match=0% 1.00 16.7±0.02µs ? ?/sec 1.00 16.7±0.01µs ? ?/sec
primitive/i64/small_list/list=16/match=50% 1.00 16.7±0.02µs ? ?/sec 1.00 16.7±0.01µs ? ?/sec
primitive/i64/small_list/list=4/match=0% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.01µs ? ?/sec
primitive/i64/small_list/list=4/match=50% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.00µs ? ?/sec
timestamp_ns/large_list/list=32/match=0% 1.00 17.9±0.24µs ? ?/sec 1.02 18.3±0.02µs ? ?/sec
timestamp_ns/large_list/list=32/match=50% 1.08 33.3±0.25µs ? ?/sec 1.00 31.0±1.34µs ? ?/sec
timestamp_ns/small_list/list=16/match=0% 1.00 16.6±0.02µs ? ?/sec 1.00 16.7±0.02µs ? ?/sec
timestamp_ns/small_list/list=16/match=50% 1.00 16.7±0.01µs ? ?/sec 1.00 16.7±0.02µs ? ?/sec
timestamp_ns/small_list/list=4/match=0% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.00µs ? ?/sec
timestamp_ns/small_list/list=4/match=50% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.00µs ? ?/sec
utf8/long_24b/list=256/match=0% 1.01 35.1±0.03µs ? ?/sec 1.00 34.6±0.04µs ? ?/sec
utf8/long_24b/list=256/match=50% 1.00 69.7±0.35µs ? ?/sec 1.03 72.1±0.31µs ? ?/sec
utf8/long_24b/list=4/match=0% 1.00 34.4±0.03µs ? ?/sec 1.00 34.5±0.02µs ? ?/sec
utf8/long_24b/list=4/match=50% 1.00 71.4±0.42µs ? ?/sec 1.03 73.4±0.26µs ? ?/sec
utf8/long_24b/list=64/match=0% 1.01 34.8±0.03µs ? ?/sec 1.00 34.3±0.07µs ? ?/sec
utf8/long_24b/list=64/match=50% 1.00 68.6±0.26µs ? ?/sec 1.06 72.5±0.33µs ? ?/sec
utf8/mixed_len/list=16/match=0% 1.00 35.3±0.10µs ? ?/sec 1.12 39.6±0.08µs ? ?/sec
utf8/mixed_len/list=16/match=50% 1.00 95.8±1.05µs ? ?/sec 1.09 104.5±0.88µs ? ?/sec
utf8/mixed_len/list=64/match=0% 1.00 38.8±0.13µs ? ?/sec 1.05 40.5±0.08µs ? ?/sec
utf8/mixed_len/list=64/match=50% 1.00 103.2±0.90µs ? ?/sec 1.12 115.7±0.65µs ? ?/sec
utf8/shared_prefix/pfx=12/list=32/match=50% 1.00 70.9±1.01µs ? ?/sec 1.02 72.2±0.34µs ? ?/sec
utf8/short_8b/list=16/match=50%/NOT_IN 1.07 67.1±0.53µs ? ?/sec 1.00 62.6±0.47µs ? ?/sec
utf8/short_8b/list=256/match=0% 1.00 27.3±0.06µs ? ?/sec 1.01 27.7±0.10µs ? ?/sec
utf8/short_8b/list=256/match=50% 1.01 65.0±0.45µs ? ?/sec 1.00 64.2±0.44µs ? ?/sec
utf8/short_8b/list=4/match=0% 1.00 27.3±0.03µs ? ?/sec 1.03 28.1±0.03µs ? ?/sec
utf8/short_8b/list=4/match=50% 1.04 67.0±0.40µs ? ?/sec 1.00 64.2±0.36µs ? ?/sec
utf8/short_8b/list=64/match=0% 1.02 27.7±0.01µs ? ?/sec 1.00 27.1±0.11µs ? ?/sec
utf8/short_8b/list=64/match=50% 1.06 66.3±0.27µs ? ?/sec 1.00 62.7±0.40µs ? ?/sec
utf8view/len_12b/list=16/match=0% 1.32 18.9±0.03µs ? ?/sec 1.00 14.3±0.01µs ? ?/sec
utf8view/len_12b/list=16/match=50% 2.09 40.0±0.25µs ? ?/sec 1.00 19.2±0.30µs ? ?/sec
utf8view/len_12b/list=64/match=0% 1.34 19.0±0.02µs ? ?/sec 1.00 14.2±0.02µs ? ?/sec
utf8view/len_12b/list=64/match=50% 1.73 39.7±0.19µs ? ?/sec 1.00 22.9±3.32µs ? ?/sec
utf8view/long_24b/list=16/match=0% 1.00 40.9±0.03µs ? ?/sec 1.02 41.6±0.07µs ? ?/sec
utf8view/long_24b/list=16/match=50% 1.00 85.1±0.29µs ? ?/sec 1.02 86.5±0.51µs ? ?/sec
utf8view/long_24b/list=256/match=0% 1.00 40.8±0.03µs ? ?/sec 1.00 40.8±0.08µs ? ?/sec
utf8view/long_24b/list=256/match=50% 1.00 84.9±0.37µs ? ?/sec 1.01 85.9±0.38µs ? ?/sec
utf8view/long_24b/list=4/match=0% 1.00 40.8±0.05µs ? ?/sec 1.02 41.4±0.04µs ? ?/sec
utf8view/long_24b/list=4/match=50% 1.00 84.1±0.16µs ? ?/sec 1.02 85.7±0.33µs ? ?/sec
utf8view/long_24b/list=64/match=0% 1.00 41.0±0.09µs ? ?/sec 1.00 40.8±0.03µs ? ?/sec
utf8view/long_24b/list=64/match=50% 1.00 84.1±0.40µs ? ?/sec 1.01 84.9±0.34µs ? ?/sec
utf8view/mixed_len/list=16/match=0% 1.00 29.9±0.05µs ? ?/sec 1.06 31.7±0.12µs ? ?/sec
utf8view/mixed_len/list=16/match=50% 1.04 69.4±0.49µs ? ?/sec 1.00 66.9±0.27µs ? ?/sec
utf8view/mixed_len/list=64/match=0% 1.00 34.3±0.12µs ? ?/sec 1.03 35.3±0.16µs ? ?/sec
utf8view/mixed_len/list=64/match=50% 1.03 83.6±0.53µs ? ?/sec 1.00 80.8±0.60µs ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=0% 1.00 42.8±0.05µs ? ?/sec 1.00 42.8±0.12µs ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=50% 1.00 84.5±0.28µs ? ?/sec 1.05 89.1±0.98µs ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=0% 1.03 42.0±0.09µs ? ?/sec 1.00 40.8±0.13µs ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=50% 1.00 84.2±0.39µs ? ?/sec 1.01 85.3±0.20µs ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=0% 1.02 30.7±0.08µs ? ?/sec 1.00 30.2±0.05µs ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=50% 1.00 72.5±0.36µs ? ?/sec 1.01 73.2±0.12µs ? ?/sec
utf8view/short_8b/list=16/match=0% 1.36 19.3±0.20µs ? ?/sec 1.00 14.2±0.02µs ? ?/sec
utf8view/short_8b/list=16/match=50% 1.57 39.3±0.15µs ? ?/sec 1.00 25.0±1.68µs ? ?/sec
utf8view/short_8b/list=256/match=0% 1.29 19.4±0.05µs ? ?/sec 1.00 15.0±0.20µs ? ?/sec
utf8view/short_8b/list=256/match=50% 1.43 38.3±0.14µs ? ?/sec 1.00 26.8±1.40µs ? ?/sec
utf8view/short_8b/list=4/match=0% 1.65 19.0±0.03µs ? ?/sec 1.00 11.5±0.05µs ? ?/sec
utf8view/short_8b/list=4/match=50% 3.46 39.7±0.21µs ? ?/sec 1.00 11.5±0.01µs ? ?/sec
utf8view/short_8b/list=64/match=0% 1.37 19.6±0.02µs ? ?/sec 1.00 14.3±0.01µs ? ?/sec
utf8view/short_8b/list=64/match=50% 1.48 38.8±0.19µs ? ?/sec 1.00 26.3±0.31µs ? ?/sec

Resource Usage

in_list_strategy — base (merge-base)

MetricValue
Wall time1330.3s
Peak memory40.8 MiB
Avg memory31.3 MiB
CPU user1537.5s
CPU sys1.3s
Peak spill0 B

in_list_strategy — branch

MetricValue
Wall time1300.3s
Peak memory43.7 MiB
Avg memory34.3 MiB
CPU user1511.6s
CPU sys1.3s
Peak spill0 B

File an issue against this benchmark runner

@geoffreyclaude
geoffreyclaudeforce-pushed the codex/in-list-byte-view-hashset branch from 65b67ba to a44ee0dCompareAugust 6, 2026 16:01
@geoffreyclaudegeoffreyclaude changed the title IN LIST: optimize Utf8View and BinaryView filters with standard hash setsIN LIST: optimize Utf8View and BinaryView filtersAug 7, 2026
@geoffreyclaude
geoffreyclaudeforce-pushed the codex/in-list-byte-view-hashset branch from a44ee0d to b0443b6CompareAugust 9, 2026 06:21
@geoffreyclaude
geoffreyclaudeforce-pushed the codex/in-list-byte-view-hashset branch 10 times, most recently from 61cc7a6 to 156d76bCompareAugust 11, 2026 16:29
@github-actionsgithub-actionsBot added auto detected api change Auto detected API change and removed auto detected api change Auto detected API change labels Aug 11, 2026
@geoffreyclaude
geoffreyclaudeforce-pushed the codex/in-list-byte-view-hashset branch 2 times, most recently from 6a5284e to f8ae3adCompareAugust 12, 2026 10:18
@geoffreyclaude

Copy link
Copy Markdown
ContributorAuthor

run benchmark in_list_strategy

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance:c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5265996536-1569-lm87v 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected

Comparing codex/in-list-byte-view-hashset (f8ae3ad) to 426b351 (merge-base) diff

Run configuration
run benchmark in_list_strategy

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance:c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing codex/in-list-byte-view-hashset (f8ae3ad) to 426b351 (merge-base) diff

Run configuration
run benchmark in_list_strategy
CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected
Details

group HEAD codex_in-list-byte-view-hashset
----- ---- -------------------------------
dictionary/i32/dict=10/list=16 1.01 7.9±0.02µs ? ?/sec 1.00 7.8±0.01µs ? ?/sec
dictionary/i32/dict=100/list=16 1.01 8.0±0.02µs ? ?/sec 1.00 7.9±0.01µs ? ?/sec
dictionary/i32/dict=100/list=16/NOT_IN 1.01 8.1±0.01µs ? ?/sec 1.00 8.0±0.01µs ? ?/sec
dictionary/i32/dict=100/list=4 1.01 7.9±0.01µs ? ?/sec 1.00 7.9±0.00µs ? ?/sec
dictionary/i32/dict=100/list=64 1.01 7.9±0.01µs ? ?/sec 1.00 7.9±0.05µs ? ?/sec
dictionary/i32/dict=1000/list=16 1.01 9.0±0.08µs ? ?/sec 1.00 8.9±0.00µs ? ?/sec
dictionary/utf8_long/dict=100/list=16 1.01 8.5±0.03µs ? ?/sec 1.00 8.4±0.01µs ? ?/sec
dictionary/utf8_short/dict=50/list=32 1.01 8.3±0.05µs ? ?/sec 1.00 8.2±0.01µs ? ?/sec
dictionary/utf8_short/dict=50/list=8 1.01 8.2±0.01µs ? ?/sec 1.00 8.1±0.01µs ? ?/sec
dictionary/utf8_short/dict=500/list=20 1.01 9.9±0.02µs ? ?/sec 1.00 9.8±0.01µs ? ?/sec
f32/large_list/list=64/match=0% 1.00 16.0±0.02µs ? ?/sec 1.02 16.3±0.02µs ? ?/sec
f32/large_list/list=64/match=50% 1.00 18.3±0.06µs ? ?/sec 1.55 28.2±0.46µs ? ?/sec
f32/small_list/list=32/match=0% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.01µs ? ?/sec
f32/small_list/list=32/match=50% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.01µs ? ?/sec
f32/small_list/list=4/match=0% 1.00 3.5±0.00µs ? ?/sec 1.00 3.6±0.00µs ? ?/sec
f32/small_list/list=4/match=50% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
fixed_size_binary/fsb1/list=16/match=0% 1.00 4.8±0.01µs ? ?/sec
fixed_size_binary/fsb1/list=16/match=50% 1.00 4.7±0.00µs ? ?/sec
fixed_size_binary/fsb16/list=10000/match=0% 1.53 28.0±0.03µs ? ?/sec 1.00 18.3±0.07µs ? ?/sec
fixed_size_binary/fsb16/list=10000/match=50% 2.31 54.2±0.42µs ? ?/sec 1.00 23.4±0.15µs ? ?/sec
fixed_size_binary/fsb16/list=256/match=0% 1.59 25.6±0.05µs ? ?/sec 1.00 16.1±0.01µs ? ?/sec
fixed_size_binary/fsb16/list=256/match=50% 1.89 49.4±0.81µs ? ?/sec 1.00 26.2±1.90µs ? ?/sec
fixed_size_binary/fsb16/list=4/match=0% 2.07 24.1±0.25µs ? ?/sec 1.00 11.7±0.01µs ? ?/sec
fixed_size_binary/fsb16/list=4/match=50% 4.60 53.6±0.77µs ? ?/sec 1.00 11.7±0.01µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=0% 1.50 23.9±0.05µs ? ?/sec 1.00 15.9±0.02µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=0%/input=unaligned 1.00 18.0±0.01µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=50% 1.97 53.0±0.61µs ? ?/sec 1.00 26.9±0.27µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=50%/input=unaligned 1.00 29.5±0.30µs ? ?/sec
fixed_size_binary/fsb2/list=64/match=0% 1.00 5.4±0.00µs ? ?/sec
fixed_size_binary/fsb2/list=64/match=50% 1.00 5.3±0.00µs ? ?/sec
interval_month_day_nano/small_list/list=4/match=0% 1.00 12.2±0.01µs ? ?/sec 1.00 12.2±0.03µs ? ?/sec
interval_month_day_nano/small_list/list=4/match=50% 1.00 19.2±0.09µs ? ?/sec 1.01 19.5±0.08µs ? ?/sec
narrow_integer/f16/list=256/match=0% 1.01 5.3±0.03µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=256/match=50% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=4/match=0% 1.00 3.7±0.00µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/f16/list=4/match=50% 1.00 3.7±0.01µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/f16/list=64/match=0% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=64/match=50% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=256/match=0% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.01µs ? ?/sec
narrow_integer/i16/list=256/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.01µs ? ?/sec
narrow_integer/i16/list=4/match=0% 1.00 3.7±0.01µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/i16/list=4/match=50% 1.00 3.7±0.01µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/i16/list=64/match=0% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=64/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/u8/list=16/match=0% 1.00 4.7±0.00µs ? ?/sec 1.00 4.7±0.00µs ? ?/sec
narrow_integer/u8/list=16/match=50% 1.00 4.7±0.01µs ? ?/sec 1.00 4.7±0.00µs ? ?/sec
narrow_integer/u8/list=4/match=0% 1.00 3.4±0.01µs ? ?/sec 1.00 3.4±0.01µs ? ?/sec
narrow_integer/u8/list=4/match=50% 1.00 3.4±0.01µs ? ?/sec 1.00 3.4±0.01µs ? ?/sec
nulls/narrow_integer/u8/list=16/match=50%/nulls=20% 1.00 4.8±0.01µs ? ?/sec 1.00 4.8±0.00µs ? ?/sec
nulls/primitive/i32/large_list/list=64/match=50%/nulls=20% 1.03 23.1±0.88µs ? ?/sec 1.00 22.3±0.19µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20% 1.00 9.2±0.01µs ? ?/sec 1.00 9.2±0.02µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20%/NOT_IN 1.00 9.3±0.01µs ? ?/sec 1.00 9.3±0.02µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=50% 1.00 9.2±0.02µs ? ?/sec 1.00 9.2±0.02µs ? ?/sec
nulls/utf8/long_24b/list=16/match=50%/nulls=20% 1.01 70.4±0.41µs ? ?/sec 1.00 69.5±0.28µs ? ?/sec
nulls/utf8/short_8b/list=16/match=50%/nulls=20% 1.03 62.8±0.59µs ? ?/sec 1.00 60.8±0.47µs ? ?/sec
nulls/utf8view/long_24b/list=16/match=50%/nulls=20% 1.00 87.2±0.22µs ? ?/sec 1.00 87.2±0.22µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20% 1.44 38.7±0.18µs ? ?/sec 1.00 26.9±0.42µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20%/NOT_IN 1.39 38.7±0.22µs ? ?/sec 1.00 27.9±0.15µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=50% 1.65 29.0±0.15µs ? ?/sec 1.00 17.6±0.23µs ? ?/sec
primitive/decimal128/large_list/list=5/match=0% 1.00 16.0±0.02µs ? ?/sec
primitive/decimal128/large_list/list=5/match=50% 1.00 27.1±0.28µs ? ?/sec
primitive/decimal128/large_list/list=64/match=0% 1.00 16.0±0.02µs ? ?/sec
primitive/decimal128/large_list/list=64/match=50% 1.00 27.1±0.38µs ? ?/sec
primitive/i32/large_list/list=256/match=0% 1.00 14.7±0.00µs ? ?/sec 1.02 15.0±0.03µs ? ?/sec
primitive/i32/large_list/list=256/match=50% 1.44 24.0±0.29µs ? ?/sec 1.00 16.7±0.47µs ? ?/sec
primitive/i32/large_list/list=64/match=0% 1.06 16.0±0.05µs ? ?/sec 1.00 15.0±0.03µs ? ?/sec
primitive/i32/large_list/list=64/match=50% 1.00 21.0±2.50µs ? ?/sec 1.10 23.0±0.95µs ? ?/sec
primitive/i32/small_list/list=16/match=50%/NOT_IN 1.00 9.2±0.02µs ? ?/sec 1.00 9.2±0.01µs ? ?/sec
primitive/i32/small_list/list=32/match=0% 1.00 16.4±0.02µs ? ?/sec 1.00 16.4±0.01µs ? ?/sec
primitive/i32/small_list/list=32/match=50% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.01µs ? ?/sec
primitive/i32/small_list/list=4/match=0% 1.00 3.5±0.01µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
primitive/i32/small_list/list=4/match=50% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
primitive/i64/large_list/list=128/match=0% 1.00 12.7±0.03µs ? ?/sec 1.01 12.8±0.09µs ? ?/sec
primitive/i64/large_list/list=128/match=50% 1.34 24.3±0.17µs ? ?/sec 1.00 18.1±0.26µs ? ?/sec
primitive/i64/large_list/list=32/match=0% 1.00 12.5±0.02µs ? ?/sec 1.04 12.9±0.02µs ? ?/sec
primitive/i64/large_list/list=32/match=50% 1.08 25.0±0.20µs ? ?/sec 1.00 23.2±0.86µs ? ?/sec
primitive/i64/small_list/list=16/match=0% 1.00 16.6±0.01µs ? ?/sec 1.00 16.7±0.02µs ? ?/sec
primitive/i64/small_list/list=16/match=50% 1.00 16.7±0.01µs ? ?/sec 1.00 16.7±0.02µs ? ?/sec
primitive/i64/small_list/list=4/match=0% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.00µs ? ?/sec
primitive/i64/small_list/list=4/match=50% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.00µs ? ?/sec
timestamp_ns/large_list/list=32/match=0% 1.00 17.7±0.01µs ? ?/sec 1.00 17.6±0.04µs ? ?/sec
timestamp_ns/large_list/list=32/match=50% 1.08 33.5±0.26µs ? ?/sec 1.00 31.2±0.28µs ? ?/sec
timestamp_ns/small_list/list=16/match=0% 1.00 16.7±0.02µs ? ?/sec 1.00 16.6±0.02µs ? ?/sec
timestamp_ns/small_list/list=16/match=50% 1.00 16.7±0.02µs ? ?/sec 1.00 16.6±0.03µs ? ?/sec
timestamp_ns/small_list/list=4/match=0% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.01µs ? ?/sec
timestamp_ns/small_list/list=4/match=50% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.00µs ? ?/sec
utf8/long_24b/list=256/match=0% 1.02 34.6±0.02µs ? ?/sec 1.00 33.9±0.04µs ? ?/sec
utf8/long_24b/list=256/match=50% 1.00 69.8±0.25µs ? ?/sec 1.02 71.2±0.41µs ? ?/sec
utf8/long_24b/list=4/match=0% 1.00 34.2±0.10µs ? ?/sec 1.02 34.8±0.09µs ? ?/sec
utf8/long_24b/list=4/match=50% 1.00 71.3±0.45µs ? ?/sec 1.00 71.4±0.26µs ? ?/sec
utf8/long_24b/list=64/match=0% 1.01 34.6±0.08µs ? ?/sec 1.00 34.2±0.35µs ? ?/sec
utf8/long_24b/list=64/match=50% 1.04 72.0±2.05µs ? ?/sec 1.00 69.2±0.48µs ? ?/sec
utf8/mixed_len/list=16/match=0% 1.01 35.8±0.13µs ? ?/sec 1.00 35.5±0.15µs ? ?/sec
utf8/mixed_len/list=16/match=50% 1.00 94.3±2.07µs ? ?/sec 1.01 94.9±3.05µs ? ?/sec
utf8/mixed_len/list=64/match=0% 1.02 39.0±0.12µs ? ?/sec 1.00 38.3±0.07µs ? ?/sec
utf8/mixed_len/list=64/match=50% 1.00 102.9±0.94µs ? ?/sec 1.00 103.1±0.92µs ? ?/sec
utf8/shared_prefix/pfx=12/list=32/match=50% 1.00 70.9±0.66µs ? ?/sec 1.00 71.0±0.43µs ? ?/sec
utf8/short_8b/list=16/match=50%/NOT_IN 1.03 65.2±0.35µs ? ?/sec 1.00 63.3±0.32µs ? ?/sec
utf8/short_8b/list=256/match=0% 1.02 27.3±0.03µs ? ?/sec 1.00 26.8±0.15µs ? ?/sec
utf8/short_8b/list=256/match=50% 1.03 65.8±0.35µs ? ?/sec 1.00 63.9±0.73µs ? ?/sec
utf8/short_8b/list=4/match=0% 1.03 27.4±0.20µs ? ?/sec 1.00 26.7±0.03µs ? ?/sec
utf8/short_8b/list=4/match=50% 1.01 66.0±0.84µs ? ?/sec 1.00 65.0±0.48µs ? ?/sec
utf8/short_8b/list=64/match=0% 1.04 27.7±0.04µs ? ?/sec 1.00 26.6±0.06µs ? ?/sec
utf8/short_8b/list=64/match=50% 1.05 65.5±0.46µs ? ?/sec 1.00 62.2±0.48µs ? ?/sec
utf8view/len_12b/list=16/match=0% 1.14 19.0±0.04µs ? ?/sec 1.00 16.7±0.02µs ? ?/sec
utf8view/len_12b/list=16/match=50% 1.46 40.3±0.20µs ? ?/sec 1.00 27.7±0.20µs ? ?/sec
utf8view/len_12b/list=64/match=0% 1.19 18.9±0.02µs ? ?/sec 1.00 15.9±0.03µs ? ?/sec
utf8view/len_12b/list=64/match=50% 1.63 40.5±0.19µs ? ?/sec 1.00 24.9±2.70µs ? ?/sec
utf8view/long_24b/list=16/match=0% 1.01 41.9±0.05µs ? ?/sec 1.00 41.4±0.40µs ? ?/sec
utf8view/long_24b/list=16/match=50% 1.00 84.9±0.43µs ? ?/sec 1.01 86.1±0.27µs ? ?/sec
utf8view/long_24b/list=256/match=0% 1.01 41.2±0.19µs ? ?/sec 1.00 41.0±0.29µs ? ?/sec
utf8view/long_24b/list=256/match=50% 1.00 85.3±0.20µs ? ?/sec 1.00 85.3±0.65µs ? ?/sec
utf8view/long_24b/list=4/match=0% 1.00 40.9±0.10µs ? ?/sec 1.00 41.0±0.08µs ? ?/sec
utf8view/long_24b/list=4/match=50% 1.00 84.8±0.18µs ? ?/sec 1.02 86.2±0.35µs ? ?/sec
utf8view/long_24b/list=64/match=0% 1.01 41.1±0.04µs ? ?/sec 1.00 40.9±0.10µs ? ?/sec
utf8view/long_24b/list=64/match=50% 1.01 85.7±0.48µs ? ?/sec 1.00 85.1±0.46µs ? ?/sec
utf8view/mixed_len/list=16/match=0% 1.00 30.0±0.06µs ? ?/sec 1.01 30.3±0.09µs ? ?/sec
utf8view/mixed_len/list=16/match=50% 1.00 69.1±0.32µs ? ?/sec 1.03 70.9±0.46µs ? ?/sec
utf8view/mixed_len/list=64/match=0% 1.00 34.0±0.10µs ? ?/sec 1.01 34.3±0.15µs ? ?/sec
utf8view/mixed_len/list=64/match=50% 1.01 83.7±0.55µs ? ?/sec 1.00 82.8±0.41µs ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=0% 1.00 42.7±0.07µs ? ?/sec 1.02 43.4±0.25µs ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=50% 1.01 85.2±0.38µs ? ?/sec 1.00 84.5±0.29µs ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=0% 1.02 42.0±0.10µs ? ?/sec 1.00 41.1±0.21µs ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=50% 1.00 85.4±0.15µs ? ?/sec 1.00 85.0±0.37µs ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=0% 1.02 30.6±0.04µs ? ?/sec 1.00 29.9±0.04µs ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=50% 1.00 70.6±0.26µs ? ?/sec 1.02 71.8±0.25µs ? ?/sec
utf8view/short_8b/list=16/match=0% 1.19 19.2±0.02µs ? ?/sec 1.00 16.1±0.01µs ? ?/sec
utf8view/short_8b/list=16/match=50% 1.43 39.7±0.18µs ? ?/sec 1.00 27.8±0.15µs ? ?/sec
utf8view/short_8b/list=256/match=0% 1.11 19.6±0.06µs ? ?/sec 1.00 17.6±0.09µs ? ?/sec
utf8view/short_8b/list=256/match=50% 1.38 38.1±0.26µs ? ?/sec 1.00 27.6±0.67µs ? ?/sec
utf8view/short_8b/list=4/match=0% 1.65 19.0±0.05µs ? ?/sec 1.00 11.5±0.01µs ? ?/sec
utf8view/short_8b/list=4/match=50% 3.48 39.9±0.36µs ? ?/sec 1.00 11.5±0.01µs ? ?/sec
utf8view/short_8b/list=64/match=0% 1.23 19.6±0.05µs ? ?/sec 1.00 16.0±0.03µs ? ?/sec
utf8view/short_8b/list=64/match=50% 1.37 38.6±0.19µs ? ?/sec 1.00 28.1±0.32µs ? ?/sec

Resource Usage

in_list_strategy — base (merge-base)

MetricValue
Wall time1330.3s
Peak memory41.3 MiB
Avg memory32.1 MiB
CPU user1535.1s
CPU sys1.3s
Peak spill0 B

in_list_strategy — branch

MetricValue
Wall time1455.3s
Peak memory41.1 MiB
Avg memory30.8 MiB
CPU user1635.1s
CPU sys1.4s
Peak spill0 B

File an issue against this benchmark runner

@alamb

Copy link
Copy Markdown
Contributor

I noticed this is marked as draft -- please ping me when ready to review

@geoffreyclaude
geoffreyclaudeforce-pushed the codex/in-list-byte-view-hashset branch 7 times, most recently from 854fa0b to dab222aCompareAugust 13, 2026 10:14
geoffreyclaudeand others added 6 commits August 13, 2026 12:40
Use PrimitiveHashSetFilter<T, K> for integer and floating-point arrays. Integer filters keep their native key type by default; Float32 and Float64 use their existing bitwise wrapper keys, preserving signed-zero and NaN-payload behavior.
The key type and conversion are selected statically, with no function pointer or dynamic dispatch in the lookup loop. Filter selection, dictionary handling, null handling, IN, and NOT IN behavior remain unchanged. Decimal128 routing remains in the following commit.
Route Decimal128 lists above the branchless cutoff through PrimitiveHashSetFilter, replacing the ArrayStaticFilter fallback.
@geoffreyclaude
geoffreyclaudeforce-pushed the codex/in-list-byte-view-hashset branch from dab222a to cc8aacfCompareAugust 13, 2026 10:46
Treat inline Utf8View and BinaryView values as 128-bit primitive keys and pass them to the shared primitive filter selector. This reuses direct comparisons for short lists and the primitive hash-set path for larger lists without reading backing buffers.
Lists containing a non-inline value continue to use the general filter. Exact view types, dictionaries, slices, nulls, IN, and NOT IN keep their existing behavior.
@geoffreyclaude
geoffreyclaudeforce-pushed the codex/in-list-byte-view-hashset branch from cc8aacf to 00dd083CompareAugust 13, 2026 11:42
@geoffreyclaude

Copy link
Copy Markdown
ContributorAuthor

run benchmark in_list_strategy
baseline:
ref: 7ff49f9
changed:
ref: 00dd083

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance:c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5279945938-1588-j8mp7 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected

Comparing 00dd083 (00dd083) to 7ff49f9diff

Run configuration
run benchmark in_list_strategybaseline:
ref: "7ff49f94d14f73151a55f59314247c4c223073f2"changed:
ref: "00dd083e02da959679b1b5996f9b64cafe2cff75"

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance:c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing 00dd083 (00dd083) to 7ff49f9diff

Run configuration
run benchmark in_list_strategybaseline:
ref: "7ff49f94d14f73151a55f59314247c4c223073f2"changed:
ref: "00dd083e02da959679b1b5996f9b64cafe2cff75"
CPU Details (lscpu)
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: ARM
Model name: Neoverse-V2
Model: 1
Thread(s) per core: 1
Core(s) per cluster: 16
Socket(s): -
Cluster(s): 1
Stepping: r0p1
BogoMIPS: 2000.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache: 1 MiB (16 instances)
L1i cache: 1 MiB (16 instances)
L2 cache: 32 MiB (16 instances)
L3 cache: 80 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-15
Vulnerability Gather data sampling: Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Mitigation; CSV2, BHB
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected
Details

group HEAD codex_in-list-byte-view-hashset
----- ---- -------------------------------
dictionary/i32/dict=10/list=16 1.00 7.8±0.01µs ? ?/sec 1.00 7.9±0.04µs ? ?/sec
dictionary/i32/dict=100/list=16 1.00 8.0±0.06µs ? ?/sec 1.00 8.0±0.00µs ? ?/sec
dictionary/i32/dict=100/list=16/NOT_IN 1.00 8.0±0.01µs ? ?/sec 1.00 8.0±0.01µs ? ?/sec
dictionary/i32/dict=100/list=4 1.00 7.9±0.01µs ? ?/sec 1.00 7.9±0.05µs ? ?/sec
dictionary/i32/dict=100/list=64 1.00 7.9±0.00µs ? ?/sec 1.00 7.9±0.04µs ? ?/sec
dictionary/i32/dict=1000/list=16 1.00 8.9±0.01µs ? ?/sec 1.00 9.0±0.01µs ? ?/sec
dictionary/utf8_long/dict=100/list=16 1.00 8.4±0.00µs ? ?/sec 1.00 8.4±0.00µs ? ?/sec
dictionary/utf8_short/dict=50/list=32 1.00 8.2±0.00µs ? ?/sec 1.00 8.2±0.01µs ? ?/sec
dictionary/utf8_short/dict=50/list=8 1.01 8.2±0.03µs ? ?/sec 1.00 8.1±0.01µs ? ?/sec
dictionary/utf8_short/dict=500/list=20 1.00 9.8±0.01µs ? ?/sec 1.00 9.8±0.01µs ? ?/sec
f32/large_list/list=64/match=0% 1.00 16.0±0.01µs ? ?/sec 1.01 16.1±0.03µs ? ?/sec
f32/large_list/list=64/match=50% 1.00 22.0±2.91µs ? ?/sec 1.30 28.6±0.17µs ? ?/sec
f32/small_list/list=32/match=0% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.03µs ? ?/sec
f32/small_list/list=32/match=50% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.02µs ? ?/sec
f32/small_list/list=4/match=0% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
f32/small_list/list=4/match=50% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
fixed_size_binary/fsb1/list=16/match=0% 1.00 4.8±0.00µs ? ?/sec 1.00 4.8±0.00µs ? ?/sec
fixed_size_binary/fsb1/list=16/match=50% 1.00 4.8±0.01µs ? ?/sec 1.00 4.8±0.00µs ? ?/sec
fixed_size_binary/fsb16/list=10000/match=0% 1.14 17.4±0.03µs ? ?/sec 1.00 15.3±0.03µs ? ?/sec
fixed_size_binary/fsb16/list=10000/match=50% 1.00 18.2±0.02µs ? ?/sec 1.00 18.2±0.02µs ? ?/sec
fixed_size_binary/fsb16/list=256/match=0% 1.12 15.5±0.04µs ? ?/sec 1.00 13.7±0.06µs ? ?/sec
fixed_size_binary/fsb16/list=256/match=50% 1.40 23.5±1.68µs ? ?/sec 1.00 16.8±0.16µs ? ?/sec
fixed_size_binary/fsb16/list=4/match=0% 1.00 11.7±0.01µs ? ?/sec 1.00 11.7±0.01µs ? ?/sec
fixed_size_binary/fsb16/list=4/match=50% 1.00 11.7±0.01µs ? ?/sec 1.00 11.7±0.05µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=0% 1.07 15.0±0.02µs ? ?/sec 1.00 14.0±0.01µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=0%/input=unaligned 1.12 17.0±0.03µs ? ?/sec 1.00 15.1±0.02µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=50% 1.00 18.9±2.22µs ? ?/sec 1.21 22.9±2.13µs ? ?/sec
fixed_size_binary/fsb16/list=64/match=50%/input=unaligned 1.18 28.2±0.28µs ? ?/sec 1.00 23.9±2.55µs ? ?/sec
fixed_size_binary/fsb2/list=64/match=0% 1.00 5.4±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
fixed_size_binary/fsb2/list=64/match=50% 1.00 5.3±0.00µs ? ?/sec 1.01 5.4±0.00µs ? ?/sec
interval_month_day_nano/small_list/list=4/match=0% 1.00 12.1±0.01µs ? ?/sec 1.01 12.2±0.02µs ? ?/sec
interval_month_day_nano/small_list/list=4/match=50% 1.00 19.7±0.10µs ? ?/sec 1.01 19.8±0.10µs ? ?/sec
narrow_integer/f16/list=256/match=0% 1.00 5.3±0.01µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=256/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=4/match=0% 1.00 3.7±0.00µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/f16/list=4/match=50% 1.00 3.7±0.00µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/f16/list=64/match=0% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/f16/list=64/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=256/match=0% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=256/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=4/match=0% 1.00 3.7±0.00µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/i16/list=4/match=50% 1.00 3.7±0.01µs ? ?/sec 1.00 3.7±0.00µs ? ?/sec
narrow_integer/i16/list=64/match=0% 1.01 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/i16/list=64/match=50% 1.00 5.3±0.00µs ? ?/sec 1.00 5.3±0.00µs ? ?/sec
narrow_integer/u8/list=16/match=0% 1.00 4.7±0.00µs ? ?/sec 1.00 4.7±0.00µs ? ?/sec
narrow_integer/u8/list=16/match=50% 1.00 4.7±0.00µs ? ?/sec 1.00 4.7±0.00µs ? ?/sec
narrow_integer/u8/list=4/match=0% 1.00 3.4±0.05µs ? ?/sec 1.00 3.4±0.02µs ? ?/sec
narrow_integer/u8/list=4/match=50% 1.00 3.4±0.05µs ? ?/sec 1.00 3.4±0.02µs ? ?/sec
nulls/narrow_integer/u8/list=16/match=50%/nulls=20% 1.00 4.8±0.00µs ? ?/sec 1.00 4.8±0.00µs ? ?/sec
nulls/primitive/i32/large_list/list=64/match=50%/nulls=20% 1.00 22.7±0.19µs ? ?/sec 1.08 24.5±0.47µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20% 1.00 9.2±0.03µs ? ?/sec 1.00 9.2±0.02µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=20%/NOT_IN 1.00 9.3±0.02µs ? ?/sec 1.00 9.3±0.02µs ? ?/sec
nulls/primitive/i32/small_list/list=16/match=50%/nulls=50% 1.00 9.2±0.02µs ? ?/sec 1.00 9.2±0.02µs ? ?/sec
nulls/utf8/long_24b/list=16/match=50%/nulls=20% 1.00 70.0±0.39µs ? ?/sec 1.03 71.8±0.48µs ? ?/sec
nulls/utf8/short_8b/list=16/match=50%/nulls=20% 1.01 62.4±0.60µs ? ?/sec 1.00 61.8±0.46µs ? ?/sec
nulls/utf8view/long_24b/list=16/match=50%/nulls=20% 1.13 86.5±0.20µs ? ?/sec 1.00 76.4±0.45µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20% 1.50 38.7±0.27µs ? ?/sec 1.00 25.8±0.12µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=20%/NOT_IN 1.56 38.5±0.13µs ? ?/sec 1.00 24.7±0.40µs ? ?/sec
nulls/utf8view/short_8b/list=16/match=50%/nulls=50% 1.64 29.2±0.14µs ? ?/sec 1.00 17.8±0.14µs ? ?/sec
primitive/decimal128/large_list/list=5/match=0% 1.06 15.1±0.02µs ? ?/sec 1.00 14.2±0.02µs ? ?/sec
primitive/decimal128/large_list/list=5/match=50% 1.15 23.8±2.11µs ? ?/sec 1.00 20.8±0.49µs ? ?/sec
primitive/decimal128/large_list/list=64/match=0% 1.16 15.3±0.04µs ? ?/sec 1.00 13.1±0.01µs ? ?/sec
primitive/decimal128/large_list/list=64/match=50% 1.57 25.7±0.37µs ? ?/sec 1.00 16.4±0.05µs ? ?/sec
primitive/i32/large_list/list=256/match=0% 1.00 12.5±0.09µs ? ?/sec 1.22 15.2±0.11µs ? ?/sec
primitive/i32/large_list/list=256/match=50% 1.15 23.7±0.33µs ? ?/sec 1.00 20.6±3.14µs ? ?/sec
primitive/i32/large_list/list=64/match=0% 1.00 12.5±0.02µs ? ?/sec 1.36 17.0±0.06µs ? ?/sec
primitive/i32/large_list/list=64/match=50% 1.00 20.2±2.57µs ? ?/sec 1.09 22.0±2.61µs ? ?/sec
primitive/i32/small_list/list=16/match=50%/NOT_IN 1.00 9.2±0.02µs ? ?/sec 1.00 9.2±0.04µs ? ?/sec
primitive/i32/small_list/list=32/match=0% 1.00 16.4±0.01µs ? ?/sec 1.00 16.4±0.03µs ? ?/sec
primitive/i32/small_list/list=32/match=50% 1.00 16.4±0.03µs ? ?/sec 1.00 16.4±0.03µs ? ?/sec
primitive/i32/small_list/list=4/match=0% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
primitive/i32/small_list/list=4/match=50% 1.00 3.5±0.00µs ? ?/sec 1.00 3.5±0.00µs ? ?/sec
primitive/i64/large_list/list=128/match=0% 1.19 14.8±0.02µs ? ?/sec 1.00 12.4±0.01µs ? ?/sec
primitive/i64/large_list/list=128/match=50% 1.00 16.2±0.08µs ? ?/sec 1.36 22.0±2.29µs ? ?/sec
primitive/i64/large_list/list=32/match=0% 1.20 15.3±0.51µs ? ?/sec 1.00 12.8±0.05µs ? ?/sec
primitive/i64/large_list/list=32/match=50% 1.36 24.1±0.41µs ? ?/sec 1.00 17.7±0.12µs ? ?/sec
primitive/i64/small_list/list=16/match=0% 1.00 16.7±0.02µs ? ?/sec 1.00 16.7±0.01µs ? ?/sec
primitive/i64/small_list/list=16/match=50% 1.00 16.7±0.01µs ? ?/sec 1.00 16.7±0.01µs ? ?/sec
primitive/i64/small_list/list=4/match=0% 1.00 4.4±0.07µs ? ?/sec 1.00 4.4±0.01µs ? ?/sec
primitive/i64/small_list/list=4/match=50% 1.00 4.4±0.02µs ? ?/sec 1.00 4.4±0.00µs ? ?/sec
timestamp_ns/large_list/list=32/match=0% 1.01 17.7±0.01µs ? ?/sec 1.00 17.6±0.05µs ? ?/sec
timestamp_ns/large_list/list=32/match=50% 1.00 33.6±0.26µs ? ?/sec 1.05 35.3±0.48µs ? ?/sec
timestamp_ns/small_list/list=16/match=0% 1.00 16.7±0.02µs ? ?/sec 1.00 16.7±0.03µs ? ?/sec
timestamp_ns/small_list/list=16/match=50% 1.00 16.7±0.01µs ? ?/sec 1.00 16.7±0.04µs ? ?/sec
timestamp_ns/small_list/list=4/match=0% 1.00 4.4±0.01µs ? ?/sec 1.00 4.4±0.01µs ? ?/sec
timestamp_ns/small_list/list=4/match=50% 1.00 4.4±0.00µs ? ?/sec 1.00 4.4±0.01µs ? ?/sec
utf8/long_24b/list=256/match=0% 1.03 35.2±0.08µs ? ?/sec 1.00 34.2±0.03µs ? ?/sec
utf8/long_24b/list=256/match=50% 1.00 69.8±0.32µs ? ?/sec 1.03 72.1±0.33µs ? ?/sec
utf8/long_24b/list=4/match=0% 1.00 34.5±0.03µs ? ?/sec 1.02 35.0±0.04µs ? ?/sec
utf8/long_24b/list=4/match=50% 1.00 71.6±0.20µs ? ?/sec 1.03 73.4±0.25µs ? ?/sec
utf8/long_24b/list=64/match=0% 1.01 34.4±0.02µs ? ?/sec 1.00 34.1±0.03µs ? ?/sec
utf8/long_24b/list=64/match=50% 1.00 69.3±0.35µs ? ?/sec 1.04 72.0±0.30µs ? ?/sec
utf8/mixed_len/list=16/match=0% 1.00 35.9±0.09µs ? ?/sec 1.04 37.4±0.08µs ? ?/sec
utf8/mixed_len/list=16/match=50% 1.00 98.0±0.81µs ? ?/sec 1.10 107.6±0.57µs ? ?/sec
utf8/mixed_len/list=64/match=0% 1.01 39.1±0.12µs ? ?/sec 1.00 38.7±0.08µs ? ?/sec
utf8/mixed_len/list=64/match=50% 1.00 103.3±0.98µs ? ?/sec 1.15 119.2±0.51µs ? ?/sec
utf8/shared_prefix/pfx=12/list=32/match=50% 1.00 71.1±0.28µs ? ?/sec 1.02 72.4±0.33µs ? ?/sec
utf8/short_8b/list=16/match=50%/NOT_IN 1.02 65.7±0.54µs ? ?/sec 1.00 64.4±0.32µs ? ?/sec
utf8/short_8b/list=256/match=0% 1.03 27.3±0.03µs ? ?/sec 1.00 26.5±0.02µs ? ?/sec
utf8/short_8b/list=256/match=50% 1.00 66.0±0.50µs ? ?/sec 1.01 66.5±0.43µs ? ?/sec
utf8/short_8b/list=4/match=0% 1.02 27.2±0.03µs ? ?/sec 1.00 26.7±0.17µs ? ?/sec
utf8/short_8b/list=4/match=50% 1.00 65.2±0.29µs ? ?/sec 1.04 67.7±0.35µs ? ?/sec
utf8/short_8b/list=64/match=0% 1.03 27.1±0.02µs ? ?/sec 1.00 26.4±0.14µs ? ?/sec
utf8/short_8b/list=64/match=50% 1.00 64.8±0.23µs ? ?/sec 1.02 65.8±0.69µs ? ?/sec
utf8view/len_12b/list=16/match=0% 1.21 18.6±0.02µs ? ?/sec 1.00 15.4±0.05µs ? ?/sec
utf8view/len_12b/list=16/match=50% 2.19 40.0±0.18µs ? ?/sec 1.00 18.3±1.43µs ? ?/sec
utf8view/len_12b/list=64/match=0% 1.36 18.7±0.03µs ? ?/sec 1.00 13.7±0.03µs ? ?/sec
utf8view/len_12b/list=64/match=50% 1.53 39.6±0.17µs ? ?/sec 1.00 25.9±0.26µs ? ?/sec
utf8view/long_24b/list=16/match=0% 1.01 41.2±0.05µs ? ?/sec 1.00 40.8±0.06µs ? ?/sec
utf8view/long_24b/list=16/match=50% 1.00 85.0±0.20µs ? ?/sec 1.01 86.1±0.30µs ? ?/sec
utf8view/long_24b/list=256/match=0% 1.04 41.8±0.18µs ? ?/sec 1.00 40.3±0.04µs ? ?/sec
utf8view/long_24b/list=256/match=50% 1.00 85.5±0.37µs ? ?/sec 1.00 85.5±0.25µs ? ?/sec
utf8view/long_24b/list=4/match=0% 1.01 41.1±0.03µs ? ?/sec 1.00 40.8±0.07µs ? ?/sec
utf8view/long_24b/list=4/match=50% 1.00 85.3±0.32µs ? ?/sec 1.01 86.0±0.38µs ? ?/sec
utf8view/long_24b/list=64/match=0% 1.02 41.1±0.08µs ? ?/sec 1.00 40.4±0.02µs ? ?/sec
utf8view/long_24b/list=64/match=50% 1.00 83.4±0.20µs ? ?/sec 1.01 84.6±0.19µs ? ?/sec
utf8view/mixed_len/list=16/match=0% 1.00 34.0±0.16µs ? ?/sec 1.03 35.1±0.16µs ? ?/sec
utf8view/mixed_len/list=16/match=50% 1.00 90.1±0.65µs ? ?/sec 1.06 95.8±0.58µs ? ?/sec
utf8view/mixed_len/list=64/match=0% 1.00 34.3±0.13µs ? ?/sec 1.02 34.9±0.16µs ? ?/sec
utf8view/mixed_len/list=64/match=50% 1.00 101.0±0.42µs ? ?/sec 1.05 106.5±0.46µs ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=0% 1.02 43.4±0.18µs ? ?/sec 1.00 42.5±0.06µs ? ?/sec
utf8view/shared_prefix/pfx=12/list=32/match=50% 1.01 85.2±0.35µs ? ?/sec 1.00 84.0±0.20µs ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=0% 1.01 40.9±0.10µs ? ?/sec 1.00 40.5±0.05µs ? ?/sec
utf8view/shared_prefix/pfx=16/list=64/match=50% 1.00 85.4±0.18µs ? ?/sec 1.00 85.8±0.37µs ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=0% 1.00 30.2±0.05µs ? ?/sec 1.00 30.2±0.18µs ? ?/sec
utf8view/shared_prefix/pfx=8/list=16/match=50% 1.01 72.6±0.21µs ? ?/sec 1.00 71.9±0.11µs ? ?/sec
utf8view/short_8b/list=16/match=0% 1.34 18.9±0.36µs ? ?/sec 1.00 14.1±0.02µs ? ?/sec
utf8view/short_8b/list=16/match=50% 1.31 39.6±0.36µs ? ?/sec 1.00 30.1±0.42µs ? ?/sec
utf8view/short_8b/list=256/match=0% 1.37 18.5±0.09µs ? ?/sec 1.00 13.4±0.07µs ? ?/sec
utf8view/short_8b/list=256/match=50% 1.49 38.3±0.28µs ? ?/sec 1.00 25.7±1.10µs ? ?/sec
utf8view/short_8b/list=4/match=0% 1.60 18.7±0.02µs ? ?/sec 1.00 11.6±0.00µs ? ?/sec
utf8view/short_8b/list=4/match=50% 3.38 39.3±0.21µs ? ?/sec 1.00 11.6±0.01µs ? ?/sec
utf8view/short_8b/list=64/match=0% 1.39 18.6±0.03µs ? ?/sec 1.00 13.4±0.10µs ? ?/sec
utf8view/short_8b/list=64/match=50% 1.36 38.5±0.33µs ? ?/sec 1.00 28.4±0.39µs ? ?/sec

Resource Usage

in_list_strategy — base (merge-base)

MetricValue
Wall time1460.3s
Peak memory41.1 MiB
Avg memory30.9 MiB
CPU user1651.8s
CPU sys1.8s
Peak spill0 B

in_list_strategy — branch

MetricValue
Wall time1430.3s
Peak memory42.4 MiB
Avg memory31.8 MiB
CPU user1633.6s
CPU sys1.5s
Peak spill0 B

File an issue against this benchmark runner

@geoffreyclaude

Copy link
Copy Markdown
ContributorAuthor

I noticed this is marked as draft -- please ping me when ready to review

@alamb thank you! I'm reworked a bit the ordering of PRs, the next logical one to me should be #24283 , and it should now be ready for review.

The next two are pretty much ready as well, just keeping them in draft so we can rebase over main for easier review as we go.

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

Labels

physical-exprChanges to the physical-expr crates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@geoffreyclaude@codecov-commenter@adriangbot@alamb