Skip to content

Conversation

@geoffreyclaude
Copy link
Contributor

@geoffreyclaude geoffreyclaude commented Dec 18, 2025

Which issue does this PR close?

Rationale for this change

The current InList expression implementation uses a generic ArrayStaticFilter that relies on make_comparator for all types, which adds significant overhead for primitive types. This PR introduces type-specialized filters that exploit the properties of different data types to achieve substantial performance improvements.

What changes are included in this PR?

Note: This PR is still in draft mode and will be heavily refactored before being production ready.

This PR refactors the InList expression to use specialized filter strategies based on data type and list size:

1. Bitmap Filters for 1-byte and 2-byte types (UInt8, Int8, UInt16, Int16)

  • Uses a fixed-size bitmap (32 bytes for u8, 8KB for u16) for O(1) membership testing via bit test
  • Eliminates all hashing and comparison overhead for these types

2. Branchless OR-chain Filters for small IN lists

  • Uses const generics to unroll membership checks into a fixed-size comparison chain
  • No branching (uses bitwise OR to combine comparisons), better CPU pipelining
  • Thresholds tuned via microbenchmarks:
    • 4-byte types (Int32, Float32): branchless up to 32 elements
    • 8-byte types (Int64, Float64): branchless up to 16 elements
    • 16-byte types (Decimal128): branchless up to 4 elements

3. Utf8View Short String Optimization

  • Strings <= 12 bytes are stored inline in Utf8View's 16-byte view struct
  • These can be reinterpreted as i128 for fast equality comparison (branchless or hash)
  • Long strings use a two-stage filter: masked view pre-check + full verification

4. Two-Stage ByteViewMaskedFilter for mixed-length Utf8View/BinaryView

  • Stage 1: Quick rejection using masked views (len + prefix as i128)
  • Stage 2: Full verification for long value matches via HashTable lookup

5. Type Reinterpretation for Zero-Copy Dispatch

  • Float32/Float64 reinterpreted as UInt32/UInt64 (bit patterns identical for equality)
  • Timestamp, Date, Duration types dispatch to same filters as their underlying integer types

Are these changes tested?

Yes, all existing tests pass (37 tests in in_list module). The optimizations are covered by the existing comprehensive test suite which includes:

  • All primitive types (Int8-64, UInt8-64, Float32/64)
  • String types (Utf8, LargeUtf8, Utf8View)
  • Binary types (Binary, LargeBinary, BinaryView)
  • Complex types (Decimal, Timestamp, Date, Duration, Struct, List)
  • Dictionary-encoded arrays
  • Null handling (both in values and IN list)
  • Negated IN lists (NOT IN)

Are there any user-facing changes?

No user-facing API changes. This is a pure performance optimization that maintains identical behavior.

@github-actions github-actions bot added the physical-expr Changes to the physical-expr crates label Dec 18, 2025
@geoffreyclaude
Copy link
Contributor Author

run benchmark in_list

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch_bench.sh compare_branch_bench.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 perf/in_list_optims (f2a2503) to d68b629 diff
BENCH_NAME=in_list
BENCH_COMMAND=cargo bench --features=parquet --bench in_list
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_in_list_optims
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                          main                                   perf_in_list_optims
-----                                          ----                                   -------------------
in_list/Float32/list=100/nulls=0%              1.55     58.7±0.39µs        ? ?/sec    1.00     37.9±0.89µs        ? ?/sec
in_list/Float32/list=100/nulls=20%             1.32     79.4±0.25µs        ? ?/sec    1.00     60.0±0.94µs        ? ?/sec
in_list/Float32/list=28/nulls=0%               1.28     51.1±0.31µs        ? ?/sec    1.00     39.9±0.91µs        ? ?/sec
in_list/Float32/list=28/nulls=20%              2.06     91.3±0.50µs        ? ?/sec    1.00     44.4±1.33µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                6.60     41.9±0.74µs        ? ?/sec    1.00      6.4±0.03µs        ? ?/sec
in_list/Float32/list=3/nulls=20%               6.32     42.0±0.87µs        ? ?/sec    1.00      6.6±0.48µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                4.25     49.1±0.40µs        ? ?/sec    1.00     11.6±0.06µs        ? ?/sec
in_list/Float32/list=8/nulls=20%               5.39     63.7±0.30µs        ? ?/sec    1.00     11.8±0.31µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                6.17     49.6±0.21µs        ? ?/sec    1.00      8.0±0.03µs        ? ?/sec
in_list/Int16/list=100/nulls=20%               7.18     59.3±1.53µs        ? ?/sec    1.00      8.3±0.14µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                 9.06     72.7±0.59µs        ? ?/sec    1.00      8.0±0.06µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                5.98     49.1±0.18µs        ? ?/sec    1.00      8.2±0.03µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                  4.81     38.5±1.10µs        ? ?/sec    1.00      8.0±0.06µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                 4.58     37.8±0.74µs        ? ?/sec    1.00      8.2±0.04µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                  5.38     43.6±0.59µs        ? ?/sec    1.00      8.1±0.20µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                 5.06     41.7±1.25µs        ? ?/sec    1.00      8.2±0.07µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                1.18     56.0±0.19µs        ? ?/sec    1.00     47.6±0.16µs        ? ?/sec
in_list/Int32/list=100/nulls=20%               1.02     66.1±0.30µs        ? ?/sec    1.00     65.1±0.56µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                 1.15     83.2±0.27µs        ? ?/sec    1.00     72.6±2.27µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                1.56     93.2±0.75µs        ? ?/sec    1.00     59.9±0.69µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                  6.15     39.8±1.98µs        ? ?/sec    1.00      6.5±0.59µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                 5.78     38.1±0.14µs        ? ?/sec    1.00      6.6±0.22µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                  3.67     42.7±0.16µs        ? ?/sec    1.00     11.6±0.43µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                 3.60     42.6±4.08µs        ? ?/sec    1.00     11.8±0.23µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%          1.68    102.3±1.83µs        ? ?/sec    1.00     60.8±0.99µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%         2.62    112.2±1.81µs        ? ?/sec    1.00     42.9±0.23µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%           1.00     70.3±0.28µs        ? ?/sec    1.07     75.5±0.65µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%          1.16   110.9±11.14µs        ? ?/sec    1.00     96.0±0.87µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%            5.42     53.4±0.90µs        ? ?/sec    1.00      9.9±0.03µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%           9.10     91.9±0.39µs        ? ?/sec    1.00     10.1±0.09µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%            2.25     58.0±2.34µs        ? ?/sec    1.00     25.8±0.40µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%           3.58     94.9±2.67µs        ? ?/sec    1.00     26.5±1.93µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                8.38     66.1±0.40µs        ? ?/sec    1.00      7.9±0.08µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%               9.50     76.9±0.95µs        ? ?/sec    1.00      8.1±0.03µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                 7.72     60.9±1.21µs        ? ?/sec    1.00      7.9±0.04µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                6.03     48.6±0.35µs        ? ?/sec    1.00      8.1±0.06µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                  4.79     37.9±2.02µs        ? ?/sec    1.00      7.9±0.21µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                 4.67     37.7±0.93µs        ? ?/sec    1.00      8.1±0.09µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                  5.47     43.1±0.53µs        ? ?/sec    1.00      7.9±0.04µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                 5.34     43.2±0.40µs        ? ?/sec    1.00      8.1±0.13µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100         1.05    157.8±1.59µs        ? ?/sec    1.00    150.2±3.55µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12          1.03     89.2±1.29µs        ? ?/sec    1.00     87.0±0.29µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3           1.00    105.5±2.55µs        ? ?/sec    1.18    124.6±3.80µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100        1.07    183.6±3.33µs        ? ?/sec    1.00    171.0±2.87µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12         1.06    138.2±0.84µs        ? ?/sec    1.00    130.4±3.51µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3          1.00    132.9±1.93µs        ? ?/sec    1.08    143.9±4.00µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100          1.05    141.2±3.41µs        ? ?/sec    1.00    134.4±2.19µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12           1.07     81.4±1.31µs        ? ?/sec    1.00     76.4±1.57µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3            1.00     89.1±0.49µs        ? ?/sec    1.04     92.5±0.35µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100         1.02    172.1±3.29µs        ? ?/sec    1.00    169.3±6.31µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12          1.00    131.1±2.17µs        ? ?/sec    1.18    154.9±2.66µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3           1.00    146.5±2.48µs        ? ?/sec    1.06    154.6±1.30µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100           1.06    128.9±2.08µs        ? ?/sec    1.00    121.7±0.54µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12            1.10     71.5±5.86µs        ? ?/sec    1.00     65.3±0.30µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3             1.03     71.8±1.00µs        ? ?/sec    1.00     69.8±1.49µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100          1.00    154.8±3.95µs        ? ?/sec    1.00    155.1±1.14µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12           1.00    109.4±0.45µs        ? ?/sec    1.01    110.8±0.62µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3            1.00    111.6±3.55µs        ? ?/sec    1.03    115.5±0.72µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100           1.09   138.7±15.15µs        ? ?/sec    1.00    127.0±1.18µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12            1.04     75.4±0.93µs        ? ?/sec    1.00     72.2±9.40µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3             1.05     78.0±0.44µs        ? ?/sec    1.00     74.3±0.40µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100          1.00    158.9±6.78µs        ? ?/sec    1.01    160.4±4.45µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12           1.00    114.1±0.59µs        ? ?/sec    1.02    116.2±0.88µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3            1.00    116.8±5.02µs        ? ?/sec    1.03    119.9±0.31µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100     1.00    160.9±1.19µs        ? ?/sec    1.08   174.3±11.20µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12      1.18    117.1±0.67µs        ? ?/sec    1.00     99.3±1.42µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3       1.95    100.3±0.38µs        ? ?/sec    1.00     51.5±0.35µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100    1.00    192.6±1.37µs        ? ?/sec    1.04    200.0±0.69µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12     1.63    122.4±0.74µs        ? ?/sec    1.00     75.3±1.40µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3      1.76    134.0±0.42µs        ? ?/sec    1.00     76.1±0.36µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100      1.00    168.5±1.55µs        ? ?/sec    1.03    173.6±1.48µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12       1.17    113.7±3.69µs        ? ?/sec    1.00     97.2±1.03µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3        1.00     82.4±0.46µs        ? ?/sec    1.20     98.6±1.17µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100     1.00    213.4±5.15µs        ? ?/sec    1.03    219.0±1.54µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12      2.97    155.7±1.73µs        ? ?/sec    1.00     52.5±0.22µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3       1.64    126.9±0.91µs        ? ?/sec    1.00     77.5±0.58µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100       1.07    135.7±0.79µs        ? ?/sec    1.00    127.0±0.90µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12        4.50     69.5±0.40µs        ? ?/sec    1.00     15.4±0.05µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3         4.66     72.1±1.73µs        ? ?/sec    1.00     15.5±0.28µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100      1.00    165.7±1.41µs        ? ?/sec    1.00    165.5±7.06µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12       7.16    112.6±1.92µs        ? ?/sec    1.00     15.7±0.37µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3        7.43    116.8±2.24µs        ? ?/sec    1.00     15.7±0.44µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100       1.06    140.2±1.09µs        ? ?/sec    1.00    131.9±2.82µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12        1.58     75.8±7.92µs        ? ?/sec    1.00     48.0±0.81µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3         1.57     76.3±0.39µs        ? ?/sec    1.00     48.6±1.07µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100      1.00    167.3±0.90µs        ? ?/sec    1.01    168.7±3.47µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12       2.42    115.7±2.88µs        ? ?/sec    1.00     47.8±0.78µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3        2.51    119.5±0.58µs        ? ?/sec    1.00     47.6±0.85µs        ? ?/sec

@Dandandan
Copy link
Contributor

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 perf/in_list_optims (f2a2503) to d68b629 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@Dandandan
Copy link
Contributor

run benchmark tpch tpchds

@alamb-ghbot
Copy link

🤖 Hi @Dandandan, thanks for the request (#19390 (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, case_when, in_list, sql_planner, with_hashes

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

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and perf_in_list_optims
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query        ┃        HEAD ┃ perf_in_list_optims ┃        Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0     │  2725.42 ms │          2806.89 ms │     no change │
│ QQuery 1     │  1205.55 ms │          1296.98 ms │  1.08x slower │
│ QQuery 2     │  2354.44 ms │          2501.12 ms │  1.06x slower │
│ QQuery 3     │  1158.78 ms │          1208.21 ms │     no change │
│ QQuery 4     │  2343.44 ms │          2328.86 ms │     no change │
│ QQuery 5     │ 29573.83 ms │         29313.99 ms │     no change │
│ QQuery 6     │  3988.57 ms │          4081.38 ms │     no change │
│ QQuery 7     │  3894.61 ms │          3628.87 ms │ +1.07x faster │
└──────────────┴─────────────┴─────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 47244.63ms │
│ Total Time (perf_in_list_optims)   │ 47166.29ms │
│ Average Time (HEAD)                │  5905.58ms │
│ Average Time (perf_in_list_optims) │  5895.79ms │
│ Queries Faster                     │          1 │
│ Queries Slower                     │          2 │
│ Queries with No Change             │          5 │
│ Queries with Failure               │          0 │
└────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query        ┃        HEAD ┃ perf_in_list_optims ┃        Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0     │     2.37 ms │             2.26 ms │     no change │
│ QQuery 1     │    52.91 ms │            51.62 ms │     no change │
│ QQuery 2     │   137.22 ms │           136.97 ms │     no change │
│ QQuery 3     │   157.06 ms │           160.07 ms │     no change │
│ QQuery 4     │  1179.83 ms │          1152.00 ms │     no change │
│ QQuery 5     │  1560.36 ms │          1540.33 ms │     no change │
│ QQuery 6     │     2.15 ms │             2.17 ms │     no change │
│ QQuery 7     │    56.53 ms │            56.82 ms │     no change │
│ QQuery 8     │  1509.57 ms │          1477.40 ms │     no change │
│ QQuery 9     │  1967.08 ms │          1895.92 ms │     no change │
│ QQuery 10    │   364.36 ms │           378.01 ms │     no change │
│ QQuery 11    │   423.25 ms │           433.69 ms │     no change │
│ QQuery 12    │  1475.13 ms │          1407.02 ms │     no change │
│ QQuery 13    │  2115.97 ms │          2059.29 ms │     no change │
│ QQuery 14    │  1363.18 ms │          1308.84 ms │     no change │
│ QQuery 15    │  1343.47 ms │          1261.13 ms │ +1.07x faster │
│ QQuery 16    │  2811.16 ms │          2756.23 ms │     no change │
│ QQuery 17    │  2778.01 ms │          2787.48 ms │     no change │
│ QQuery 18    │  5553.83 ms │          5159.05 ms │ +1.08x faster │
│ QQuery 19    │   125.28 ms │           125.76 ms │     no change │
│ QQuery 20    │  2052.66 ms │          1935.68 ms │ +1.06x faster │
│ QQuery 21    │  2324.36 ms │          2247.58 ms │     no change │
│ QQuery 22    │  3946.25 ms │          3838.61 ms │     no change │
│ QQuery 23    │ 16658.91 ms │         12406.56 ms │ +1.34x faster │
│ QQuery 24    │   227.66 ms │           221.15 ms │     no change │
│ QQuery 25    │   472.53 ms │           473.19 ms │     no change │
│ QQuery 26    │   239.05 ms │           219.07 ms │ +1.09x faster │
│ QQuery 27    │  2925.72 ms │          2766.22 ms │ +1.06x faster │
│ QQuery 28    │ 24656.05 ms │         23549.07 ms │     no change │
│ QQuery 29    │  1020.26 ms │           976.67 ms │     no change │
│ QQuery 30    │  1409.95 ms │          1338.93 ms │ +1.05x faster │
│ QQuery 31    │  1400.09 ms │          1337.21 ms │     no change │
│ QQuery 32    │  5774.13 ms │          5190.24 ms │ +1.11x faster │
│ QQuery 33    │  6407.01 ms │          6021.19 ms │ +1.06x faster │
│ QQuery 34    │  6500.51 ms │          6415.47 ms │     no change │
│ QQuery 35    │  2103.71 ms │          2017.51 ms │     no change │
│ QQuery 36    │    68.10 ms │            67.99 ms │     no change │
│ QQuery 37    │    47.03 ms │            48.20 ms │     no change │
│ QQuery 38    │    69.86 ms │            67.91 ms │     no change │
│ QQuery 39    │   106.08 ms │           105.06 ms │     no change │
│ QQuery 40    │    28.50 ms │            25.97 ms │ +1.10x faster │
│ QQuery 41    │    23.83 ms │            25.79 ms │  1.08x slower │
│ QQuery 42    │    21.20 ms │            21.21 ms │     no change │
└──────────────┴─────────────┴─────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃             ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 103462.18ms │
│ Total Time (perf_in_list_optims)   │  95468.54ms │
│ Average Time (HEAD)                │   2406.10ms │
│ Average Time (perf_in_list_optims) │   2220.20ms │
│ Queries Faster                     │          10 │
│ Queries Slower                     │           1 │
│ Queries with No Change             │          32 │
│ Queries with Failure               │           0 │
└────────────────────────────────────┴─────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query        ┃      HEAD ┃ perf_in_list_optims ┃        Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1     │ 139.03 ms │           133.34 ms │     no change │
│ QQuery 2     │  28.29 ms │            30.88 ms │  1.09x slower │
│ QQuery 3     │  39.30 ms │            40.03 ms │     no change │
│ QQuery 4     │  29.65 ms │            29.76 ms │     no change │
│ QQuery 5     │  91.43 ms │            91.82 ms │     no change │
│ QQuery 6     │  20.10 ms │            20.37 ms │     no change │
│ QQuery 7     │ 243.33 ms │           246.44 ms │     no change │
│ QQuery 8     │  38.65 ms │            38.74 ms │     no change │
│ QQuery 9     │ 107.49 ms │           114.95 ms │  1.07x slower │
│ QQuery 10    │  66.38 ms │            67.41 ms │     no change │
│ QQuery 11    │  19.47 ms │            18.27 ms │ +1.07x faster │
│ QQuery 12    │  52.22 ms │            53.28 ms │     no change │
│ QQuery 13    │  50.39 ms │            51.38 ms │     no change │
│ QQuery 14    │  14.71 ms │            14.23 ms │     no change │
│ QQuery 15    │  26.27 ms │            25.97 ms │     no change │
│ QQuery 16    │  25.28 ms │            25.64 ms │     no change │
│ QQuery 17    │ 165.92 ms │           168.99 ms │     no change │
│ QQuery 18    │ 294.08 ms │           294.12 ms │     no change │
│ QQuery 19    │  39.69 ms │            38.75 ms │     no change │
│ QQuery 20    │  51.17 ms │            51.39 ms │     no change │
│ QQuery 21    │ 345.46 ms │           341.94 ms │     no change │
│ QQuery 22    │  18.11 ms │            17.48 ms │     no change │
└──────────────┴───────────┴─────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 1906.43ms │
│ Total Time (perf_in_list_optims)   │ 1915.18ms │
│ Average Time (HEAD)                │   86.66ms │
│ Average Time (perf_in_list_optims) │   87.05ms │
│ Queries Faster                     │         1 │
│ Queries Slower                     │         2 │
│ Queries with No Change             │        19 │
│ Queries with Failure               │         0 │
└────────────────────────────────────┴───────────┘

@Dandandan
Copy link
Contributor

run benchmark tpch tpcds

@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 perf/in_list_optims (f2a2503) to d68b629 diff using: tpch
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and perf_in_list_optims
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query        ┃      HEAD ┃ perf_in_list_optims ┃    Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 1     │ 231.35 ms │           223.32 ms │ no change │
│ QQuery 2     │ 101.95 ms │           100.61 ms │ no change │
│ QQuery 3     │ 130.96 ms │           131.08 ms │ no change │
│ QQuery 4     │  77.52 ms │            80.92 ms │ no change │
│ QQuery 5     │ 180.82 ms │           183.99 ms │ no change │
│ QQuery 6     │  66.39 ms │            68.45 ms │ no change │
│ QQuery 7     │ 221.26 ms │           225.37 ms │ no change │
│ QQuery 8     │ 169.39 ms │           169.80 ms │ no change │
│ QQuery 9     │ 234.35 ms │           233.20 ms │ no change │
│ QQuery 10    │ 191.96 ms │           191.30 ms │ no change │
│ QQuery 11    │  77.86 ms │            78.08 ms │ no change │
│ QQuery 12    │ 120.03 ms │           119.39 ms │ no change │
│ QQuery 13    │ 225.39 ms │           222.78 ms │ no change │
│ QQuery 14    │  99.23 ms │            97.40 ms │ no change │
│ QQuery 15    │ 124.72 ms │           126.19 ms │ no change │
│ QQuery 16    │  60.16 ms │            61.62 ms │ no change │
│ QQuery 17    │ 290.48 ms │           286.19 ms │ no change │
│ QQuery 18    │ 335.46 ms │           338.83 ms │ no change │
│ QQuery 19    │ 140.50 ms │           135.63 ms │ no change │
│ QQuery 20    │ 131.02 ms │           131.28 ms │ no change │
│ QQuery 21    │ 276.38 ms │           285.97 ms │ no change │
│ QQuery 22    │  43.92 ms │            44.97 ms │ no change │
└──────────────┴───────────┴─────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 3531.09ms │
│ Total Time (perf_in_list_optims)   │ 3536.36ms │
│ Average Time (HEAD)                │  160.50ms │
│ Average Time (perf_in_list_optims) │  160.74ms │
│ Queries Faster                     │         0 │
│ Queries Slower                     │         0 │
│ Queries with No Change             │        22 │
│ 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 perf/in_list_optims (f2a2503) to d68b629 diff using: tpcds
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and perf_in_list_optims
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query        ┃        HEAD ┃ perf_in_list_optims ┃        Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1     │    62.81 ms │            63.40 ms │     no change │
│ QQuery 2     │   200.58 ms │           211.30 ms │  1.05x slower │
│ QQuery 3     │   157.02 ms │           161.27 ms │     no change │
│ QQuery 4     │  2147.68 ms │          2154.43 ms │     no change │
│ QQuery 5     │   266.90 ms │           272.12 ms │     no change │
│ QQuery 6     │  1608.53 ms │          1568.65 ms │     no change │
│ QQuery 7     │   516.14 ms │           516.20 ms │     no change │
│ QQuery 8     │   171.09 ms │           174.30 ms │     no change │
│ QQuery 9     │   279.10 ms │           278.52 ms │     no change │
│ QQuery 10    │   169.98 ms │           172.34 ms │     no change │
│ QQuery 11    │  1440.42 ms │          1456.00 ms │     no change │
│ QQuery 12    │    72.90 ms │            72.63 ms │     no change │
│ QQuery 13    │   569.65 ms │           573.00 ms │     no change │
│ QQuery 14    │  2058.14 ms │          2120.24 ms │     no change │
│ QQuery 15    │    27.41 ms │            29.18 ms │  1.06x slower │
│ QQuery 16    │    58.86 ms │            59.82 ms │     no change │
│ QQuery 17    │   356.40 ms │           360.71 ms │     no change │
│ QQuery 18    │   191.05 ms │           192.99 ms │     no change │
│ QQuery 19    │   228.87 ms │           231.37 ms │     no change │
│ QQuery 20    │    24.10 ms │            23.64 ms │     no change │
│ QQuery 21    │    34.13 ms │            36.03 ms │  1.06x slower │
│ QQuery 22    │  1049.93 ms │          1040.99 ms │     no change │
│ QQuery 23    │  1859.36 ms │          1882.59 ms │     no change │
│ QQuery 24    │   646.96 ms │           661.66 ms │     no change │
│ QQuery 25    │   525.98 ms │           526.04 ms │     no change │
│ QQuery 26    │   125.28 ms │           125.04 ms │     no change │
│ QQuery 27    │   501.63 ms │           520.79 ms │     no change │
│ QQuery 28    │   304.67 ms │           306.38 ms │     no change │
│ QQuery 29    │   437.65 ms │           452.99 ms │     no change │
│ QQuery 30    │    63.66 ms │            64.67 ms │     no change │
│ QQuery 31    │   299.10 ms │           319.80 ms │  1.07x slower │
│ QQuery 32    │    83.63 ms │            79.01 ms │ +1.06x faster │
│ QQuery 33    │   198.78 ms │           197.59 ms │     no change │
│ QQuery 34    │   165.32 ms │           162.00 ms │     no change │
│ QQuery 35    │   185.05 ms │           176.72 ms │     no change │
│ QQuery 36    │   296.82 ms │           312.84 ms │  1.05x slower │
│ QQuery 37    │   258.15 ms │           271.79 ms │  1.05x slower │
│ QQuery 38    │   151.03 ms │           156.34 ms │     no change │
│ QQuery 39    │   230.46 ms │           224.41 ms │     no change │
│ QQuery 40    │   192.88 ms │           196.48 ms │     no change │
│ QQuery 41    │    17.27 ms │            16.81 ms │     no change │
│ QQuery 42    │   144.01 ms │           147.78 ms │     no change │
│ QQuery 43    │   125.45 ms │           129.17 ms │     no change │
│ QQuery 44    │    16.41 ms │            15.86 ms │     no change │
│ QQuery 45    │    82.39 ms │            85.78 ms │     no change │
│ QQuery 46    │   335.51 ms │           347.39 ms │     no change │
│ QQuery 47    │  1393.13 ms │          1412.63 ms │     no change │
│ QQuery 48    │   425.26 ms │           424.93 ms │     no change │
│ QQuery 49    │   359.69 ms │           356.73 ms │     no change │
│ QQuery 50    │   342.99 ms │           358.46 ms │     no change │
│ QQuery 51    │   297.73 ms │           305.62 ms │     no change │
│ QQuery 52    │   142.42 ms │           148.88 ms │     no change │
│ QQuery 53    │   149.92 ms │           150.29 ms │     no change │
│ QQuery 54    │   218.63 ms │           218.03 ms │     no change │
│ QQuery 55    │   142.31 ms │           146.87 ms │     no change │
│ QQuery 56    │   193.07 ms │           196.69 ms │     no change │
│ QQuery 57    │   323.23 ms │           336.89 ms │     no change │
│ QQuery 58    │   533.04 ms │           537.14 ms │     no change │
│ QQuery 59    │   289.92 ms │           297.91 ms │     no change │
│ QQuery 60    │   202.35 ms │           204.30 ms │     no change │
│ QQuery 61    │   242.74 ms │           246.65 ms │     no change │
│ QQuery 62    │  1398.37 ms │          1350.48 ms │     no change │
│ QQuery 63    │   149.80 ms │           151.68 ms │     no change │
│ QQuery 64    │  1181.74 ms │          1196.44 ms │     no change │
│ QQuery 65    │   369.30 ms │           377.05 ms │     no change │
│ QQuery 66    │   395.77 ms │           396.50 ms │     no change │
│ QQuery 67    │   643.44 ms │           642.65 ms │     no change │
│ QQuery 68    │   393.11 ms │           392.83 ms │     no change │
│ QQuery 69    │   164.68 ms │           168.85 ms │     no change │
│ QQuery 70    │   514.64 ms │           536.96 ms │     no change │
│ QQuery 71    │   184.83 ms │           189.37 ms │     no change │
│ QQuery 72    │  2628.42 ms │          2605.00 ms │     no change │
│ QQuery 73    │   159.35 ms │           159.55 ms │     no change │
│ QQuery 74    │   894.53 ms │           915.98 ms │     no change │
│ QQuery 75    │   390.80 ms │           392.61 ms │     no change │
│ QQuery 76    │   192.34 ms │           190.95 ms │     no change │
│ QQuery 77    │   266.33 ms │           272.79 ms │     no change │
│ QQuery 78    │   963.48 ms │           968.34 ms │     no change │
│ QQuery 79    │   346.81 ms │           354.21 ms │     no change │
│ QQuery 80    │   505.89 ms │           501.59 ms │     no change │
│ QQuery 81    │    42.66 ms │            43.01 ms │     no change │
│ QQuery 82    │   293.69 ms │           303.02 ms │     no change │
│ QQuery 83    │    70.96 ms │            69.83 ms │     no change │
│ QQuery 84    │    64.83 ms │            64.59 ms │     no change │
│ QQuery 85    │   229.07 ms │           227.32 ms │     no change │
│ QQuery 86    │    62.15 ms │            59.60 ms │     no change │
│ QQuery 87    │   148.29 ms │           153.10 ms │     no change │
│ QQuery 88    │   241.41 ms │           253.95 ms │  1.05x slower │
│ QQuery 89    │   170.57 ms │           175.35 ms │     no change │
│ QQuery 90    │    36.47 ms │            38.72 ms │  1.06x slower │
│ QQuery 91    │   103.81 ms │            94.73 ms │ +1.10x faster │
│ QQuery 92    │    76.56 ms │            79.05 ms │     no change │
│ QQuery 93    │   272.15 ms │           268.56 ms │     no change │
│ QQuery 94    │    85.84 ms │            86.91 ms │     no change │
│ QQuery 95    │   262.50 ms │           267.70 ms │     no change │
│ QQuery 96    │   109.24 ms │           111.28 ms │     no change │
│ QQuery 97    │   188.91 ms │           195.71 ms │     no change │
│ QQuery 98    │   248.91 ms │           242.24 ms │     no change │
│ QQuery 99    │ 14932.12 ms │         15007.97 ms │     no change │
└──────────────┴─────────────┴─────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 53579.35ms │
│ Total Time (perf_in_list_optims)   │ 53997.54ms │
│ Average Time (HEAD)                │   541.21ms │
│ Average Time (perf_in_list_optims) │   545.43ms │
│ Queries Faster                     │          2 │
│ Queries Slower                     │          8 │
│ Queries with No Change             │         89 │
│ Queries with Failure               │          0 │
└────────────────────────────────────┴────────────┘

@geoffreyclaude
Copy link
Contributor Author

run benchmark tpch tpcds

@Dandandan how do IN LIST in the tpch queries get planned?

I think once this optim is done, there could be a lot to reuse for broadcast joins...

@Dandandan
Copy link
Contributor

run benchmark tpch tpcds

@Dandandan how do IN LIST in the tpch queries get planned?

I think once this optim is done, there could be a lot to reuse for broadcast joins...

For plain (non dynamic) filters, I think based on a treshold (<= 3) it either gets planned as a chain of or expressions or using InListExpr.
Probably we can change the treshold if it's better for fewer elems as well for primitive types.

@geoffreyclaude geoffreyclaude force-pushed the perf/in_list_optims branch 2 times, most recently from 7ba1c85 to 276a37f Compare December 19, 2025 16:25
@geoffreyclaude
Copy link
Contributor Author

run benchmark in_list

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch_bench.sh compare_branch_bench.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 perf/in_list_optims (d18b346) to d68b629 diff
BENCH_NAME=in_list
BENCH_COMMAND=cargo bench --features=parquet --bench in_list
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_in_list_optims
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                  main                                   perf_in_list_optims
-----                                                  ----                                   -------------------
in_list/Float32/list=100/nulls=0%                      1.30     60.4±1.06µs        ? ?/sec    1.00     46.6±0.25µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.19     74.8±0.74µs        ? ?/sec    1.00     63.0±0.39µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       2.28     72.2±0.53µs        ? ?/sec    1.00     31.7±0.16µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      2.10     67.6±0.36µs        ? ?/sec    1.00     32.2±2.11µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        7.15     45.3±0.73µs        ? ?/sec    1.00      6.3±0.02µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       6.33     41.2±0.13µs        ? ?/sec    1.00      6.5±0.10µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        4.27     49.4±0.67µs        ? ?/sec    1.00     11.6±0.07µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       3.74     44.2±0.21µs        ? ?/sec    1.00     11.8±0.28µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        7.19     57.5±0.49µs        ? ?/sec    1.00      8.0±0.04µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       8.78     72.3±7.56µs        ? ?/sec    1.00      8.2±0.06µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         7.06     56.4±0.39µs        ? ?/sec    1.00      8.0±0.05µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        7.27     59.8±0.48µs        ? ?/sec    1.00      8.2±0.05µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          5.02     40.1±6.48µs        ? ?/sec    1.00      8.0±0.04µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         4.65     38.4±0.47µs        ? ?/sec    1.00      8.2±0.11µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          4.62     42.3±0.26µs        ? ?/sec    1.00      9.1±2.43µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         5.02     41.5±0.44µs        ? ?/sec    1.00      8.3±0.22µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.51     91.3±0.48µs        ? ?/sec    1.00     60.4±0.20µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.60     79.8±0.66µs        ? ?/sec    1.00     49.9±0.49µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         2.49     79.5±1.94µs        ? ?/sec    1.00     31.9±0.58µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        1.77     56.7±0.18µs        ? ?/sec    1.00     32.0±0.23µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          6.11     38.7±0.40µs        ? ?/sec    1.00      6.3±0.07µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         5.88     38.5±0.94µs        ? ?/sec    1.00      6.5±0.14µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          3.62     42.1±0.17µs        ? ?/sec    1.00     11.6±0.39µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         3.50     41.3±0.15µs        ? ?/sec    1.00     11.8±0.06µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.05     67.1±1.11µs        ? ?/sec    1.00     63.9±0.37µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 3.29    124.4±0.56µs        ? ?/sec    1.00     37.8±0.22µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.61     75.2±0.69µs        ? ?/sec    1.00     46.6±0.14µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  2.14    101.9±1.05µs        ? ?/sec    1.00     47.7±0.17µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    4.37     53.8±0.27µs        ? ?/sec    1.00     12.3±0.06µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   7.35     92.1±0.44µs        ? ?/sec    1.00     12.5±0.04µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    2.21     57.3±0.33µs        ? ?/sec    1.00     25.9±0.22µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   3.61     96.8±9.21µs        ? ?/sec    1.00     26.8±2.58µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        8.34     66.6±0.35µs        ? ?/sec    1.00      8.0±0.36µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       9.44     76.5±0.58µs        ? ?/sec    1.00      8.1±0.11µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         7.42     58.7±2.02µs        ? ?/sec    1.00      7.9±0.17µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        6.45     52.7±0.56µs        ? ?/sec    1.00      8.2±0.04µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          4.74     37.5±0.12µs        ? ?/sec    1.00      7.9±0.23µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         4.65     37.6±3.90µs        ? ?/sec    1.00      8.1±0.05µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          5.27     41.7±0.26µs        ? ?/sec    1.00      7.9±0.22µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         5.25     42.5±0.52µs        ? ?/sec    1.00      8.1±0.07µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.00    146.0±0.80µs        ? ?/sec    1.27    185.5±1.86µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.00     93.1±4.16µs        ? ?/sec    1.32    123.2±1.00µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.00     98.1±0.30µs        ? ?/sec    1.17   114.9±16.18µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.00    172.9±1.42µs        ? ?/sec    1.14    196.7±2.51µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.00    140.5±1.15µs        ? ?/sec    1.02    143.0±1.08µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.00    119.1±0.85µs        ? ?/sec    1.00    118.6±1.40µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    142.3±3.80µs        ? ?/sec    1.25    177.7±0.88µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.00     92.9±4.71µs        ? ?/sec    1.72    159.7±2.60µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.00     82.8±2.12µs        ? ?/sec    1.87    155.2±4.21µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.00    178.5±2.07µs        ? ?/sec    1.06    189.7±1.07µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.15    150.1±3.06µs        ? ?/sec    1.00    130.4±0.73µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.25    144.3±0.96µs        ? ?/sec    1.00    115.8±3.96µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00    129.1±4.24µs        ? ?/sec    1.17   150.5±19.48µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     70.7±0.51µs        ? ?/sec    1.26     89.2±0.60µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     72.1±1.30µs        ? ?/sec    1.30     93.7±0.73µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.06    154.2±0.99µs        ? ?/sec    1.00    145.8±1.44µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.07    108.6±0.46µs        ? ?/sec    1.00    101.9±0.82µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.06    111.0±2.15µs        ? ?/sec    1.00    104.9±1.39µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00    134.0±4.84µs        ? ?/sec    1.14    152.6±1.79µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     75.2±0.35µs        ? ?/sec    1.27     95.4±0.40µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00     76.2±2.09µs        ? ?/sec    1.30     98.9±2.35µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.05    157.8±4.39µs        ? ?/sec    1.00    150.3±0.47µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.11   117.5±14.54µs        ? ?/sec    1.00    106.2±0.65µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.05    115.2±0.82µs        ? ?/sec    1.00    109.5±0.78µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%                                                 1.00    155.7±0.84µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%                                                1.00    157.8±1.16µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%                                                1.00   218.9±13.44µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%                                               1.00    178.4±1.09µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%                                                1.00    195.4±3.97µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%                                               1.00   216.0±11.18µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%                                                  1.00    199.2±0.77µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%                                                 1.00    150.5±1.96µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%                                                 1.00    222.5±0.94µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%                                                1.00    178.8±1.14µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%                                                 1.00    197.7±4.35µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%                                                1.00    225.4±4.27µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%                                                   1.00    123.9±2.71µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%                                                  1.00    133.0±0.91µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%                                                  1.00    158.3±1.39µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%                                                 1.00    163.9±5.62µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%                                                  1.00    177.6±6.66µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%                                                 1.00    212.9±5.21µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%                                                   1.00    129.9±1.70µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%                                                  1.00    137.6±1.55µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%                                                  1.00    176.4±1.30µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%                                                 1.00    170.3±1.39µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%                                                  1.00    186.5±5.64µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%                                                 1.00    212.1±7.79µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             2.48    164.3±5.30µs        ? ?/sec    1.00     66.2±0.44µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.26     89.6±0.84µs        ? ?/sec    1.00     71.4±0.31µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               2.26    130.3±0.58µs        ? ?/sec    1.00     57.6±1.08µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            1.99    181.1±4.23µs        ? ?/sec    1.00     91.2±0.49µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             2.16    145.1±7.32µs        ? ?/sec    1.00     67.3±0.16µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              1.95    121.3±0.60µs        ? ?/sec    1.00     62.1±0.90µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              2.66    164.8±0.59µs        ? ?/sec    1.00     62.0±2.47µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.72     90.2±0.35µs        ? ?/sec    1.00     52.5±0.22µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                2.31    125.3±1.87µs        ? ?/sec    1.00     54.1±0.30µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             3.30    211.5±1.23µs        ? ?/sec    1.00     64.0±0.50µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              1.49    158.6±1.39µs        ? ?/sec    1.00    106.4±1.02µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               1.66    149.8±8.63µs        ? ?/sec    1.00     90.4±1.24µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               3.03    136.5±2.50µs        ? ?/sec    1.00     45.0±0.26µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                4.26     69.2±0.25µs        ? ?/sec    1.00     16.3±0.52µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 4.39     71.0±0.36µs        ? ?/sec    1.00     16.2±0.09µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              3.19    165.7±1.40µs        ? ?/sec    1.00     51.9±0.13µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               6.81    112.5±0.49µs        ? ?/sec    1.00     16.5±0.31µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                7.07    115.9±0.59µs        ? ?/sec    1.00     16.4±0.06µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               3.05    140.7±2.44µs        ? ?/sec    1.00     46.1±1.42µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.54     74.4±0.47µs        ? ?/sec    1.00     48.2±0.47µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.58     76.3±1.46µs        ? ?/sec    1.00     48.3±0.26µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              3.07    168.3±0.89µs        ? ?/sec    1.00     54.7±0.46µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               2.42    114.8±1.27µs        ? ?/sec    1.00     47.5±0.41µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                2.60   123.4±16.45µs        ? ?/sec    1.00     47.5±0.58µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%                                             1.00    101.5±2.22µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%                                            1.00     82.2±0.40µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%                                            1.00    123.6±1.43µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%                                           1.00    128.4±1.88µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%                                            1.00    149.1±0.82µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%                                           1.00    136.4±3.67µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%                                              1.00     91.2±0.49µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%                                             1.00     75.5±9.20µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%                                             1.00    131.5±0.47µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%                                            1.00    139.1±0.50µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%                                             1.00    140.8±1.85µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%                                            1.00    144.9±0.66µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%                                               1.00     67.6±0.37µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%                                              1.00     64.0±0.50µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%                                              1.00    109.0±0.88µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%                                             1.00   106.2±15.70µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%                                              1.00    110.7±0.74µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%                                             1.00    140.8±0.65µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%                                               1.00     72.1±1.30µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%                                              1.00     66.3±0.23µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%                                              1.00    105.6±2.88µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%                                             1.00    110.8±1.19µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%                                              1.00    125.0±5.84µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%                                             1.00    131.0±1.08µs        ? ?/sec

@geoffreyclaude geoffreyclaude force-pushed the perf/in_list_optims branch 3 times, most recently from 2fc00e5 to 3db393a Compare December 19, 2025 17:13
@geoffreyclaude
Copy link
Contributor Author

run benchmark in_list

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch_bench.sh compare_branch_bench.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 perf/in_list_optims (3db393a) to d68b629 diff
BENCH_NAME=in_list
BENCH_COMMAND=cargo bench --features=parquet --bench in_list
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_in_list_optims
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                  main                                   perf_in_list_optims
-----                                                  ----                                   -------------------
in_list/Float32/list=100/nulls=0%                      1.00     61.4±0.27µs        ? ?/sec    1.04     63.6±0.24µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.41    122.7±3.25µs        ? ?/sec    1.00     87.2±0.51µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       1.56     49.6±0.14µs        ? ?/sec    1.00     31.8±0.66µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      2.71     76.6±0.31µs        ? ?/sec    1.00     28.3±0.23µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        6.79     43.0±3.82µs        ? ?/sec    1.00      6.3±0.05µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       1.60     41.5±0.84µs        ? ?/sec    1.00     26.0±0.15µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        3.77     45.0±0.16µs        ? ?/sec    1.00     11.9±1.99µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       1.90     48.7±0.47µs        ? ?/sec    1.00     25.6±0.20µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        10.27    82.1±0.34µs        ? ?/sec    1.00      8.0±0.07µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       2.85     49.6±0.27µs        ? ?/sec    1.00     17.4±0.10µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         10.12    81.0±0.50µs        ? ?/sec    1.00      8.0±0.05µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        4.87     85.6±9.18µs        ? ?/sec    1.00     17.6±0.17µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          4.81     38.5±0.13µs        ? ?/sec    1.00      8.0±0.03µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         2.12     38.0±0.12µs        ? ?/sec    1.00     18.0±0.40µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          5.43     43.5±0.25µs        ? ?/sec    1.00      8.0±0.25µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         2.35     41.2±0.26µs        ? ?/sec    1.00     17.5±0.15µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.00     47.0±0.38µs        ? ?/sec    1.02     48.0±0.22µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.54     91.2±0.45µs        ? ?/sec    1.00     59.2±0.29µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         1.44     45.8±0.21µs        ? ?/sec    1.00     31.8±0.11µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        2.44     69.2±0.50µs        ? ?/sec    1.00     28.3±0.14µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          6.03     38.2±0.21µs        ? ?/sec    1.00      6.3±0.04µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         1.46     38.1±0.25µs        ? ?/sec    1.00     26.2±1.96µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          3.68     42.4±0.47µs        ? ?/sec    1.00     11.5±0.09µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         1.63     41.2±0.46µs        ? ?/sec    1.00     25.4±0.22µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.47     77.5±0.79µs        ? ?/sec    1.00     52.6±0.72µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 1.92    127.3±1.09µs        ? ?/sec    1.00     66.5±1.93µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.21     62.6±4.44µs        ? ?/sec    1.00     52.0±0.80µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  1.55    116.1±0.26µs        ? ?/sec    1.00     75.0±0.81µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    5.36     53.8±0.67µs        ? ?/sec    1.00     10.0±0.48µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   3.56     92.9±3.25µs        ? ?/sec    1.00     26.1±0.17µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    2.55     58.1±0.36µs        ? ?/sec    1.00     22.8±0.24µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   3.42     94.4±0.34µs        ? ?/sec    1.00     27.6±0.40µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        8.26     71.4±1.78µs        ? ?/sec    1.00      8.6±0.28µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       4.33     79.3±0.58µs        ? ?/sec    1.00     18.3±0.86µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         6.37     54.7±0.30µs        ? ?/sec    1.00      8.6±0.04µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        2.90     51.7±0.50µs        ? ?/sec    1.00     17.9±0.20µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          4.27     36.5±0.37µs        ? ?/sec    1.00      8.5±0.37µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         2.00     35.6±0.44µs        ? ?/sec    1.00     17.8±0.09µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          5.00     43.1±0.35µs        ? ?/sec    1.00      8.6±0.12µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         2.42     42.7±1.70µs        ? ?/sec    1.00     17.7±0.15µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.00    160.3±0.54µs        ? ?/sec    1.09    174.4±1.20µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.00     91.3±2.54µs        ? ?/sec    1.99    181.4±6.08µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.00    107.7±3.18µs        ? ?/sec    1.38    148.9±1.70µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.00    178.7±1.33µs        ? ?/sec    1.05    188.2±1.78µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.00    132.3±2.72µs        ? ?/sec    1.16    153.9±6.27µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.00    168.4±4.06µs        ? ?/sec    1.01    169.6±1.76µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    139.3±0.94µs        ? ?/sec    1.50    208.4±1.87µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.14    122.4±2.14µs        ? ?/sec    1.00    107.8±0.69µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.00     97.7±3.24µs        ? ?/sec    1.22    119.6±3.02µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.00    182.4±2.03µs        ? ?/sec    1.11    203.0±0.87µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.00    138.8±0.60µs        ? ?/sec    1.25    173.8±1.60µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.00   123.4±10.84µs        ? ?/sec    1.18    146.0±0.37µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00    131.8±9.42µs        ? ?/sec    1.14   150.7±14.87µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     70.8±0.37µs        ? ?/sec    1.29     91.2±1.16µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     71.9±0.35µs        ? ?/sec    1.31     94.5±0.53µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.00    154.2±2.13µs        ? ?/sec    1.10    169.0±5.03µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.00    109.8±0.45µs        ? ?/sec    1.15    126.3±0.38µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.00    111.6±1.74µs        ? ?/sec    1.16    129.0±0.76µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00    134.7±2.87µs        ? ?/sec    1.15    154.6±1.92µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     75.8±1.52µs        ? ?/sec    1.30     98.4±3.00µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00    80.3±10.28µs        ? ?/sec    1.28    102.5±1.33µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.00    157.5±1.11µs        ? ?/sec    1.11    174.1±8.37µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.00    115.2±0.72µs        ? ?/sec    1.13    130.5±1.14µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.00    115.2±1.21µs        ? ?/sec    1.20    138.2±1.54µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%                                                 1.00    145.0±0.93µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%                                                1.00    185.9±0.88µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%                                                1.00    222.8±5.76µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%                                               1.00    200.0±0.51µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%                                                1.00    195.8±0.61µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%                                               1.00    212.3±0.86µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%                                                  1.00    150.9±1.13µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%                                                 1.00    201.1±3.40µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%                                                 1.00    209.8±2.22µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%                                                1.00    199.4±0.38µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%                                                 1.00    179.2±0.40µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%                                                1.00   215.3±19.57µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%                                                   1.00    125.7±2.17µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%                                                  1.00    159.4±5.51µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%                                                  1.00    156.7±1.19µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%                                                 1.00    185.8±0.84µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%                                                  1.00    176.1±5.67µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%                                                 1.00    207.7±0.77µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%                                                   1.00    130.5±0.49µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%                                                  1.00    167.1±2.49µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%                                                  1.00    170.3±3.78µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%                                                 1.00    201.0±4.91µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%                                                  1.00    176.6±2.03µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%                                                 1.00    205.7±4.27µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             1.84    159.0±5.20µs        ? ?/sec    1.00     86.3±0.43µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.12     94.7±2.52µs        ? ?/sec    1.00     84.5±0.45µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               2.31    151.9±3.47µs        ? ?/sec    1.00     65.8±0.91µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            2.15    182.7±1.52µs        ? ?/sec    1.00     84.8±0.83µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             1.94    131.2±0.56µs        ? ?/sec    1.00     67.5±1.36µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              2.08    132.1±1.04µs        ? ?/sec    1.00     63.4±0.31µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              2.71    194.9±1.70µs        ? ?/sec    1.00     72.1±1.09µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.73     95.1±0.28µs        ? ?/sec    1.00     54.9±1.33µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                1.57     82.4±0.63µs        ? ?/sec    1.00     52.3±1.28µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             1.87   213.0±14.99µs        ? ?/sec    1.00    114.0±1.80µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              1.32    120.1±0.53µs        ? ?/sec    1.00     91.1±0.76µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               1.45    129.4±0.33µs        ? ?/sec    1.00     89.3±0.87µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               3.14    136.7±5.53µs        ? ?/sec    1.00     43.6±0.32µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                4.56     71.2±6.86µs        ? ?/sec    1.00     15.6±0.70µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 4.59     71.3±2.27µs        ? ?/sec    1.00     15.5±0.49µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              2.13    165.5±1.43µs        ? ?/sec    1.00     77.8±1.29µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               3.83    113.0±4.15µs        ? ?/sec    1.00     29.5±0.23µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                3.92    116.0±0.60µs        ? ?/sec    1.00     29.6±0.31µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               2.81    141.0±0.86µs        ? ?/sec    1.00     50.2±0.16µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.53     74.9±0.55µs        ? ?/sec    1.00     48.8±0.26µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.58     76.9±0.33µs        ? ?/sec    1.00     48.7±0.20µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              2.17    170.4±3.26µs        ? ?/sec    1.00     78.7±0.29µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               2.04    115.6±0.53µs        ? ?/sec    1.00     56.8±0.99µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                2.14    120.4±0.44µs        ? ?/sec    1.00     56.3±0.57µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%                                             1.00     84.5±0.37µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%                                            1.00    103.2±0.53µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%                                            1.00    126.7±0.42µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%                                           1.00    140.4±1.19µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%                                            1.00    134.7±1.11µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%                                           1.00    150.7±1.27µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%                                              1.00     83.0±0.72µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%                                             1.00    104.4±0.67µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%                                             1.00    130.7±9.46µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%                                            1.00    150.8±1.49µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%                                             1.00    140.3±0.53µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%                                            1.00    151.2±5.85µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%                                               1.00     70.0±1.59µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%                                              1.00     99.0±0.73µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%                                              1.00    102.8±0.72µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%                                             1.00    129.5±1.07µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%                                              1.00    104.4±0.77µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%                                             1.00    152.3±1.11µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%                                               1.00     70.4±0.25µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%                                              1.00    101.1±2.39µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%                                              1.00    103.4±0.66µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%                                             1.00    124.4±0.62µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%                                              1.00     97.3±0.32µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%                                             1.00    143.7±7.61µs        ? ?/sec

@geoffreyclaude
Copy link
Contributor Author

run benchmark in_list

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch_bench.sh compare_branch_bench.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 perf/in_list_optims (a7a52b9) to bb9a4a7 diff
BENCH_NAME=in_list
BENCH_COMMAND=cargo bench --features=parquet --bench in_list
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_in_list_optims
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                  main                                   perf_in_list_optims
-----                                                  ----                                   -------------------
in_list/Float32/list=100/nulls=0%                      1.77     76.1±1.72µs        ? ?/sec    1.00     43.1±0.17µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.11     62.9±0.21µs        ? ?/sec    1.00     56.5±0.36µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       1.65     52.4±0.34µs        ? ?/sec    1.00     31.7±0.25µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      2.18     69.9±0.30µs        ? ?/sec    1.00     32.0±0.22µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        6.52     41.5±0.16µs        ? ?/sec    1.00      6.4±0.20µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       6.86     45.0±0.32µs        ? ?/sec    1.00      6.6±0.17µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        4.11     50.6±1.79µs        ? ?/sec    1.00     12.3±0.06µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       3.92     49.0±0.29µs        ? ?/sec    1.00     12.5±0.04µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        7.38     59.1±0.27µs        ? ?/sec    1.00      8.0±0.05µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       11.95    98.0±3.33µs        ? ?/sec    1.00      8.2±0.04µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         8.74     70.0±1.04µs        ? ?/sec    1.00      8.0±0.11µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        8.48     71.1±0.54µs        ? ?/sec    1.00      8.4±0.86µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          4.86     38.8±0.17µs        ? ?/sec    1.00      8.0±0.02µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         4.67     38.6±0.14µs        ? ?/sec    1.00      8.3±0.54µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          5.21     41.6±0.22µs        ? ?/sec    1.00      8.0±0.03µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         5.01     41.1±0.27µs        ? ?/sec    1.00      8.2±0.05µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.00     45.5±0.27µs        ? ?/sec    1.17     53.1±0.37µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.34     55.9±0.46µs        ? ?/sec    1.00     41.8±0.50µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         1.56     49.4±0.26µs        ? ?/sec    1.00     31.7±0.30µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        2.14     68.6±1.41µs        ? ?/sec    1.00     32.0±0.31µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          6.00     39.2±0.22µs        ? ?/sec    1.00      6.5±1.20µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         5.85     38.3±0.80µs        ? ?/sec    1.00      6.5±0.14µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          3.44     42.4±0.73µs        ? ?/sec    1.00     12.3±0.20µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         3.32     41.6±0.60µs        ? ?/sec    1.00     12.5±0.22µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.59     83.3±1.31µs        ? ?/sec    1.00     52.3±0.18µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 1.54    108.8±0.33µs        ? ?/sec    1.00     70.4±0.88µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.77     66.5±1.20µs        ? ?/sec    1.00     37.6±0.17µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  1.56    101.4±0.53µs        ? ?/sec    1.00     64.8±0.39µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    5.42     53.3±0.30µs        ? ?/sec    1.00      9.8±0.03µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   9.31     93.8±4.25µs        ? ?/sec    1.00     10.1±0.27µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    2.26     58.5±0.64µs        ? ?/sec    1.00     25.8±0.10µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   3.60     95.0±1.28µs        ? ?/sec    1.00     26.4±0.49µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        8.64     68.1±0.57µs        ? ?/sec    1.00      7.9±0.05µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       10.21    82.6±2.17µs        ? ?/sec    1.00      8.1±0.04µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         6.56     51.6±0.58µs        ? ?/sec    1.00      7.9±0.02µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        9.69     78.3±1.17µs        ? ?/sec    1.00      8.1±0.05µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          4.84     38.1±0.54µs        ? ?/sec    1.00      7.9±0.03µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         4.61     37.3±0.11µs        ? ?/sec    1.00      8.1±0.07µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          5.46     43.2±1.25µs        ? ?/sec    1.00      7.9±0.12µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         5.12     41.3±0.36µs        ? ?/sec    1.00      8.1±0.03µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.00    166.0±1.10µs        ? ?/sec    1.23    203.6±1.13µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.00     94.4±3.57µs        ? ?/sec    1.07    100.7±0.51µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.08    120.0±2.18µs        ? ?/sec    1.00    111.3±1.72µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.08   179.4±12.51µs        ? ?/sec    1.00    166.7±0.78µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.08    131.9±0.90µs        ? ?/sec    1.00    122.4±5.48µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.13    130.8±0.44µs        ? ?/sec    1.00    115.8±1.36µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    157.7±1.02µs        ? ?/sec    1.06    166.6±2.12µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.23    125.0±1.14µs        ? ?/sec    1.00    101.5±1.82µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.00    120.5±0.60µs        ? ?/sec    1.06    128.1±0.61µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.00    174.6±3.52µs        ? ?/sec    1.35    235.4±1.61µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.09    160.3±0.99µs        ? ?/sec    1.00    147.2±1.17µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.00    121.0±1.81µs        ? ?/sec    1.06    128.4±1.47µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00    128.6±0.83µs        ? ?/sec    1.13    145.6±0.77µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     70.9±0.33µs        ? ?/sec    1.24     88.2±2.11µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     72.0±0.58µs        ? ?/sec    1.24     89.1±0.36µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.06    154.9±0.97µs        ? ?/sec    1.00    146.8±1.98µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.11    110.4±0.51µs        ? ?/sec    1.00     99.7±0.43µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.10    112.3±5.88µs        ? ?/sec    1.00    102.0±0.50µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00    134.5±1.72µs        ? ?/sec    1.15    154.1±3.15µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     74.9±1.12µs        ? ?/sec    1.24     93.1±0.43µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00     76.1±0.28µs        ? ?/sec    1.27     96.8±1.49µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.04    158.4±0.61µs        ? ?/sec    1.00    152.4±3.41µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.08    115.2±2.09µs        ? ?/sec    1.00    106.3±1.39µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.09    117.5±2.74µs        ? ?/sec    1.00    107.7±0.78µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%          1.00    158.6±5.72µs        ? ?/sec    1.04    165.5±0.91µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%         1.08    199.1±1.35µs        ? ?/sec    1.00    184.5±0.77µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%         1.00    171.0±0.82µs        ? ?/sec    1.05    179.3±0.77µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%        1.00    222.7±0.91µs        ? ?/sec    1.10    244.7±0.69µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%         1.00    201.7±2.76µs        ? ?/sec    1.03    206.9±1.26µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%        1.00    206.5±1.38µs        ? ?/sec    1.08   223.7±18.88µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%           1.00    115.8±0.92µs        ? ?/sec    1.42    165.0±2.60µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%          1.06    184.5±0.85µs        ? ?/sec    1.00    173.6±1.97µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%          1.01    176.2±0.66µs        ? ?/sec    1.00    174.1±0.92µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%         1.32    223.8±3.08µs        ? ?/sec    1.00    169.7±1.69µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%          1.00    183.1±5.76µs        ? ?/sec    1.00    182.2±1.39µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%         1.08    224.8±0.94µs        ? ?/sec    1.00    207.9±1.30µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%            1.00    103.8±0.55µs        ? ?/sec    1.16    120.1±0.71µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%           1.12    147.1±1.85µs        ? ?/sec    1.00   131.3±14.76µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%           1.00    150.0±4.61µs        ? ?/sec    1.03    155.0±1.24µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%          1.18    183.2±0.72µs        ? ?/sec    1.00    155.0±0.92µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%           1.00    162.6±0.58µs        ? ?/sec    1.05    171.3±3.72µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%          1.01    206.6±3.64µs        ? ?/sec    1.00    205.1±2.51µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%            1.00    111.3±1.03µs        ? ?/sec    1.13    126.2±1.12µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%           1.13    151.4±0.43µs        ? ?/sec    1.00    133.4±1.09µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%           1.00    164.2±2.20µs        ? ?/sec    1.00    164.6±0.79µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%          1.20    194.6±1.29µs        ? ?/sec    1.00    162.6±1.91µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%           1.01    178.0±2.29µs        ? ?/sec    1.00    176.5±1.64µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%          1.03    199.2±0.91µs        ? ?/sec    1.00    193.7±1.20µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             3.23    177.7±1.36µs        ? ?/sec    1.00     55.0±0.21µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.52     84.3±1.77µs        ? ?/sec    1.00     55.6±0.25µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               1.00     82.0±0.60µs        ? ?/sec    1.13     92.8±1.20µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            2.70    204.5±1.10µs        ? ?/sec    1.00     75.8±0.60µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             1.28    108.6±0.81µs        ? ?/sec    1.00     84.8±0.70µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              2.78    145.5±2.94µs        ? ?/sec    1.00     52.4±0.35µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              2.45    144.5±2.36µs        ? ?/sec    1.00     58.9±1.55µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.05     94.3±2.35µs        ? ?/sec    1.00     89.8±0.76µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                2.03    103.0±0.96µs        ? ?/sec    1.00     50.7±0.83µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             3.05    203.1±0.76µs        ? ?/sec    1.00     66.6±0.94µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              2.13    147.9±5.40µs        ? ?/sec    1.00     69.3±1.87µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               1.30    115.1±1.97µs        ? ?/sec    1.00     88.3±2.95µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               3.13    132.3±1.73µs        ? ?/sec    1.00     42.3±0.14µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                3.64     56.6±0.31µs        ? ?/sec    1.00     15.6±1.17µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 3.65     56.2±0.20µs        ? ?/sec    1.00     15.4±0.06µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              2.89    156.9±1.66µs        ? ?/sec    1.00     54.3±5.83µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               6.46    100.8±2.30µs        ? ?/sec    1.00     15.6±0.07µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                6.40    100.1±0.73µs        ? ?/sec    1.00     15.6±0.06µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               2.96    135.7±1.34µs        ? ?/sec    1.00     45.8±2.80µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.30     60.7±0.33µs        ? ?/sec    1.00     46.8±0.82µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.42    65.6±14.05µs        ? ?/sec    1.00     46.2±0.12µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              2.94    160.9±1.10µs        ? ?/sec    1.00     54.8±0.17µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               2.28    104.6±0.51µs        ? ?/sec    1.00     45.9±0.15µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                2.32    104.7±3.22µs        ? ?/sec    1.00     45.2±0.21µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%      2.10    181.5±1.47µs        ? ?/sec    1.00     86.3±1.81µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%     2.18    176.4±1.55µs        ? ?/sec    1.00     80.9±5.01µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%     1.56    206.9±1.87µs        ? ?/sec    1.00    132.3±1.86µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%    1.42    217.9±2.27µs        ? ?/sec    1.00    154.0±0.80µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%     1.35   214.3±20.25µs        ? ?/sec    1.00    158.6±1.16µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%    1.51    216.5±4.17µs        ? ?/sec    1.00    143.3±0.72µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%       1.28    153.6±0.67µs        ? ?/sec    1.00    119.8±0.69µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%      1.84    164.6±0.74µs        ? ?/sec    1.00     89.4±1.03µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%      1.31    215.9±1.03µs        ? ?/sec    1.00    165.1±1.35µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%     1.50    215.3±1.80µs        ? ?/sec    1.00    143.5±0.90µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%      1.25    210.5±0.77µs        ? ?/sec    1.00   168.3±14.20µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%     1.34    215.1±1.25µs        ? ?/sec    1.00    160.7±1.08µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%        1.37     99.7±0.83µs        ? ?/sec    1.00     72.6±0.27µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%       1.90    131.9±0.64µs        ? ?/sec    1.00     69.3±0.24µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%       1.34    160.7±3.62µs        ? ?/sec    1.00    119.6±3.16µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%      1.65    185.7±1.00µs        ? ?/sec    1.00    112.6±2.73µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%       1.43    182.4±1.07µs        ? ?/sec    1.00    127.3±0.38µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%      1.35    212.0±0.93µs        ? ?/sec    1.00    157.4±0.83µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%        1.39    108.6±1.86µs        ? ?/sec    1.00     78.0±3.63µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%       1.95    140.2±0.84µs        ? ?/sec    1.00     71.9±0.27µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%       1.46    171.3±2.19µs        ? ?/sec    1.00    117.4±0.66µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%      1.88    186.5±3.16µs        ? ?/sec    1.00     99.2±0.51µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%       1.53    177.8±1.01µs        ? ?/sec    1.00    116.1±0.53µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%      1.48   220.1±12.25µs        ? ?/sec    1.00    148.5±0.40µs        ? ?/sec

@geoffreyclaude geoffreyclaude force-pushed the perf/in_list_optims branch 4 times, most recently from c446ba3 to 4fd3a34 Compare December 23, 2025 12:02
@github-actions github-actions bot added the physical-plan Changes to the physical-plan crate label Dec 23, 2025
@geoffreyclaude
Copy link
Contributor Author

run benchmark in_list

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch_bench.sh compare_branch_bench.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 perf/in_list_optims (4fd3a34) to e6faacb diff
BENCH_NAME=in_list
BENCH_COMMAND=cargo bench --features=parquet --bench in_list
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_in_list_optims
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                  main                                   perf_in_list_optims
-----                                                  ----                                   -------------------
in_list/Float32/list=100/nulls=0%                      1.00     59.7±1.36µs        ? ?/sec    7.62    454.5±1.74µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.00     64.7±0.30µs        ? ?/sec    7.94    513.5±7.80µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       1.19     52.4±0.88µs        ? ?/sec    1.00     44.1±1.17µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      1.60     70.9±0.35µs        ? ?/sec    1.00     44.4±0.24µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        2.67     41.8±0.19µs        ? ?/sec    1.00     15.7±0.21µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       2.64     41.8±0.71µs        ? ?/sec    1.00     15.8±0.08µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        2.07     50.3±0.46µs        ? ?/sec    1.00     24.3±0.21µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       1.83     44.9±0.12µs        ? ?/sec    1.00     24.5±0.12µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        6.10     74.8±0.99µs        ? ?/sec    1.00     12.3±0.09µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       4.08     50.7±0.23µs        ? ?/sec    1.00     12.4±0.05µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         6.60     81.1±2.54µs        ? ?/sec    1.00     12.3±0.23µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        5.18     65.0±1.47µs        ? ?/sec    1.00     12.6±0.31µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          3.17     38.8±0.21µs        ? ?/sec    1.00     12.3±0.04µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         3.04     37.9±0.17µs        ? ?/sec    1.00     12.5±0.09µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          3.44     42.2±0.52µs        ? ?/sec    1.00     12.3±0.06µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         3.30     40.9±0.20µs        ? ?/sec    1.00     12.4±0.04µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.36     64.7±0.32µs        ? ?/sec    1.00     47.5±1.33µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.00     44.5±0.48µs        ? ?/sec    1.63     72.4±0.73µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         1.36     59.8±0.42µs        ? ?/sec    1.00     44.0±0.63µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        1.84     81.4±1.15µs        ? ?/sec    1.00     44.3±0.69µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          2.52     39.7±4.40µs        ? ?/sec    1.00     15.7±0.63µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         2.39     38.0±0.17µs        ? ?/sec    1.00     15.9±0.13µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          1.72     41.8±0.15µs        ? ?/sec    1.00     24.4±0.37µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         1.69     41.7±1.28µs        ? ?/sec    1.00     24.7±1.21µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.00     66.6±1.96µs        ? ?/sec    6.95    462.6±1.30µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 1.00    127.7±1.30µs        ? ?/sec    4.02    513.8±2.89µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.00     90.0±0.53µs        ? ?/sec    4.83    434.9±1.85µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  1.00   135.3±16.42µs        ? ?/sec    3.68    497.5±2.14µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    4.00     54.0±0.42µs        ? ?/sec    1.00     13.5±0.24µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   6.68     91.5±0.44µs        ? ?/sec    1.00     13.7±0.05µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    2.41     58.5±4.05µs        ? ?/sec    1.00     24.3±0.71µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   3.92     95.8±0.43µs        ? ?/sec    1.00     24.4±0.14µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        8.57     67.8±0.59µs        ? ?/sec    1.00      7.9±0.23µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       9.58     77.8±1.30µs        ? ?/sec    1.00      8.1±0.23µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         9.74     76.7±1.66µs        ? ?/sec    1.00      7.9±0.06µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        5.71     47.9±0.26µs        ? ?/sec    1.00      8.4±1.22µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          4.89     38.5±0.43µs        ? ?/sec    1.00      7.9±0.03µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         4.50     36.6±0.90µs        ? ?/sec    1.00      8.1±0.11µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          5.52     43.6±0.17µs        ? ?/sec    1.00      7.9±0.16µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         5.11     41.3±0.14µs        ? ?/sec    1.00      8.1±0.04µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.00    161.5±9.82µs        ? ?/sec    1.13    182.0±2.63µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.00    107.1±0.93µs        ? ?/sec    1.19    127.1±3.20µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.00    116.2±0.67µs        ? ?/sec    1.05    122.2±0.76µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.07    189.7±4.84µs        ? ?/sec    1.00    176.8±1.99µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.03    130.3±1.72µs        ? ?/sec    1.00    126.2±1.27µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.06    136.1±0.56µs        ? ?/sec    1.00    128.7±1.27µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    160.1±1.04µs        ? ?/sec    1.15    184.1±3.62µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.22    124.2±1.51µs        ? ?/sec    1.00    101.5±0.32µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.04    133.5±0.64µs        ? ?/sec    1.00    128.6±0.53µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.24    202.0±1.41µs        ? ?/sec    1.00    163.4±2.18µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.00    146.0±0.81µs        ? ?/sec    1.21    176.2±1.67µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.00    122.3±0.66µs        ? ?/sec    1.15    141.0±0.77µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00    128.8±0.93µs        ? ?/sec    1.13    145.1±1.27µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     70.4±0.42µs        ? ?/sec    1.25     87.9±1.05µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     72.8±3.35µs        ? ?/sec    1.23     89.4±1.44µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.07    156.3±1.85µs        ? ?/sec    1.00    146.4±2.73µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.11    111.6±4.03µs        ? ?/sec    1.00    100.8±0.69µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.09    111.3±1.02µs        ? ?/sec    1.00    102.2±0.83µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00    132.7±1.22µs        ? ?/sec    1.15    152.8±0.70µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     74.2±0.23µs        ? ?/sec    1.28     94.7±1.82µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00     77.3±1.62µs        ? ?/sec    1.24     95.7±0.27µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.04    160.0±3.93µs        ? ?/sec    1.00    153.6±8.21µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.11    117.0±5.96µs        ? ?/sec    1.00    105.5±0.48µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.08    117.1±1.27µs        ? ?/sec    1.00    108.1±4.37µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%          1.00    126.5±7.45µs        ? ?/sec    1.25    158.0±1.01µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%         1.22    189.7±2.19µs        ? ?/sec    1.00    155.6±3.23µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%         1.00    177.1±0.88µs        ? ?/sec    1.00    178.0±2.45µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%        1.09    202.6±1.87µs        ? ?/sec    1.00    185.5±1.25µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%         1.00    192.5±0.88µs        ? ?/sec    1.00    192.1±7.23µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%        1.01    205.9±1.13µs        ? ?/sec    1.00    204.7±0.60µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%           1.00    147.6±5.89µs        ? ?/sec    1.02    150.4±2.20µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%          1.38    195.2±2.78µs        ? ?/sec    1.00    141.1±1.01µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%          1.00    204.2±5.23µs        ? ?/sec    1.11    227.1±2.69µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%         1.01    228.2±2.85µs        ? ?/sec    1.00    224.9±5.04µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%          1.00    181.3±4.04µs        ? ?/sec    1.07    194.7±5.82µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%         1.02    206.6±1.65µs        ? ?/sec    1.00    201.5±1.93µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%            1.00    105.1±0.91µs        ? ?/sec    1.16    122.0±3.12µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%           1.15    148.1±0.89µs        ? ?/sec    1.00    129.3±1.81µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%           1.00    148.6±1.97µs        ? ?/sec    1.05    156.5±0.84µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%          1.18    185.4±2.72µs        ? ?/sec    1.00    157.5±1.93µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%           1.00    164.5±3.04µs        ? ?/sec    1.04    170.4±0.56µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%          1.03   210.6±19.69µs        ? ?/sec    1.00    204.8±2.25µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%            1.00    110.1±1.97µs        ? ?/sec    1.19   131.0±13.51µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%           1.12    150.7±0.76µs        ? ?/sec    1.00    135.1±5.01µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%           1.00    160.3±1.26µs        ? ?/sec    1.03    165.2±0.66µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%          1.15    190.6±0.57µs        ? ?/sec    1.00    165.4±2.44µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%           1.00    171.7±1.11µs        ? ?/sec    1.04    177.8±1.18µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%          1.00    196.2±6.68µs        ? ?/sec    1.04    203.6±0.91µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             1.00    148.2±0.86µs        ? ?/sec    4.22    625.8±3.84µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.00     88.0±3.87µs        ? ?/sec    5.45    479.4±1.34µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               1.00     81.6±0.43µs        ? ?/sec    5.92    483.0±1.67µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            1.00    186.9±7.44µs        ? ?/sec    3.85   719.2±40.31µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             1.00    118.0±0.82µs        ? ?/sec    4.43    522.8±2.24µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              1.00    118.2±1.15µs        ? ?/sec    4.48   529.4±28.83µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              1.00    142.2±1.44µs        ? ?/sec    4.13    587.6±2.50µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.00    112.7±5.83µs        ? ?/sec    3.99    450.1±5.89µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                1.00     78.8±1.00µs        ? ?/sec    5.75    453.5±2.69µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             1.00    187.8±5.16µs        ? ?/sec    3.63    682.3±4.29µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              1.00    112.6±0.53µs        ? ?/sec    4.51    508.5±2.75µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               1.00    131.4±0.62µs        ? ?/sec    3.87    508.0±2.95µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               1.00    131.6±0.90µs        ? ?/sec    4.37    575.2±3.03µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                3.38     56.3±0.41µs        ? ?/sec    1.00     16.7±0.07µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 3.38     56.3±0.30µs        ? ?/sec    1.00     16.7±0.11µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              1.00    157.2±2.29µs        ? ?/sec    4.28    672.9±3.70µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               5.96    100.5±0.76µs        ? ?/sec    1.00     16.9±0.12µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                6.01    101.3±3.79µs        ? ?/sec    1.00     16.9±0.05µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               1.00    135.9±0.92µs        ? ?/sec    4.25    578.0±2.97µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.00     60.6±0.59µs        ? ?/sec    7.44    451.3±6.33µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.00     60.9±2.67µs        ? ?/sec    7.40    450.5±2.22µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              1.00    160.6±1.56µs        ? ?/sec    4.21    676.8±9.15µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               1.00   115.8±24.16µs        ? ?/sec    4.34    503.2±2.20µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                1.00    103.6±0.36µs        ? ?/sec    4.85    502.8±1.39µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%      1.00    151.9±1.66µs        ? ?/sec    4.30   653.6±10.08µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%     1.00    149.3±0.91µs        ? ?/sec    4.84    723.3±4.67µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%     1.00    196.2±1.27µs        ? ?/sec    4.83   947.2±11.58µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%    1.00    202.0±1.86µs        ? ?/sec    4.67   942.6±13.78µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%     1.00    207.4±1.47µs        ? ?/sec    6.58  1365.7±13.93µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%    1.00    224.3±0.62µs        ? ?/sec    6.18  1387.0±12.03µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%       1.00    152.3±1.65µs        ? ?/sec    4.00   609.8±15.21µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%      1.00    161.3±0.83µs        ? ?/sec    4.30    694.4±5.68µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%      1.00    197.6±0.91µs        ? ?/sec    4.97   981.5±13.11µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%     1.00    221.2±1.10µs        ? ?/sec    4.49  992.8±129.92µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%      1.00    197.0±2.14µs        ? ?/sec    8.34  1643.4±12.83µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%     1.00   224.4±23.72µs        ? ?/sec    6.31  1415.5±15.05µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%        1.00    100.5±0.93µs        ? ?/sec    5.95   598.2±15.32µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%       1.00    133.3±1.82µs        ? ?/sec    5.10    679.9±4.18µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%       1.00    159.0±0.57µs        ? ?/sec    6.09   969.0±20.30µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%      1.00    186.8±2.02µs        ? ?/sec    5.30    989.7±5.52µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%       1.00    182.6±2.13µs        ? ?/sec    6.28  1145.9±10.59µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%      1.00    212.0±0.60µs        ? ?/sec    7.24   1533.9±8.83µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%        1.00    107.0±0.61µs        ? ?/sec    5.67   605.9±15.73µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%       1.00    140.3±1.37µs        ? ?/sec    4.86    681.6±4.03µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%       1.00    166.6±1.51µs        ? ?/sec    5.40   900.4±14.86µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%      1.00    183.0±0.50µs        ? ?/sec    4.47    817.4±7.33µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%       1.00    172.6±6.29µs        ? ?/sec    6.76  1166.2±70.13µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%      1.00    214.0±1.32µs        ? ?/sec    6.22   1331.7±8.03µs        ? ?/sec

@github-actions github-actions bot removed the physical-plan Changes to the physical-plan crate label Dec 23, 2025
@geoffreyclaude
Copy link
Contributor Author

run benchmark in_list

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch_bench.sh compare_branch_bench.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 perf/in_list_optims (0f312b1) to e6faacb diff
BENCH_NAME=in_list
BENCH_COMMAND=cargo bench --features=parquet --bench in_list
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_in_list_optims
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                  main                                   perf_in_list_optims
-----                                                  ----                                   -------------------
in_list/Float32/list=100/nulls=0%                      1.00     54.8±0.20µs        ? ?/sec    1.06     57.9±4.52µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.58     99.2±1.08µs        ? ?/sec    1.00     62.8±1.20µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       2.54     80.6±1.77µs        ? ?/sec    1.00     31.7±0.13µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      1.51     48.2±0.24µs        ? ?/sec    1.00     32.0±0.11µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        6.57     41.7±0.61µs        ? ?/sec    1.00      6.3±0.08µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       6.39     41.7±1.77µs        ? ?/sec    1.00      6.5±0.04µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        3.69     45.4±0.30µs        ? ?/sec    1.00     12.3±0.07µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       3.54     44.3±0.19µs        ? ?/sec    1.00     12.5±0.06µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        6.19     49.5±0.21µs        ? ?/sec    1.00      8.0±0.07µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       5.48     45.0±0.32µs        ? ?/sec    1.00      8.2±0.04µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         6.06     48.4±0.35µs        ? ?/sec    1.00      8.0±0.03µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        5.34     43.8±0.37µs        ? ?/sec    1.00      8.2±0.05µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          4.93     39.5±2.02µs        ? ?/sec    1.00      8.0±0.11µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         4.72     38.8±0.78µs        ? ?/sec    1.00      8.2±0.05µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          5.34     42.9±3.20µs        ? ?/sec    1.00      8.0±0.11µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         4.77     40.9±0.26µs        ? ?/sec    1.00      8.6±1.24µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.29     62.1±0.57µs        ? ?/sec    1.00     48.1±0.28µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.00     62.0±0.28µs        ? ?/sec    1.42     87.7±0.55µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         2.32     73.9±0.79µs        ? ?/sec    1.00     31.8±0.91µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        1.36     43.8±0.52µs        ? ?/sec    1.00     32.2±1.42µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          6.20     39.1±0.18µs        ? ?/sec    1.00      6.3±0.02µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         5.80     38.0±0.26µs        ? ?/sec    1.00      6.6±0.13µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          3.48     42.8±0.79µs        ? ?/sec    1.00     12.3±0.05µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         3.34     41.9±0.96µs        ? ?/sec    1.00     12.5±0.07µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.41     66.0±0.45µs        ? ?/sec    1.00     46.9±0.61µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 2.71    135.4±1.34µs        ? ?/sec    1.00     50.0±0.39µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.13     90.5±0.85µs        ? ?/sec    1.00     80.3±2.40µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  1.22    125.6±8.01µs        ? ?/sec    1.00    103.1±2.37µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    5.42     53.4±0.57µs        ? ?/sec    1.00      9.9±0.06µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   9.15     91.7±0.57µs        ? ?/sec    1.00     10.0±0.02µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    2.22     57.7±1.07µs        ? ?/sec    1.00     26.0±0.18µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   3.62     94.9±0.79µs        ? ?/sec    1.00     26.2±0.52µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        8.57     67.5±0.40µs        ? ?/sec    1.00      7.9±0.03µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       9.34     75.4±1.14µs        ? ?/sec    1.00      8.1±0.04µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         9.51     76.2±0.91µs        ? ?/sec    1.00      8.0±0.71µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        6.00     48.7±0.41µs        ? ?/sec    1.00      8.1±0.12µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          4.76     39.3±1.81µs        ? ?/sec    1.00      8.3±1.25µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         4.48     36.3±0.21µs        ? ?/sec    1.00      8.1±0.17µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          5.23     41.3±0.37µs        ? ?/sec    1.00      7.9±0.12µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         4.87     39.4±0.46µs        ? ?/sec    1.00      8.1±0.18µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.00    166.8±1.29µs        ? ?/sec    1.03    172.1±1.92µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.00    101.9±3.66µs        ? ?/sec    1.72    175.2±0.98µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.00     87.6±0.27µs        ? ?/sec    1.20    105.1±1.02µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.00    171.8±1.46µs        ? ?/sec    1.02    174.5±1.04µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.02    123.1±3.47µs        ? ?/sec    1.00    120.7±1.62µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.34    158.9±0.68µs        ? ?/sec    1.00    118.5±4.12µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    159.7±1.03µs        ? ?/sec    1.03   164.4±15.73µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.00     81.4±1.65µs        ? ?/sec    1.36    110.8±1.45µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.00    103.0±0.25µs        ? ?/sec    1.38    141.8±1.03µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.00    176.3±1.19µs        ? ?/sec    1.02    179.7±3.54µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.00   124.5±12.54µs        ? ?/sec    1.21    151.0±0.49µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.17    155.8±0.99µs        ? ?/sec    1.00    133.1±0.88µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00    128.6±1.10µs        ? ?/sec    1.14    146.4±1.29µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     70.5±0.30µs        ? ?/sec    1.28     90.4±4.46µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     71.7±0.51µs        ? ?/sec    1.25     89.6±0.26µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.07    156.3±1.34µs        ? ?/sec    1.00    146.3±0.96µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.11    111.4±1.54µs        ? ?/sec    1.00    100.2±1.02µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.09    112.1±2.76µs        ? ?/sec    1.00    102.6±0.61µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00    135.4±3.19µs        ? ?/sec    1.12    151.8±0.84µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     74.2±0.61µs        ? ?/sec    1.27     94.4±0.95µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00     76.7±1.31µs        ? ?/sec    1.24     95.4±3.03µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.06    159.6±1.24µs        ? ?/sec    1.00    151.2±1.13µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.08    114.8±1.30µs        ? ?/sec    1.00    106.0±0.80µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.07    116.0±0.90µs        ? ?/sec    1.00    108.7±1.20µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%          1.00    130.6±2.12µs        ? ?/sec    1.08    141.7±1.05µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%         1.04    180.0±1.13µs        ? ?/sec    1.00    172.4±1.05µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%         1.00    194.2±0.63µs        ? ?/sec    1.15    223.9±1.54µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%        1.14    201.0±2.42µs        ? ?/sec    1.00    176.5±1.56µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%         1.00    182.5±4.86µs        ? ?/sec    1.03    188.7±2.29µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%        1.00    213.6±1.54µs        ? ?/sec    1.00    213.3±1.35µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%           1.00    117.5±4.42µs        ? ?/sec    1.32    155.6±5.89µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%          1.00    163.3±0.83µs        ? ?/sec    1.24    201.8±1.71µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%          1.08    189.0±6.78µs        ? ?/sec    1.00    175.1±2.09µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%         1.32    230.3±0.46µs        ? ?/sec    1.00    175.1±2.15µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%          1.03    184.4±1.58µs        ? ?/sec    1.00    179.7±4.08µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%         1.00    200.1±1.30µs        ? ?/sec    1.00    199.1±0.49µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%            1.00    104.1±0.72µs        ? ?/sec    1.15    119.9±0.76µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%           1.15    147.6±1.07µs        ? ?/sec    1.00    127.9±1.46µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%           1.00    150.0±1.69µs        ? ?/sec    1.03    154.0±2.55µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%          1.00    186.5±1.76µs        ? ?/sec    1.08    202.0±1.71µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%           1.00    167.3±0.95µs        ? ?/sec    1.02    170.1±1.07µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%          1.02    207.0±1.22µs        ? ?/sec    1.00    203.3±1.99µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%            1.00    109.7±0.47µs        ? ?/sec    1.17    127.9±3.17µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%           1.14    151.6±0.89µs        ? ?/sec    1.00    133.4±1.36µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%           1.00    164.8±6.72µs        ? ?/sec    1.01    166.6±2.30µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%          1.19    195.0±1.05µs        ? ?/sec    1.00    164.1±4.27µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%           1.00    175.5±0.63µs        ? ?/sec    1.02    178.5±2.52µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%          1.04   202.5±14.06µs        ? ?/sec    1.00    194.2±2.53µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             2.94    151.5±1.31µs        ? ?/sec    1.00     51.5±0.48µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.41     75.6±1.02µs        ? ?/sec    1.00     53.8±0.69µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               1.00     70.8±0.17µs        ? ?/sec    1.50    106.0±1.77µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            3.20    199.3±0.50µs        ? ?/sec    1.00     62.2±4.28µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             2.31    131.9±4.06µs        ? ?/sec    1.00     57.0±0.51µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              2.16    113.7±0.99µs        ? ?/sec    1.00     52.6±1.62µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              2.05    189.0±1.10µs        ? ?/sec    1.00     92.1±0.85µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.00     74.3±0.28µs        ? ?/sec    1.16     85.9±6.19µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                1.21    106.3±7.60µs        ? ?/sec    1.00     87.9±0.91µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             3.09    203.6±1.76µs        ? ?/sec    1.00     66.0±0.78µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              1.93    110.4±0.82µs        ? ?/sec    1.00     57.3±3.17µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               2.06    144.8±1.69µs        ? ?/sec    1.00     70.4±0.97µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               3.11    132.1±1.23µs        ? ?/sec    1.00     42.4±0.19µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                3.66     56.4±0.37µs        ? ?/sec    1.00     15.4±0.05µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 3.71     57.2±0.60µs        ? ?/sec    1.00     15.4±0.06µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              2.83    157.4±1.86µs        ? ?/sec    1.00     55.6±0.87µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               6.44    100.9±0.77µs        ? ?/sec    1.00     15.7±0.24µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                6.41    101.0±3.04µs        ? ?/sec    1.00     15.8±0.30µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               3.02    136.8±4.98µs        ? ?/sec    1.00     45.2±0.28µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.32     61.6±1.75µs        ? ?/sec    1.00     46.7±0.14µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.33     60.8±0.25µs        ? ?/sec    1.00     45.8±0.22µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              2.88    160.6±0.77µs        ? ?/sec    1.00     55.8±0.28µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               2.34    106.0±3.23µs        ? ?/sec    1.00     45.4±1.49µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                2.28    104.2±0.87µs        ? ?/sec    1.00     45.6±0.26µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%      1.00    122.3±1.07µs        ? ?/sec    1.01    124.1±1.08µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%     1.51    147.8±0.66µs        ? ?/sec    1.00     97.7±0.53µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%     1.41    185.7±1.51µs        ? ?/sec    1.00    131.4±1.06µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%    1.73    204.8±0.40µs        ? ?/sec    1.00    118.3±0.67µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%     1.36    209.4±1.13µs        ? ?/sec    1.00    154.4±2.65µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%    1.57    225.1±1.55µs        ? ?/sec    1.00    143.2±3.56µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%       1.51    136.6±0.62µs        ? ?/sec    1.00     90.5±0.37µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%      1.34    180.5±0.93µs        ? ?/sec    1.00    134.4±1.52µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%      1.34    188.2±2.21µs        ? ?/sec    1.00    140.4±2.10µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%     1.64    198.2±1.36µs        ? ?/sec    1.00    121.0±1.04µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%      1.12    196.0±0.95µs        ? ?/sec    1.00    175.0±0.97µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%     1.42    225.5±3.47µs        ? ?/sec    1.00    158.4±2.16µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%        1.36    101.5±1.02µs        ? ?/sec    1.00     74.6±0.36µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%       1.98   138.3±15.44µs        ? ?/sec    1.00     70.0±4.91µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%       1.36    162.4±4.34µs        ? ?/sec    1.00    119.3±0.97µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%      1.66    187.0±1.12µs        ? ?/sec    1.00    112.6±2.74µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%       1.47    187.5±4.28µs        ? ?/sec    1.00    127.2±3.39µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%      1.33    214.2±0.56µs        ? ?/sec    1.00    161.1±1.06µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%        1.38    109.4±1.46µs        ? ?/sec    1.00     79.4±0.57µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%       1.94    142.5±7.64µs        ? ?/sec    1.00     73.6±0.41µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%       1.36    166.7±0.61µs        ? ?/sec    1.00    122.9±2.02µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%      1.82    188.4±0.83µs        ? ?/sec    1.00    103.8±0.56µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%       1.47    177.4±1.73µs        ? ?/sec    1.00    120.8±1.18µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%      1.40    217.0±1.71µs        ? ?/sec    1.00    155.2±7.03µs        ? ?/sec

@geoffreyclaude
Copy link
Contributor Author

run benchmark in_list

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch_bench.sh compare_branch_bench.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 perf/in_list_optims (97e63a4) to e6faacb diff
BENCH_NAME=in_list
BENCH_COMMAND=cargo bench --features=parquet --bench in_list
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_in_list_optims
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                  main                                   perf_in_list_optims
-----                                                  ----                                   -------------------
in_list/Float32/list=100/nulls=0%                      1.16     53.7±1.08µs        ? ?/sec    1.00     46.1±0.87µs        ? ?/sec
in_list/Float32/list=100/nulls=20%                     1.00     55.8±0.33µs        ? ?/sec    1.45     80.7±1.04µs        ? ?/sec
in_list/Float32/list=28/nulls=0%                       1.52     48.3±0.28µs        ? ?/sec    1.00     31.7±0.11µs        ? ?/sec
in_list/Float32/list=28/nulls=20%                      2.80     89.4±0.76µs        ? ?/sec    1.00     32.0±0.13µs        ? ?/sec
in_list/Float32/list=3/nulls=0%                        6.66     42.2±0.24µs        ? ?/sec    1.00      6.3±0.03µs        ? ?/sec
in_list/Float32/list=3/nulls=20%                       6.32     41.4±0.17µs        ? ?/sec    1.00      6.5±0.05µs        ? ?/sec
in_list/Float32/list=8/nulls=0%                        3.93     45.9±0.15µs        ? ?/sec    1.00     11.7±0.54µs        ? ?/sec
in_list/Float32/list=8/nulls=20%                       3.91     46.0±6.77µs        ? ?/sec    1.00     11.8±0.04µs        ? ?/sec
in_list/Int16/list=100/nulls=0%                        7.38     59.3±0.37µs        ? ?/sec    1.00      8.0±0.25µs        ? ?/sec
in_list/Int16/list=100/nulls=20%                       8.17     67.3±0.49µs        ? ?/sec    1.00      8.2±0.11µs        ? ?/sec
in_list/Int16/list=28/nulls=0%                         8.70     69.7±4.51µs        ? ?/sec    1.00      8.0±0.03µs        ? ?/sec
in_list/Int16/list=28/nulls=20%                        5.34     43.8±0.27µs        ? ?/sec    1.00      8.2±0.03µs        ? ?/sec
in_list/Int16/list=3/nulls=0%                          4.90     39.2±0.31µs        ? ?/sec    1.00      8.0±0.02µs        ? ?/sec
in_list/Int16/list=3/nulls=20%                         4.63     38.1±0.16µs        ? ?/sec    1.00      8.2±0.04µs        ? ?/sec
in_list/Int16/list=8/nulls=0%                          5.15     41.4±0.16µs        ? ?/sec    1.00      8.1±0.21µs        ? ?/sec
in_list/Int16/list=8/nulls=20%                         4.79     40.4±0.15µs        ? ?/sec    1.00      8.4±1.01µs        ? ?/sec
in_list/Int32/list=100/nulls=0%                        1.00     53.2±0.70µs        ? ?/sec    1.09     58.2±0.27µs        ? ?/sec
in_list/Int32/list=100/nulls=20%                       1.13     50.9±0.81µs        ? ?/sec    1.00     45.1±0.19µs        ? ?/sec
in_list/Int32/list=28/nulls=0%                         2.88     91.5±0.54µs        ? ?/sec    1.00     31.7±0.45µs        ? ?/sec
in_list/Int32/list=28/nulls=20%                        2.67     86.0±1.14µs        ? ?/sec    1.00     32.1±1.46µs        ? ?/sec
in_list/Int32/list=3/nulls=0%                          6.02     38.3±0.23µs        ? ?/sec    1.00      6.4±0.16µs        ? ?/sec
in_list/Int32/list=3/nulls=20%                         5.86     38.5±1.31µs        ? ?/sec    1.00      6.6±0.05µs        ? ?/sec
in_list/Int32/list=8/nulls=0%                          3.64     42.2±0.22µs        ? ?/sec    1.00     11.6±0.06µs        ? ?/sec
in_list/Int32/list=8/nulls=20%                         3.44     40.6±0.46µs        ? ?/sec    1.00     11.8±0.08µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=0%                  1.03     69.0±0.90µs        ? ?/sec    1.00     66.8±0.26µs        ? ?/sec
in_list/TimestampNs/list=100/nulls=20%                 1.17    110.1±0.78µs        ? ?/sec    1.00     93.8±3.05µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=0%                   1.18     89.9±1.58µs        ? ?/sec    1.00     76.1±0.80µs        ? ?/sec
in_list/TimestampNs/list=28/nulls=20%                  1.78    131.1±0.95µs        ? ?/sec    1.00     73.7±0.74µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=0%                    5.40     53.7±1.06µs        ? ?/sec    1.00      9.9±0.39µs        ? ?/sec
in_list/TimestampNs/list=3/nulls=20%                   9.07     91.6±0.93µs        ? ?/sec    1.00     10.1±0.10µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=0%                    2.59     57.2±0.81µs        ? ?/sec    1.00     22.1±0.41µs        ? ?/sec
in_list/TimestampNs/list=8/nulls=20%                   4.30     95.7±1.68µs        ? ?/sec    1.00     22.3±0.09µs        ? ?/sec
in_list/UInt8/list=100/nulls=0%                        8.64     74.6±1.30µs        ? ?/sec    1.00      8.6±0.10µs        ? ?/sec
in_list/UInt8/list=100/nulls=20%                       8.72     77.3±0.50µs        ? ?/sec    1.00      8.9±0.10µs        ? ?/sec
in_list/UInt8/list=28/nulls=0%                         5.99     51.7±0.44µs        ? ?/sec    1.00      8.6±0.06µs        ? ?/sec
in_list/UInt8/list=28/nulls=20%                        5.63     49.9±0.86µs        ? ?/sec    1.00      8.9±0.04µs        ? ?/sec
in_list/UInt8/list=3/nulls=0%                          4.59     40.0±0.11µs        ? ?/sec    1.00      8.7±0.29µs        ? ?/sec
in_list/UInt8/list=3/nulls=20%                         4.17     37.0±0.52µs        ? ?/sec    1.00      8.9±0.05µs        ? ?/sec
in_list/UInt8/list=8/nulls=0%                          5.06     43.7±0.57µs        ? ?/sec    1.00      8.6±0.17µs        ? ?/sec
in_list/UInt8/list=8/nulls=20%                         4.61     40.9±0.97µs        ? ?/sec    1.00      8.9±0.14µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=100                 1.03    192.4±9.37µs        ? ?/sec    1.00    186.8±1.54µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=12                  1.00     97.0±3.01µs        ? ?/sec    1.60    154.7±2.14µs        ? ?/sec
in_list/Utf8/list=100/nulls=0%/str=3                   1.00     91.6±0.25µs        ? ?/sec    1.38    126.3±1.10µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=100                1.07    179.9±2.68µs        ? ?/sec    1.00    168.7±7.64µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=12                 1.04    134.2±0.59µs        ? ?/sec    1.00    128.9±0.88µs        ? ?/sec
in_list/Utf8/list=100/nulls=20%/str=3                  1.07    146.7±4.33µs        ? ?/sec    1.00    136.5±0.95µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=100                  1.00    148.9±1.58µs        ? ?/sec    1.19    177.2±1.02µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=12                   1.21    126.5±0.62µs        ? ?/sec    1.00    104.3±1.68µs        ? ?/sec
in_list/Utf8/list=28/nulls=0%/str=3                    1.00     81.8±0.36µs        ? ?/sec    1.30    105.9±1.48µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=100                 1.06    195.3±5.34µs        ? ?/sec    1.00    184.9±1.44µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=12                  1.33    158.8±0.59µs        ? ?/sec    1.00    119.2±1.02µs        ? ?/sec
in_list/Utf8/list=28/nulls=20%/str=3                   1.09    152.0±2.35µs        ? ?/sec    1.00    139.0±0.91µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=100                   1.00    128.9±2.61µs        ? ?/sec    1.17    151.1±6.76µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=12                    1.00     70.7±0.98µs        ? ?/sec    1.31     92.6±0.39µs        ? ?/sec
in_list/Utf8/list=3/nulls=0%/str=3                     1.00     71.8±0.64µs        ? ?/sec    1.31     93.8±0.24µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=100                  1.03    155.8±1.38µs        ? ?/sec    1.00    150.9±1.31µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=12                   1.06    110.9±0.85µs        ? ?/sec    1.00    104.8±0.43µs        ? ?/sec
in_list/Utf8/list=3/nulls=20%/str=3                    1.03    111.4±0.55µs        ? ?/sec    1.00    108.2±0.89µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=100                   1.00    133.8±0.95µs        ? ?/sec    1.17    156.6±1.26µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=12                    1.00     73.9±0.36µs        ? ?/sec    1.35     99.7±1.79µs        ? ?/sec
in_list/Utf8/list=8/nulls=0%/str=3                     1.00     75.8±0.33µs        ? ?/sec    1.33    101.0±1.71µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=100                  1.03    160.7±7.38µs        ? ?/sec    1.00    156.5±1.95µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=12                   1.06    115.8±1.38µs        ? ?/sec    1.00    109.1±0.73µs        ? ?/sec
in_list/Utf8/list=8/nulls=20%/str=3                    1.03    116.0±0.90µs        ? ?/sec    1.00    112.5±0.65µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=0%          1.00   122.6±14.38µs        ? ?/sec    1.26    154.0±1.41µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=0%/nulls=20%         1.08    159.3±1.66µs        ? ?/sec    1.00    146.9±0.73µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=0%         1.00    181.5±1.66µs        ? ?/sec    1.21    220.2±1.23µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=25%/nulls=20%        1.15    223.7±0.91µs        ? ?/sec    1.00    193.7±1.56µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=0%         1.07    196.8±0.37µs        ? ?/sec    1.00    184.7±1.55µs        ? ?/sec
in_list/Utf8/mixed/list=100/match=75%/nulls=20%        1.11    222.2±0.95µs        ? ?/sec    1.00    200.7±1.61µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=0%           1.09    150.4±0.93µs        ? ?/sec    1.00    138.2±1.99µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=0%/nulls=20%          1.34    194.6±1.82µs        ? ?/sec    1.00    145.1±4.39µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=0%          1.04    210.1±1.35µs        ? ?/sec    1.00    201.1±1.07µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=25%/nulls=20%         1.01    218.3±1.20µs        ? ?/sec    1.00    216.0±3.86µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=0%          1.03    187.0±1.73µs        ? ?/sec    1.00    181.9±1.34µs        ? ?/sec
in_list/Utf8/mixed/list=28/match=75%/nulls=20%         1.12    223.1±1.34µs        ? ?/sec    1.00    199.3±0.77µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=0%            1.00    104.7±1.76µs        ? ?/sec    1.20    125.9±5.01µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=0%/nulls=20%           1.11    147.6±0.97µs        ? ?/sec    1.00    132.4±0.94µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=0%           1.00    149.0±4.95µs        ? ?/sec    1.10    164.6±8.22µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=25%/nulls=20%          1.14    182.8±0.90µs        ? ?/sec    1.00    160.2±1.88µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=0%           1.00    163.4±2.18µs        ? ?/sec    1.03    169.0±2.20µs        ? ?/sec
in_list/Utf8/mixed/list=3/match=75%/nulls=20%          1.01    206.7±9.41µs        ? ?/sec    1.00    205.0±4.45µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=0%            1.00    109.2±0.71µs        ? ?/sec    1.20    131.3±4.73µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=0%/nulls=20%           1.10    150.7±0.90µs        ? ?/sec    1.00    136.9±5.16µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=0%           1.00    161.2±1.30µs        ? ?/sec    1.07    172.7±4.07µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=25%/nulls=20%          1.16    191.5±4.70µs        ? ?/sec    1.00    165.4±0.57µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=0%           1.00    171.6±5.37µs        ? ?/sec    1.03    176.0±5.74µs        ? ?/sec
in_list/Utf8/mixed/list=8/match=75%/nulls=20%          1.02    196.2±6.05µs        ? ?/sec    1.00    191.7±1.12µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=100             2.78    161.3±1.71µs        ? ?/sec    1.00     58.0±0.47µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=12              1.62     96.0±1.34µs        ? ?/sec    1.00     59.3±3.35µs        ? ?/sec
in_list/Utf8View/list=100/nulls=0%/str=3               1.35     71.6±0.38µs        ? ?/sec    1.00     53.0±0.41µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=100            2.23    190.9±2.99µs        ? ?/sec    1.00     85.5±0.61µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=12             1.83    109.8±0.94µs        ? ?/sec    1.00     60.0±0.25µs        ? ?/sec
in_list/Utf8View/list=100/nulls=20%/str=3              2.85    154.3±1.32µs        ? ?/sec    1.00     54.1±0.45µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=100              1.92    170.9±0.95µs        ? ?/sec    1.00     89.1±0.47µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=12               1.35    107.6±8.89µs        ? ?/sec    1.00     79.5±1.66µs        ? ?/sec
in_list/Utf8View/list=28/nulls=0%/str=3                1.30    112.1±1.25µs        ? ?/sec    1.00     86.6±2.73µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=100             2.00    171.1±1.99µs        ? ?/sec    1.00     85.6±0.71µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=12              1.49    145.4±1.40µs        ? ?/sec    1.00     97.4±1.27µs        ? ?/sec
in_list/Utf8View/list=28/nulls=20%/str=3               2.58    128.3±0.93µs        ? ?/sec    1.00     49.7±0.35µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=100               3.03    132.3±1.52µs        ? ?/sec    1.00     43.7±1.35µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=12                3.64     56.4±0.96µs        ? ?/sec    1.00     15.5±0.13µs        ? ?/sec
in_list/Utf8View/list=3/nulls=0%/str=3                 3.63     56.1±0.22µs        ? ?/sec    1.00     15.5±0.09µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=100              2.98    157.2±2.59µs        ? ?/sec    1.00     52.8±0.19µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=12               6.40    100.2±1.30µs        ? ?/sec    1.00     15.6±0.09µs        ? ?/sec
in_list/Utf8View/list=3/nulls=20%/str=3                6.40    100.6±2.37µs        ? ?/sec    1.00     15.7±0.11µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=100               2.93    136.3±2.46µs        ? ?/sec    1.00     46.5±0.18µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=12                1.30     60.5±0.17µs        ? ?/sec    1.00     46.4±0.21µs        ? ?/sec
in_list/Utf8View/list=8/nulls=0%/str=3                 1.30     61.3±1.75µs        ? ?/sec    1.00     47.2±3.11µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=100              2.95    161.3±2.77µs        ? ?/sec    1.00     54.6±1.36µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=12               2.28    104.2±0.39µs        ? ?/sec    1.00     45.7±0.15µs        ? ?/sec
in_list/Utf8View/list=8/nulls=20%/str=3                2.30    105.0±0.89µs        ? ?/sec    1.00     45.7±1.56µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=0%      1.22    137.6±3.43µs        ? ?/sec    1.00    113.0±0.86µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=0%/nulls=20%     1.69    146.9±2.99µs        ? ?/sec    1.00     86.8±0.46µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=0%     1.23    180.0±1.58µs        ? ?/sec    1.00    145.9±1.56µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=25%/nulls=20%    1.70    197.9±0.61µs        ? ?/sec    1.00    116.2±0.59µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=0%     1.35    212.6±1.13µs        ? ?/sec    1.00    157.4±1.21µs        ? ?/sec
in_list/Utf8View/mixed/list=100/match=75%/nulls=20%    1.42    216.9±1.54µs        ? ?/sec    1.00    152.2±0.43µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=0%       1.39    117.8±1.15µs        ? ?/sec    1.00     84.6±0.61µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=0%/nulls=20%      1.96    147.2±1.79µs        ? ?/sec    1.00     74.9±0.60µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=0%      1.56    203.8±0.97µs        ? ?/sec    1.00    130.7±2.29µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=25%/nulls=20%     1.49    198.3±1.10µs        ? ?/sec    1.00    133.4±1.85µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=0%      1.22    196.5±0.75µs        ? ?/sec    1.00    160.5±1.78µs        ? ?/sec
in_list/Utf8View/mixed/list=28/match=75%/nulls=20%     1.38    218.1±0.98µs        ? ?/sec    1.00    157.5±1.51µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=0%        1.45    100.3±1.11µs        ? ?/sec    1.00     69.3±0.52µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=0%/nulls=20%       1.99    132.2±0.87µs        ? ?/sec    1.00     66.4±5.32µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=0%       1.38    158.6±0.60µs        ? ?/sec    1.00    114.9±1.86µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=25%/nulls=20%      1.73    187.4±4.45µs        ? ?/sec    1.00    108.3±2.37µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=0%       1.48    181.9±1.33µs        ? ?/sec    1.00    122.8±0.73µs        ? ?/sec
in_list/Utf8View/mixed/list=3/match=75%/nulls=20%      1.36    211.3±0.81µs        ? ?/sec    1.00    155.8±1.07µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=0%        1.50    107.3±0.63µs        ? ?/sec    1.00     71.4±0.54µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=0%/nulls=20%       1.55    140.2±0.87µs        ? ?/sec    1.00     90.5±1.26µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=0%       1.52    167.3±2.36µs        ? ?/sec    1.00    110.3±4.61µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=25%/nulls=20%      1.98    183.2±1.23µs        ? ?/sec    1.00     92.5±1.29µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=0%       1.53    171.6±1.25µs        ? ?/sec    1.00    111.9±0.41µs        ? ?/sec
in_list/Utf8View/mixed/list=8/match=75%/nulls=20%      1.47   215.8±11.99µs        ? ?/sec    1.00    146.5±3.19µs        ? ?/sec

Moves the StaticFilter trait and its generic hash-based implementation
(ArrayStaticFilter) into a dedicated submodule. This is the first step
toward modularizing the in_list expression code.

ArrayStaticFilter uses Arrow's row comparison with hash-based lookup
for O(1) membership tests. It serves as the fallback for types without
specialized filter implementations (e.g., structs, lists).
Extract the filter instantiation logic and specialized filter
implementations to a dedicated strategy module. This is a pure
refactoring with no behavioral changes.

Moves:
- instantiate_static_filter function
- OrderedFloat32/OrderedFloat64 wrappers
- primitive_static_filter! macro (Int8..UInt64 filters)
- float_static_filter! macro (Float32/Float64 filters)
Adds O(1) bitmap-based set membership for 1-byte and 2-byte integer types.
Also introduces result.rs with shared logic for building BooleanArray
results with correct SQL null propagation.

BitmapFilter stores a bitset where bit N is set if value N is in the set:
- U8Config: 256 bits = 32 bytes (fits in cache line)
- U16Config: 65536 bits = 8 KB (fits in L1 cache)

Lookup is a single bit test: `bits[value / 64] & (1 << (value % 64))`.
This outperforms both hash lookup and branchless comparison at all list
sizes for these small integer types.
Adds PrimitiveFilter<T> - a generic HashSet-based filter for primitive types.
Also adds contains_slice() method for zero-copy buffer access used by
type reinterpretation.

The strategy module now uses PrimitiveFilter directly for Int32/Int64/UInt32/UInt64
instead of the macro-generated filters, while keeping Float32/Float64 with
OrderedFloat wrappers for now.
Extends type reinterpretation to handle floats by treating their bit
patterns as unsigned integers. For equality comparison, only the bit
pattern matters, so Float64 can be reinterpreted as UInt64.

Adds ReinterpretedPrimitive<D> filter that wraps PrimitiveFilter<D> and
reinterprets input arrays at query time. The strategy module now routes
Float32/Float64 through make_primitive_filter::<UInt32/UInt64>.

This eliminates the need for OrderedFloat wrappers and their associated
overhead, while maintaining correctness for NaN handling.
Adds BranchlessFilter<T, N> - a const-generic filter that unrolls
membership checks into a fixed-size OR-chain comparison. For small
lists (≤16 elements), this outperforms hash lookups due to:

- No branching (uses bitwise OR to combine comparisons)
- Better CPU pipelining
- No hash computation overhead

Strategy selection thresholds (tuned via benchmarks):
- 4-byte types (Int32, Float32): branchless up to 16 elements
- 8-byte types (Int64, Float64): branchless up to 16 elements
- 16-byte types (Decimal128): branchless up to 4 elements
Adds specialized filters for Utf8View arrays where all strings are
short enough (≤12 bytes) to be stored inline in the 16-byte view struct.
These can be reinterpreted as i128 for fast equality comparison:

- Utf8ViewHashFilter: uses PrimitiveFilter<Decimal128Type> internally
- Utf8ViewBranchless<N>: branchless filter for ≤4 short strings
- utf8view_all_short_strings(): helper to check if optimization applies

The strategy module checks for Utf8View type and verifies all strings
are short before using the optimized path, falling back to generic
ArrayStaticFilter for longer strings.
HashTable is better suited for storing values with custom hashing and equality, avoiding the overhead of key-value pairs and simplifying the API usage.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

physical-expr Changes to the physical-expr crates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Further improve performance of IN list evaluation

4 participants