>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

Reply via email to