[
https://issues.apache.org/jira/browse/CALCITE-4522?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17300044#comment-17300044
]
Julian Hyde commented on CALCITE-4522:
--------------------------------------
> per-row overhead is caused by the comparison
Not really. There is a significant per-row overhead in a sort algorithm even if
comparisons are very cheap.
> I suggest we use collation.getFieldCollations().size() as an estimate of the
> per-tuple comparison cost.
I disagree. Suppose we are sorting on 5 fields; most comparisons would
terminate after 1 field.
The only significant difference is sorting on zero fields (i.e. not sorting at
all) and sorting on 1 or more fields. That is original intent of this case. I
propose title "Sort with limit/offset should have a cheaper cost model,
especially if it does not sort (has zero collation fields)".
> Sort cost should account for the number of columns in collation
> ---------------------------------------------------------------
>
> Key: CALCITE-4522
> URL: https://issues.apache.org/jira/browse/CALCITE-4522
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Reporter: hqx
> Priority: Minor
> Labels: pull-request-available
> Time Spent: 9h 20m
> Remaining Estimate: 0h
>
> The old method to compute the cost of sort has some problem.
> # When the RelCollation is empty, there is no need to sort, but it still
> compute the cpu cost of sort.
> # use n * log\(n) * row_byte to estimate the cpu cost may be inaccurate,
> where n means the output row count of the sort operator, and row_byte means
> the average bytes of one row .
> Instead, I give follow suggestion.
> # the cpu cost is zero if the RelCollation is empty.
> # let heap_size be min\(offset + output_count, input_count), and use
> input_count * log\(heap_size)* row_byte to compute the cpu cost.
> When fetch is zero, I found the output_count is 1 not 0. This conveniently
> ensure the log\(heap_size) no less than zero
--
This message was sent by Atlassian Jira
(v8.3.4#803005)