You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2024/07/10 13:16:59 UTC

Change in asterixdb[master]: [ASTERIXDB-3454][COMP] Make Array Indexes more expensive

From <mu...@couchbase.com>:

murali.krishna@couchbase.com has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18463 )


Change subject: [ASTERIXDB-3454][COMP] Make Array Indexes more expensive
......................................................................

[ASTERIXDB-3454][COMP] Make Array Indexes more expensive

Change-Id: I446744d55433016b7343ea45dd88d1df1edce283
---
M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
1 file changed, 25 insertions(+), 0 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/63/18463/1

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 9fb0e72..0cc9ae0 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
@@ -729,8 +729,24 @@
                 optionalIndexesInfo.get(j).second = -1.0; // remove all indexes from consideration.
             }
         }
+        // Now check if any of the indexes were array indexes. If so double the cost
+        boolean arrayIndexUsed = false;
+        for (int i = 0; i < mandatoryIndexesInfo.size(); i++)
+            if (mandatoryIndexesInfo.get(i).first.getIndexType() == DatasetConfig.IndexType.ARRAY) {
+                arrayIndexUsed = true;
+                break;
+            }
+
+        for (int i = 0; i < optionalIndexesInfo.size(); i++)
+            if (optionalIndexesInfo.get(i).first.getIndexType() == DatasetConfig.IndexType.ARRAY) {
+                arrayIndexUsed = true;
+                break;
+            }
 
         totalCost = opCost.costAdd(mandatoryIndexesCost); // cost of all the indexes chosen
+        if (arrayIndexUsed) {
+            totalCost = totalCost.costAdd(totalCost);
+        }
         boolean forceEnum = mandatoryIndexesInfo.size() > 0 || level <= joinEnum.cboFullEnumLevel;
         if (opCost.costLT(this.cheapestPlanCost) || forceEnum) {
             pn = new PlanNode(allPlans.size(), joinEnum, this, datasetNames.get(0), leafInput);

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18463
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: I446744d55433016b7343ea45dd88d1df1edce283
Gerrit-Change-Number: 18463
Gerrit-PatchSet: 1
Gerrit-Owner: murali.krishna@couchbase.com
Gerrit-MessageType: newchange