package com.taobao.tddl.optimizer.costbased.after;
import java.util.Map;
import com.taobao.tddl.common.jdbc.ParameterContext;
import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor;
import com.taobao.tddl.optimizer.exceptions.QueryException;
/**
* <pre>
* 对执行计划树的优化,包含以下几个步骤:
* s8.为执行计划的每个节点选择执行的GroupNode
* 这一步是根据TDDL的规则进行分库 在Join,Merge的执行节点选择上,遵循的原则是尽量减少网络传输
*
* s9.调整分库后的Join节点
* 由于分库后,一个Query节点可能会变成一个Merge节点,需要对包含这样子节点的Join节点进行调整,详细见splitJoinAfterChooseDataNode的注释
* </pre>
*
* @since 5.0.0
*/
public interface QueryPlanOptimizer {
IDataNodeExecutor optimize(IDataNodeExecutor dne, Map<Integer, ParameterContext> parameterSettings,
Map<String, Object> extraCmd) throws QueryException;
}