-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Minor - P4
-
None
-
Affects Version/s: 8.0.5
-
Component/s: None
-
Query Optimization
-
ALL
-
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Found an odd difference in explain output for featureFlagSBEFull true vs false. The isSparse field for a wildcard index has a different value, even though we pick an index scan on the same wildcard index in both cases. The only difference I can see is that in the first case we use a classic plan (isSparse: true) and in the second case we use an SBE plan (isSparse: false). See steps to reproduce below.
trySBERestricted:
winningPlan: {
isCached: false,
stage: 'FETCH',
inputStage: {
stage: 'IXSCAN',
keyPattern: { '$_path': 1, b: 1 },
indexName: '$**_1',
isMultiKey: false,
multiKeyPaths: { '$_path': [], b: [] },
isUnique: false,
isSparse: false,
isPartial: false,
indexVersion: 2,
direction: 'forward',
indexBounds: { '$_path': [ '["b", "b"]' ], b: [ '[-inf.0, 5)' ] }
}
},
trySBEFull output:
winningPlan: {
isCached: false,
queryPlan: {
stage: 'FETCH',
planNodeId: 2,
inputStage: {
stage: 'IXSCAN',
planNodeId: 1,
keyPattern: { '$_path': 1, b: 1 },
indexName: '$**_1',
isMultiKey: false,
multiKeyPaths: { '$_path': [], b: [] },
isUnique: false,
isSparse: true,
isPartial: false,
indexVersion: 2,
direction: 'forward',
indexBounds: { '$_path': [ '["b", "b"]' ], b: [ '[-inf.0, 5)' ] }
}
},
slotBasedPlan: {
slots: '$$RESULT=s8 env: { s1 = KS(3C62001F000000000000000001), s2 = KS(3C62002B0A01), s7 = {"$_path" : 1, "b" : 1} }',
stages: '[2] nlj inner [] [s3, s6, s4, s5, s7] \n' +
' left \n' +
' [1] cfilter {(exists(s1) && exists(s2))} \n' +
' [1] ixseek s1 s2 s5 s3 s6 s4 [] @"31cf022a-7d45-47fe-8701-4c78a69d0b27" @"$**_1" true \n' +
' right \n' +
' [2] limit 1ll \n' +
' [2] seek s3 s8 s9 s6 s4 s5 s7 none none [] @"31cf022a-7d45-47fe-8701-4c78a69d0b27" true false \n'
}