Github user comnetwork commented on a diff in the pull request: https://github.com/apache/phoenix/pull/314#discussion_r206382301 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java --- @@ -559,8 +559,16 @@ protected QueryPlan compileSingleFlatQuery(StatementContext context, SelectState groupBy = groupBy.compile(context, innerPlanTupleProjector); context.setResolver(resolver); // recover resolver RowProjector projector = ProjectionCompiler.compile(context, select, groupBy, asSubquery ? Collections.<PDatum>emptyList() : targetColumns, where); - OrderBy orderBy = OrderByCompiler.compile(context, select, groupBy, limit, offset, projector, - groupBy == GroupBy.EMPTY_GROUP_BY ? innerPlanTupleProjector : null, isInRowKeyOrder); + OrderBy orderBy = OrderByCompiler.compile( + context, + select, + groupBy, + limit, + offset, + projector, + groupBy == GroupBy.EMPTY_GROUP_BY ? innerPlanTupleProjector : null, + groupBy == GroupBy.EMPTY_GROUP_BY ? isInRowKeyOrder : true, + where); --- End diff -- @maryannxue , yes, you are right , Eliminating order-by based on the inner plan ordering is ultimate solution. Openning this JIRA is just to optimize the OrderBy for ClientAggregatePlan when there is a GroupBy, it is only to need to conside the GroupBy of the outer query, and innerQuery is not required to take into account. It is much simpler than purely optimizing OrderBy for ClientScanPlan, which need to make a huge modification and refactor with OrderByCompiler and OrderPreservingTracker. I have planned to purely optimize OrderBy for ClientScanPlan after this JIRA by openning a new JIRA.
---