1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
==== VARIATION: optimized partial index: the expression matches the pipeline ====
-- INPUTS:
pipeline: [{$match: {'a': 3, 'b': 2}}]
metadata:
number of partitions: 1
scan definitions:
collection:
options:
distribution and paths:
distribution type: Centralized
distribution paths:
indexes:
index1:
collation spec:
ABT path:
PathGet [a]
PathTraverse [1]
PathIdentity []
collation op: Ascending
version: 1
ordering bits: 0
is multi-key: 1
distribution and paths:
distribution type: Centralized
distribution paths:
requirements:
{{{scan_0, 'PathGet [b] PathTraverse [1] PathIdentity []', {{{=Const [2]}}}}}}
collection exists: 1
CE type: (empty)
optimization phases:
ConstEvalPost
ConstEvalPre
MemoExplorationPhase
MemoImplementationPhase
MemoSubstitutionPhase
PathFuse
PathLower
-- OUTPUT:
Root [{scan_0}]
NestedLoopJoin [joinType: Inner, {rid_0}]
| | Const [true]
| Filter []
| | BinaryOp [FillEmpty]
| | | Const [false]
| | FunctionCall [traverseF]
| | | | Const [false]
| | | LambdaAbstraction [valCmp_0]
| | | BinaryOp [Eq]
| | | | Const [2]
| | | Variable [valCmp_0]
| | Variable [evalTemp_4]
| LimitSkip [limit: 1, skip: 0]
| Seek [ridProjection: rid_0, {'<root>': scan_0, 'b': evalTemp_4}, collection]
IndexScan [{'<rid>': rid_0}, scanDefName: collection, indexDefName: index1, interval: {=Const [3]}]
==== VARIATION: optimized partial index negative: the expression does not match the pipeline ====
-- INPUTS:
pipeline: [{$match: {'a': 3, 'b': 3}}]
metadata:
number of partitions: 1
scan definitions:
collection:
options:
distribution and paths:
distribution type: Centralized
distribution paths:
indexes:
index1:
collation spec:
ABT path:
PathGet [a]
PathTraverse [1]
PathIdentity []
collation op: Ascending
version: 1
ordering bits: 0
is multi-key: 1
distribution and paths:
distribution type: Centralized
distribution paths:
requirements:
{{{scan_0, 'PathGet [b] PathTraverse [1] PathIdentity []', {{{=Const [2]}}}}}}
collection exists: 1
CE type: (empty)
optimization phases:
ConstEvalPost
ConstEvalPre
MemoExplorationPhase
MemoImplementationPhase
MemoSubstitutionPhase
PathFuse
PathLower
-- OUTPUT:
Root [{scan_0}]
Filter []
| BinaryOp [FillEmpty]
| | Const [false]
| FunctionCall [traverseF]
| | | Const [false]
| | LambdaAbstraction [valCmp_1]
| | BinaryOp [Eq]
| | | Const [3]
| | Variable [valCmp_1]
| Variable [evalTemp_3]
Filter []
| BinaryOp [FillEmpty]
| | Const [false]
| FunctionCall [traverseF]
| | | Const [false]
| | LambdaAbstraction [valCmp_0]
| | BinaryOp [Eq]
| | | Const [3]
| | Variable [valCmp_0]
| Variable [evalTemp_2]
PhysicalScan [{'<root>': scan_0, 'a': evalTemp_2, 'b': evalTemp_3}, collection]
|