>From <[email protected]>:
[email protected] has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18316 )
Change subject: [ASTERIXDB-3399][COMP] Nested Loops Costing changes
......................................................................
[ASTERIXDB-3399][COMP] Nested Loops Costing changes
Change-Id: I1e729a2bfb9f018fe8607283120a5cc9903f75cb
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/CostMethods.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICostMethods.java
3 files changed, 28 insertions(+), 5 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/16/18316/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/CostMethods.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/CostMethods.java
index 71e9b3c..eafd5e4 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/CostMethods.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/CostMethods.java
@@ -94,13 +94,21 @@
return new Cost(indexSel * jn.getOrigCardinality());
}
- public Cost costIndexDataScan(JoinNode jn, double indexSel) {
+ public Cost costIndexDataScan(JoinNode jn, double indexSel, boolean add) {
if (indexSel < selectivityForSecondaryIndexSelection) {
- return new Cost(indexSel * jn.getOrigCardinality());
+ if (add) {
+ return new Cost(indexSel * jn.getOrigCardinality());
+ } else {
+ return new Cost(0.0);
+ }
}
// If index selectivity is not very selective, make index scan more
expensive than full scan.
- return new Cost(jn.getOrigCardinality());
+ if (add) {
+ return new Cost(jn.getOrigCardinality());
+ } else {
+ return new Cost(0.0);
+ }
}
public Cost costHashJoin(JoinNode jn) {
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICostMethods.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICostMethods.java
index d8dd77f..f03a68c 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICostMethods.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICostMethods.java
@@ -33,6 +33,8 @@
Cost costIndexScan(JoinNode jn, double indexSel);
+ Cost costIndexDataScan(JoinNode jn, double indexSel, boolean add);
+
Cost costHashJoin(JoinNode currentJn);
Cost costBroadcastHashJoin(JoinNode currentJn);
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 d5743e4..558b2d0 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
@@ -650,7 +650,7 @@
}
// Now add the data Scan cost.
- ICost dataScanCost =
joinEnum.getCostMethodsHandle().costIndexDataScan(this, sel);
+ ICost dataScanCost =
joinEnum.getCostMethodsHandle().costIndexDataScan(this, sel, true);
opCost = opCost.costAdd(dataScanCost); // opCost now has the total
cost of all the mandatory indexes + data costs.
}
@@ -672,7 +672,11 @@
// dataCost (0) will contain the dataScan cost with the first
index
//dataCost (1) will contain the dataScan cost with the first
index and the 2nd index and so on.
sel *= optionalIndexesInfo.get(i).second; // assuming
selectivities are independent for now
-
dataCosts.add(joinEnum.getCostMethodsHandle().costIndexDataScan(this, sel)); //
D0; D01; D012; ...
+ if (optionalIndexesInfo.get(i).first.isPrimaryIndex()) {
+
dataCosts.add(joinEnum.getCostMethodsHandle().costIndexDataScan(this, sel,
false));// D0; D01; D012; ...
+ } else {
+
dataCosts.add(joinEnum.getCostMethodsHandle().costIndexDataScan(this, sel,
true));
+ }
}
// At the of of the above loop, I0, I1, I2 ... have been computed
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18316
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: I1e729a2bfb9f018fe8607283120a5cc9903f75cb
Gerrit-Change-Number: 18316
Gerrit-PatchSet: 1
Gerrit-Owner: [email protected]
Gerrit-MessageType: newchange