ART Index: Support compound key scans#8
Merged
Conversation
… scan using ARTKey::Concat
rebind projected columns in ALL index exprs do not bail out early if more than one index expr hook up composite key scan
…s we made earlier), fix single-ref-per-expr predicate to correctly walk expr tree and yank refs (allowing nesting in fns, etc)
…icate (fix shutdown_create_index.test)
…eed remapping if the scan is not a view scan
…es in both sanity check and index expr rebinding add test for this scenario
Author
|
This is an update of #7 with refactored column binding logic + additional tests for the new binding mechanism. |
mach-kernel
added a commit
that referenced
this pull request
Nov 3, 2025
ART Index: Support compound key scans Squashed commit of the following: commit fec3602 Author: David Stancu <david@spice.ai> Date: Mon Nov 3 14:26:06 2025 -0500 tryscanindex: fix direct match lookup, range check vec access commit 2714c3d Author: David Stancu <david@spice.ai> Date: Mon Nov 3 13:55:13 2025 -0500 tryscanindex: do column matching first, to use possibly rebound matches in both sanity check and index expr rebinding add test for this scenario commit 36ffa5b Author: David Stancu <david@spice.ai> Date: Mon Nov 3 12:30:28 2025 -0500 tryscanindex sanity check: indexed_columns / art column ids may not need remapping if the scan is not a view scan commit 525f9c7 Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:42:17 2025 -0400 do not do index scan if there are other non index filters in the predicate (fix shutdown_create_index.test) commit b0a6e2d Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:04:54 2025 -0400 add test, bail out for eg composite query with IN () list commit a22a430 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 16:37:30 2025 -0400 simplify filter expression storage index bindings (just reuse the ones we made earlier), fix single-ref-per-expr predicate to correctly walk expr tree and yank refs (allowing nesting in fns, etc) commit 9c8c1ed Author: David Stancu <david@spice.ai> Date: Wed Oct 29 15:11:23 2025 -0400 copy index expressions before rewriting column refs commit aff2c98 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:36:33 2025 -0400 table scan: rebind projected columns in ALL index exprs do not bail out early if more than one index expr hook up composite key scan commit bfc6f02 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:35:09 2025 -0400 make specialized compound key scan state for eq compares, specialized scan using ARTKey::Concat
peasee
pushed a commit
that referenced
this pull request
Jan 17, 2026
ART Index: Support compound key scans Squashed commit of the following: commit fec3602 Author: David Stancu <david@spice.ai> Date: Mon Nov 3 14:26:06 2025 -0500 tryscanindex: fix direct match lookup, range check vec access commit 2714c3d Author: David Stancu <david@spice.ai> Date: Mon Nov 3 13:55:13 2025 -0500 tryscanindex: do column matching first, to use possibly rebound matches in both sanity check and index expr rebinding add test for this scenario commit 36ffa5b Author: David Stancu <david@spice.ai> Date: Mon Nov 3 12:30:28 2025 -0500 tryscanindex sanity check: indexed_columns / art column ids may not need remapping if the scan is not a view scan commit 525f9c7 Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:42:17 2025 -0400 do not do index scan if there are other non index filters in the predicate (fix shutdown_create_index.test) commit b0a6e2d Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:04:54 2025 -0400 add test, bail out for eg composite query with IN () list commit a22a430 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 16:37:30 2025 -0400 simplify filter expression storage index bindings (just reuse the ones we made earlier), fix single-ref-per-expr predicate to correctly walk expr tree and yank refs (allowing nesting in fns, etc) commit 9c8c1ed Author: David Stancu <david@spice.ai> Date: Wed Oct 29 15:11:23 2025 -0400 copy index expressions before rewriting column refs commit aff2c98 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:36:33 2025 -0400 table scan: rebind projected columns in ALL index exprs do not bail out early if more than one index expr hook up composite key scan commit bfc6f02 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:35:09 2025 -0400 make specialized compound key scan state for eq compares, specialized scan using ARTKey::Concat
peasee
pushed a commit
that referenced
this pull request
Feb 1, 2026
ART Index: Support compound key scans Squashed commit of the following: commit fec3602 Author: David Stancu <david@spice.ai> Date: Mon Nov 3 14:26:06 2025 -0500 tryscanindex: fix direct match lookup, range check vec access commit 2714c3d Author: David Stancu <david@spice.ai> Date: Mon Nov 3 13:55:13 2025 -0500 tryscanindex: do column matching first, to use possibly rebound matches in both sanity check and index expr rebinding add test for this scenario commit 36ffa5b Author: David Stancu <david@spice.ai> Date: Mon Nov 3 12:30:28 2025 -0500 tryscanindex sanity check: indexed_columns / art column ids may not need remapping if the scan is not a view scan commit 525f9c7 Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:42:17 2025 -0400 do not do index scan if there are other non index filters in the predicate (fix shutdown_create_index.test) commit b0a6e2d Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:04:54 2025 -0400 add test, bail out for eg composite query with IN () list commit a22a430 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 16:37:30 2025 -0400 simplify filter expression storage index bindings (just reuse the ones we made earlier), fix single-ref-per-expr predicate to correctly walk expr tree and yank refs (allowing nesting in fns, etc) commit 9c8c1ed Author: David Stancu <david@spice.ai> Date: Wed Oct 29 15:11:23 2025 -0400 copy index expressions before rewriting column refs commit aff2c98 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:36:33 2025 -0400 table scan: rebind projected columns in ALL index exprs do not bail out early if more than one index expr hook up composite key scan commit bfc6f02 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:35:09 2025 -0400 make specialized compound key scan state for eq compares, specialized scan using ARTKey::Concat
sgrebnov
pushed a commit
that referenced
this pull request
Jun 1, 2026
ART Index: Support compound key scans Squashed commit of the following: commit fec3602 Author: David Stancu <david@spice.ai> Date: Mon Nov 3 14:26:06 2025 -0500 tryscanindex: fix direct match lookup, range check vec access commit 2714c3d Author: David Stancu <david@spice.ai> Date: Mon Nov 3 13:55:13 2025 -0500 tryscanindex: do column matching first, to use possibly rebound matches in both sanity check and index expr rebinding add test for this scenario commit 36ffa5b Author: David Stancu <david@spice.ai> Date: Mon Nov 3 12:30:28 2025 -0500 tryscanindex sanity check: indexed_columns / art column ids may not need remapping if the scan is not a view scan commit 525f9c7 Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:42:17 2025 -0400 do not do index scan if there are other non index filters in the predicate (fix shutdown_create_index.test) commit b0a6e2d Author: David Stancu <david@spice.ai> Date: Thu Oct 30 10:04:54 2025 -0400 add test, bail out for eg composite query with IN () list commit a22a430 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 16:37:30 2025 -0400 simplify filter expression storage index bindings (just reuse the ones we made earlier), fix single-ref-per-expr predicate to correctly walk expr tree and yank refs (allowing nesting in fns, etc) commit 9c8c1ed Author: David Stancu <david@spice.ai> Date: Wed Oct 29 15:11:23 2025 -0400 copy index expressions before rewriting column refs commit aff2c98 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:36:33 2025 -0400 table scan: rebind projected columns in ALL index exprs do not bail out early if more than one index expr hook up composite key scan commit bfc6f02 Author: David Stancu <david@spice.ai> Date: Wed Oct 29 14:35:09 2025 -0400 make specialized compound key scan state for eq compares, specialized scan using ARTKey::Concat
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🗣 Description
ARTKeyhas a concatenation mechanism that it uses to generate one value key for multiple column exprs.ARTIndexCompoundKeyScanState, which is the same asARTIndexScanStatebut with vectors for an arbitrary number of valuesART::CompoundKeyScan, which generates the concatenated key, locks, does an equality scanTryScanIndexcolumn binding logic updated with stricter sanity checks and a new unit testFor completeness (break before passing back to

TableScanInitGlobalBenchmark on 7.5M rows. Both have composite index on those columns, but vanilla DuckDB won't push the scan down like this branch does:
With index:
No index: