Class RecordQueryPlannerConfiguration
- java.lang.Object
-
- com.apple.foundationdb.record.query.plan.RecordQueryPlannerConfiguration
-
@API(MAINTAINED) public class RecordQueryPlannerConfiguration extends Object
A set of configuration options for theRecordQueryPlanner
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
RecordQueryPlannerConfiguration.Builder
A builder forRecordQueryPlannerConfiguration
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description RecordQueryPlannerConfiguration.Builder
asBuilder()
static RecordQueryPlannerConfiguration.Builder
builder()
int
getComplexityThreshold()
A limit on the complexity of the plans generated by the planner.QueryPlanner.IndexScanPreference
getIndexScanPreference()
Get whetherRecordQueryIndexPlan
is preferred overRecordQueryScanPlan
even when it does not satisfy any additional conditions.int
getMaxTaskQueueSize()
Return the size limit of the cascades planner task queue.int
getMaxTotalTaskCount()
Return the limit on the number of tasks that can be executed as part of the cascades planner planning.boolean
shouldAttemptFailedInJoinAsOr()
Get whether the query planner should attempt to transform IN predicates that can't be implemented using aRecordQueryInJoinPlan
into an equivalent OR of equality predicates, which might be plannable as a union.boolean
shouldCheckForDuplicateConditions()
Get whether normalization of query conditions should check for redundant conditions.boolean
shouldDeferFetchAfterUnionAndIntersection()
Get whether the query planner should attempt to delay the fetch of the whole record until after union, intersection, and primary key distinct operators, as implemented in the variousRecordQueryPlannerSubstitutionVisitor
s.boolean
shouldOptimizeForIndexFilters()
Get whether the query planner should attempt to consider the applicability of filters that could then be evaluated on index entries into the planning process.boolean
shouldUseFullKeyForValueIndex()
Get whether the planner uses the entire key, including the primary key, for value indexes.
-
-
-
Method Detail
-
getIndexScanPreference
@Nonnull public QueryPlanner.IndexScanPreference getIndexScanPreference()
Get whetherRecordQueryIndexPlan
is preferred overRecordQueryScanPlan
even when it does not satisfy any additional conditions. Scanning without an index is more efficient, but will have to skip over unrelated record types. For that reason, it is safer to use an index, except when there is only one record type. If the meta-data has more than one record type but the record store does not, this can be overridden.- Returns:
- the index scan preference
-
shouldAttemptFailedInJoinAsOr
public boolean shouldAttemptFailedInJoinAsOr()
Get whether the query planner should attempt to transform IN predicates that can't be implemented using aRecordQueryInJoinPlan
into an equivalent OR of equality predicates, which might be plannable as a union.- Returns:
- whether the planner will transform IN predicates into ORs when they can't be planned as in-joins
-
getComplexityThreshold
public int getComplexityThreshold()
A limit on the complexity of the plans generated by the planner. If the planner generates a query plan that exceeds this complexity, an exception will be thrown.- Returns:
- the complexity limit
See
QueryPlan.getComplexity()
for a description of plan complexity.
-
shouldCheckForDuplicateConditions
public boolean shouldCheckForDuplicateConditions()
Get whether normalization of query conditions should check for redundant conditions. This check is not free, so it is appropriate only to enable this when the queries come from a source known to include disjuncted conditions that imply one another.- Returns:
- whether normalization should check for redundant conditions
- See Also:
BooleanNormalizer.isCheckForDuplicateConditions()
-
shouldDeferFetchAfterUnionAndIntersection
public boolean shouldDeferFetchAfterUnionAndIntersection()
Get whether the query planner should attempt to delay the fetch of the whole record until after union, intersection, and primary key distinct operators, as implemented in the variousRecordQueryPlannerSubstitutionVisitor
s.- Returns:
- whether the planner should delay the fetch of the whole record until after union, intersection, and primary key distinct operators
-
shouldOptimizeForIndexFilters
public boolean shouldOptimizeForIndexFilters()
Get whether the query planner should attempt to consider the applicability of filters that could then be evaluated on index entries into the planning process.- Returns:
- whether the planner should optimize for index filters
-
getMaxTaskQueueSize
public int getMaxTaskQueueSize()
Return the size limit of the cascades planner task queue.- Returns:
- the maximum size of the queue. 0 means "unbound" (the default). Trying to add a task beyond the maximum size will fail the planning.
-
getMaxTotalTaskCount
public int getMaxTotalTaskCount()
Return the limit on the number of tasks that can be executed as part of the cascades planner planning.- Returns:
- the maximum number of tasks. 0 means "unbound" (the default). Trying to execute a task after the maximum number was exceeded will fail the planning.
-
shouldUseFullKeyForValueIndex
public boolean shouldUseFullKeyForValueIndex()
Get whether the planner uses the entire key, including the primary key, for value indexes.- Returns:
- whether to include primary key in planning
-
asBuilder
@Nonnull public RecordQueryPlannerConfiguration.Builder asBuilder()
-
builder
@Nonnull public static RecordQueryPlannerConfiguration.Builder builder()
-
-