>From Vijay Sarathy <[email protected]>:
Vijay Sarathy has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17974 )
Change subject: [ASTERIXDB-AAAA][COMP]: Minimum cardinality issue
......................................................................
[ASTERIXDB-AAAA][COMP]: Minimum cardinality issue
Change-Id: Ife44f819c306752e6fdf6ebcefa4a6abbb5df4c1
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
2 files changed, 25 insertions(+), 10 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/74/17974/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
index d9174d8..8de7bbb 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
@@ -697,7 +697,7 @@
jn.aliases.addAll(jnJ.aliases);
Collections.sort(jn.aliases);
jn.size = jnI.size + jnJ.size;
- jn.setCardinality(jn.computeJoinCardinality());
+ jn.setCardinality(jn.computeJoinCardinality(), true);
} else {
addPlansToThisJn = jnNewBits.jnIndex;
}
@@ -799,18 +799,18 @@
if (idxDetails == null) {
return PlanNode.NO_PLAN;
}
- jn.setOrigCardinality(idxDetails.getSourceCardinality());
+ jn.setOrigCardinality(idxDetails.getSourceCardinality(),
true);
jn.setAvgDocSize(idxDetails.getSourceAvgItemSize());
}
// multiply by the respective predicate selectivities
- jn.setCardinality(jn.origCardinality *
stats.getSelectivity(leafInput, false));
+ jn.setCardinality(jn.origCardinality *
stats.getSelectivity(leafInput, false), true);
} else {
// could be unnest or assign
jn.datasetNames = new
ArrayList<>(Collections.singleton("unnestOrAssign"));
jn.aliases = new
ArrayList<>(Collections.singleton("unnestOrAssign"));
double card = findInListCard(leafInput);
- jn.setOrigCardinality(card);
- jn.setCardinality(card);
+ jn.setOrigCardinality(card, false);
+ jn.setCardinality(card, false);
// just a guess
jn.size = 10;
}
@@ -950,7 +950,13 @@
// now switch the input back.
parent.getInputs().get(0).setValue(scanOp);
if (jn.getCardinality() == jn.getOrigCardinality()) { // this
means there was no selectivity hint provided
- jn.setCardinality(finalDatasetCard);
+ boolean setMinCard = true;
+ if (sampleCard == origDatasetCard) {
+ // The sample has the whole dataset. This is because
the dataset is small.
+ // No need to assign any artificial min. cardinality
as the sample is accurate.
+ setMinCard = false;
+ }
+ jn.setCardinality(finalDatasetCard, setMinCard);
}
jn.setAvgDocSize(projectedSize);
}
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
index 48d88a9..e554c30 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
@@ -123,18 +123,18 @@
return cardinality;
}
- protected void setCardinality(double card) {
+ protected void setCardinality(double card, boolean setMinCard) {
// Minimum cardinality for operators is MIN_CARD to prevent bad plans
due to cardinality under estimation errors.
- cardinality = Math.max(card, Cost.MIN_CARD);
+ cardinality = setMinCard ? Math.max(card, Cost.MIN_CARD) : card;
}
public double getOrigCardinality() {
return origCardinality;
}
- protected void setOrigCardinality(double card) {
+ protected void setOrigCardinality(double card, boolean setMinCard) {
// Minimum cardinality for operators is MIN_CARD to prevent bad plans
due to cardinality under estimation errors.
- origCardinality = Math.max(card, Cost.MIN_CARD);
+ origCardinality = setMinCard ? Math.max(card, Cost.MIN_CARD) : card;
}
protected void setAvgDocSize(double avgDocSize) {
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17974
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Ife44f819c306752e6fdf6ebcefa4a6abbb5df4c1
Gerrit-Change-Number: 17974
Gerrit-PatchSet: 1
Gerrit-Owner: Vijay Sarathy <[email protected]>
Gerrit-MessageType: newchange