rubenada commented on a change in pull request #2363:
URL: https://github.com/apache/calcite/pull/2363#discussion_r591266021



##########
File path: core/src/main/java/org/apache/calcite/rel/core/Sort.java
##########
@@ -124,11 +125,19 @@ public abstract Sort copy(RelTraitSet traitSet, RelNode 
newInput,
 
   @Override public @Nullable RelOptCost computeSelfCost(RelOptPlanner planner,
       RelMetadataQuery mq) {
+    double rowCount = mq.getRowCount(this);
+    if (collation.getFieldCollations().isEmpty()) {
+      return planner.getCostFactory().makeCost(rowCount, 0, 0);
+    }
+    final int offsetValue = offset == null ? 0 : RexLiteral.intValue(offset);
+    final double inCount = mq.getRowCount(input);
     // Higher cost if rows are wider discourages pushing a project through a
     // sort.
-    final double rowCount = mq.getRowCount(this);
     final double bytesPerRow = getRowType().getFieldCount() * 4;
-    final double cpu = Util.nLogN(rowCount) * bytesPerRow;
+    // When output count + offset is smaller than input count, we can use heap 
sort,
+    // otherwise, we can use heap sort, quick sort and so on
+    final double heapSize = Math.min(rowCount + offsetValue, inCount);

Review comment:
       If I am not mistaken, this change could have some side-effects, e.g.  
`EnumerableSort` currently does not override `computeSelfCost`, it uses 
`Sort`'s one.  `EnumerableSort` implements a nLogn sorting algorithm, so the 
current `Sort#computeSelfCost` suits better than the new proposed one. I think 
if we modify the formula here, then we should override 
`EnumerableSort#computeSelfCost` and apply the old formula there.
   However, other downstream projects with their own sort operators (which 
currently rely on the current formula) might be impacted as well, so this could 
be seen somehow as a breaking change.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to