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/17 15:29:17 UTC

Change in asterixdb[master]: [ASTERIXDB-3462][COMP] Incorrect cardinality estimation with multicol...

From Vijay Sarathy <vi...@couchbase.com>:

Vijay Sarathy has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18492 )


Change subject: [ASTERIXDB-3462][COMP] Incorrect cardinality estimation with multicolumn PK-PK self joins
......................................................................

[ASTERIXDB-3462][COMP] Incorrect cardinality estimation with multicolumn PK-PK self joins

Ext-ref: MB-62752

Change-Id: Iabf1d151d996546c24feed5b8c1a23ef401b8054
---
M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
1 file changed, 22 insertions(+), 6 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/92/18492/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 e842b7b..43f2333 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
@@ -526,12 +526,17 @@
     private void markCompositeJoinPredicates() {
         // can use dataSetBits??? This will be simpler.
         for (int i = 0; i < joinConditions.size() - 1; i++) {
-            for (int j = i + 1; j < joinConditions.size(); j++) {
-                if (joinConditions.get(i).datasetBits == joinConditions.get(j).datasetBits) {
-                    joinConditions.get(i).selectivity = 1.0 / smallerDatasetSize(joinConditions.get(i).datasetBits);
-                    // 1/P will be the selectivity of the composite clause
-                    joinConditions.get(j).partOfComposite = true;
-                    joinConditions.get(j).selectivity = 1.0;
+            JoinCondition jcI = joinConditions.get(i);
+            if (jcI.comparisonType == JoinCondition.comparisonOp.OP_EQ) {
+                for (int j = i + 1; j < joinConditions.size(); j++) {
+                    JoinCondition jcJ = joinConditions.get(j);
+                    if (jcJ.comparisonType == JoinCondition.comparisonOp.OP_EQ
+                            && jcI.datasetBits == jcJ.datasetBits && !jcI.partOfComposite) {
+                        jcI.selectivity = 1.0 / smallerDatasetSize(jcI.datasetBits);
+                        // 1/P will be the selectivity of the composite clause
+                        jcJ.partOfComposite = true;
+                        jcJ.selectivity = 1.0;
+                    }
                 }
             }
         }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18492
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: Iabf1d151d996546c24feed5b8c1a23ef401b8054
Gerrit-Change-Number: 18492
Gerrit-PatchSet: 1
Gerrit-Owner: Vijay Sarathy <vi...@couchbase.com>
Gerrit-MessageType: newchange