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 3ce4e9f..edc3251 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
@@ -74,6 +74,7 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.DataSourceScanOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
@@ -817,6 +818,10 @@
 
         int dataScanPlan;
         JoinNode[] jnArray = this.getJnArray();
+        int limit = -1;
+        if (this.numberOfTerms == 1) {
+            jnArray[1].setLimitVal(findLimitValue(this.op));
+        }
         for (int i = 1; i <= this.numberOfTerms; i++) {
             JoinNode jn = jnArray[i];
             Index.SampleIndexDetails idxDetails = jn.getIdxDetails();
@@ -886,6 +891,23 @@
         return this.numberOfTerms;
     }
 
+    private int findLimitValue(AbstractLogicalOperator oper) {
+        ILogicalOperator op = oper;
+        while (op.getOperatorTag() != LogicalOperatorTag.EMPTYTUPLESOURCE) {
+            if (op.getOperatorTag() == LogicalOperatorTag.LIMIT) {
+                LimitOperator lop = (LimitOperator) op;
+                ILogicalExpression expr = lop.getMaxObjects().getValue();
+                if (expr != null) {
+                    if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE) { // must be a constant
+                        return Integer.parseInt(lop.getMaxObjects().getValue().toString());
+                    }
+                }
+            }
+            op = op.getInputs().get(0).getValue();
+        }
+        return -1;
+    }
+
     private boolean isPredicateCardinalityAnnotationPresent(ILogicalExpression leExpr) {
         if (leExpr.getExpressionTag().equals(LogicalExpressionTag.FUNCTION_CALL)) {
             AbstractFunctionCallExpression afcExpr = (AbstractFunctionCallExpression) leExpr;
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 4c49cb3..8afc26b 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
@@ -86,6 +86,7 @@
     protected int highestDatasetId;
     private JoinNode rightJn;
     private JoinNode leftJn;
+    private int limitVal = -1; // only for single dataset joinNodes.
     private List<Integer> applicableJoinConditions;
     protected ILogicalOperator leafInput;
     private List<Pair<IAccessMethod, Index>> chosenIndexes;
@@ -137,6 +138,14 @@
         size = avgDocSize;
     }
 
+    public void setLimitVal(int val) {
+        limitVal = val;
+    }
+
+    public int getLimitVal() {
+        return limitVal;
+    }
+
     public double getInputSize() {
         return size;
     }
