Github user maryannxue commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/281#discussion_r151580119
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/optimize/QueryOptimizer.java ---
    @@ -91,8 +91,23 @@ public QueryPlan optimize(PhoenixStatement statement, 
SelectStatement select, Co
         }
         
         public QueryPlan optimize(QueryPlan dataPlan, PhoenixStatement 
statement, List<? extends PDatum> targetColumns, ParallelIteratorFactory 
parallelIteratorFactory) throws SQLException {
    -        List<QueryPlan>plans = getApplicablePlans(dataPlan, statement, 
targetColumns, parallelIteratorFactory, true);
    -        return plans.get(0);
    +        List<QueryPlan> plans = getApplicablePlans(dataPlan, statement, 
targetColumns, parallelIteratorFactory, false);
    +        if (plans.size() == 1) {
    +            return plans.get(0);
    +        }
    +
    +        // Get the best plan based on their costs. Costs will be ZERO if 
stats are not
    +        // available, thus the first plan will be returned.
    +        Cost minCost = null;
    +        QueryPlan bestPlan = null;
    +        for (QueryPlan plan : plans) {
    +            Cost cost = plan.getCost();
    +            if (minCost == null || cost.compareTo(minCost) < 0) {
    +                minCost = cost;
    +                bestPlan = plan;
    +            }
    +        }
    +        return bestPlan;
    --- End diff --
    
    Thanks for the feedback, @katameru! We need to define a strategy how hints 
work in the cost-based optimizer mode. Your input would be very much 
appreciated!
    Since this is the first issue in which I've brought "cost-based" in, the 
idea is to plug-in the framework and pieces of code here and there needed to 
make it work in general. We can see there's still a lot to do to refine this 
framework, and as I dig further into other issues under PHOENIX-4313. Right now 
I think adding a option to disable cost-based optimizer (pls see my latest ci) 
should be enough.


---

Reply via email to