From efa1b909ae2f4a192aa39cbd2c1d38647d7b6228 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Thu, 7 Nov 2019 13:20:50 +0800 Subject: [PATCH 01/14] planner: support hint for IndexHashJoin and IndexMergeJoin --- planner/core/exhaust_physical_plans.go | 114 ++++++++++++++++++------- planner/core/hints.go | 4 +- planner/core/logical_plan_builder.go | 61 ++++++++++--- planner/core/logical_plans.go | 8 +- planner/core/planbuilder.go | 28 ++++-- 5 files changed, 163 insertions(+), 52 deletions(-) diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index 3db0d9cbcf83c..9ff31536afca5 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -1152,18 +1152,37 @@ func (ijHelper *indexJoinBuildHelper) buildTemplateRange(matchedKeyCnt int, eqAn // tryToGetIndexJoin will get index join by hints. If we can generate a valid index join by hint, the second return value // will be true, which means we force to choose this index join. Otherwise we will select a join algorithm with min-cost. func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJoins []PhysicalPlan, forced bool) { - rightOuter := (p.preferJoinType & preferLeftAsIndexInner) > 0 - leftOuter := (p.preferJoinType & preferRightAsIndexInner) > 0 - hasIndexJoinHint := leftOuter || rightOuter + inljRightOuter := (p.preferJoinType & preferLeftAsINLJInner) > 0 + inljLeftOuter := (p.preferJoinType & preferRightAsINLJInner) > 0 + hasINLJHint := inljLeftOuter || inljRightOuter + + inlhjRightOuter := (p.preferJoinType & preferLeftAsINLHJInner) > 0 + inlhjLeftOuter := (p.preferJoinType & preferRightAsINLHJInner) > 0 + hasINLHJHint := inlhjLeftOuter || inlhjRightOuter + + inlmjRightOuter := (p.preferJoinType & preferLeftAsINLMJInner) > 0 + inlmjLeftOuter := (p.preferJoinType & preferRightAsINLMJInner) > 0 + hasINLMJHint := inlmjLeftOuter || inlmjRightOuter + + forceLeftOuter := inljLeftOuter || inlhjLeftOuter || inlmjLeftOuter + forceRightOuter := inljRightOuter || inlhjRightOuter || inlmjRightOuter defer func() { - if !forced && hasIndexJoinHint { + // refine error message + if !forced && (hasINLJHint || hasINLHJHint || hasINLMJHint) { // Construct warning message prefix. errMsg := "Optimizer Hint INL_JOIN or TIDB_INLJ is inapplicable" if p.hintInfo != nil { - errMsg = fmt.Sprintf("Optimizer Hint %s or %s is inapplicable", - restore2JoinHint(HintINLJ, p.hintInfo.indexNestedLoopJoinTables), - restore2JoinHint(TiDBIndexNestedLoopJoin, p.hintInfo.indexNestedLoopJoinTables)) + t := p.hintInfo.indexNestedLoopJoinTables + switch { + case len(t.inljTables) != 0: + errMsg = fmt.Sprintf("Optimizer Hint %s or %s is inapplicable", + restore2JoinHint(HintINLJ, t.inljTables), restore2JoinHint(TiDBIndexNestedLoopJoin, t.inljTables)) + case len(t.inlhjTables) != 0: + errMsg = fmt.Sprintf("Optimizer Hint %s is inapplicable", restore2JoinHint(HintINLHJ, t.inlhjTables)) + case len(t.inlmjTables) != 0: + errMsg = fmt.Sprintf("Optimizer Hint %s is inapplicable", restore2JoinHint(HintINLMJ, t.inlmjTables)) + } } // Append inapplicable reason. @@ -1177,36 +1196,73 @@ func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJ } }() + // canLeftOuter and canRightOuter indicates whether this type of join + // supports the left side or right side to be the outer side. + var canLeftOuter, canRightOuter bool switch p.JoinType { case SemiJoin, AntiSemiJoin, LeftOuterSemiJoin, AntiLeftOuterSemiJoin, LeftOuterJoin: - join := p.getIndexJoinByOuterIdx(prop, 0) - return join, join != nil && leftOuter + canLeftOuter = true case RightOuterJoin: - join := p.getIndexJoinByOuterIdx(prop, 1) - return join, join != nil && rightOuter + canRightOuter = true case InnerJoin: - lhsCardinality := p.Children()[0].statsInfo().Count() - rhsCardinality := p.Children()[1].statsInfo().Count() - - leftJoins := p.getIndexJoinByOuterIdx(prop, 0) - if leftJoins != nil && (leftOuter && !rightOuter || lhsCardinality < rhsCardinality) { - return leftJoins, leftOuter + canLeftOuter, canRightOuter = true, true + } + + var allLeftOuterJoins, allRightOuterJoins, forcedLeftOuterJoins, forcedRightOuterJoins []PhysicalPlan + if canLeftOuter { + allLeftOuterJoins = p.getIndexJoinByOuterIdx(prop, 0) + forcedLeftOuterJoins = make([]PhysicalPlan, 0, len(allLeftOuterJoins)) + for _, j := range allLeftOuterJoins { + switch j.(type) { + case *PhysicalIndexJoin: + if hasINLJHint { + forcedLeftOuterJoins = append(forcedLeftOuterJoins, j) + } + case *PhysicalIndexHashJoin: + if hasINLHJHint { + forcedLeftOuterJoins = append(forcedLeftOuterJoins, j) + } + case *PhysicalIndexMergeJoin: + if hasINLMJHint { + forcedLeftOuterJoins = append(forcedLeftOuterJoins, j) + } + } } - - rightJoins := p.getIndexJoinByOuterIdx(prop, 1) - if rightJoins != nil && (rightOuter && !leftOuter || rhsCardinality < lhsCardinality) { - return rightJoins, rightOuter + if !canRightOuter || forcedLeftOuterJoins != nil && (forceLeftOuter && !forceRightOuter) { + return forcedLeftOuterJoins, forcedLeftOuterJoins != nil && forceLeftOuter + } + } + if canRightOuter { + allRightOuterJoins = p.getIndexJoinByOuterIdx(prop, 1) + forcedRightOuterJoins = make([]PhysicalPlan, 0, len(allRightOuterJoins)) + for _, j := range allRightOuterJoins { + switch j.(type) { + case *PhysicalIndexJoin: + if hasINLJHint { + forcedRightOuterJoins = append(forcedRightOuterJoins, j) + } + case *PhysicalIndexHashJoin: + if hasINLHJHint { + forcedRightOuterJoins = append(forcedRightOuterJoins, j) + } + case *PhysicalIndexMergeJoin: + if hasINLMJHint { + forcedRightOuterJoins = append(forcedRightOuterJoins, j) + } + } + } + if !canLeftOuter || forcedRightOuterJoins != nil && (forceRightOuter && !forceLeftOuter) { + return forcedRightOuterJoins, forcedRightOuterJoins != nil && forceRightOuter } - - canForceLeft := leftJoins != nil && leftOuter - canForceRight := rightJoins != nil && rightOuter - forced = canForceLeft || canForceRight - - joins := append(leftJoins, rightJoins...) - return joins, forced } - return nil, false + canForceLeft := forcedLeftOuterJoins != nil && forceLeftOuter + canForceRight := forcedRightOuterJoins != nil && forceRightOuter + forced = canForceLeft || canForceRight + if forced { + return append(forcedLeftOuterJoins, forcedRightOuterJoins...), forced + } + return append(allLeftOuterJoins, allRightOuterJoins...), forced } // LogicalJoin can generates hash join, index join and sort merge join. diff --git a/planner/core/hints.go b/planner/core/hints.go index c94da58f0663f..d35094bb9f517 100644 --- a/planner/core/hints.go +++ b/planner/core/hints.go @@ -315,7 +315,9 @@ func genHintsFromPhysicalPlan(p PhysicalPlan, nodeType nodeType) (res []*ast.Tab case *PhysicalIndexJoin: res = append(res, getJoinHints(p.SCtx(), HintINLJ, p.SelectBlockOffset(), nodeType, pp.children[pp.InnerChildIdx])...) case *PhysicalIndexMergeJoin: - res = append(res, getJoinHints(p.SCtx(), HintINLJ, p.SelectBlockOffset(), nodeType, pp.children[pp.InnerChildIdx])...) + res = append(res, getJoinHints(p.SCtx(), HintINLMJ, p.SelectBlockOffset(), nodeType, pp.children[pp.InnerChildIdx])...) + case *PhysicalIndexHashJoin: + res = append(res, getJoinHints(p.SCtx(), HintINLHJ, p.SelectBlockOffset(), nodeType, pp.children[pp.InnerChildIdx])...) } return res } diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 74a1e52b01939..28842feb846ec 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -55,8 +55,12 @@ const ( HintSMJ = "sm_join" // TiDBIndexNestedLoopJoin is hint enforce index nested loop join. TiDBIndexNestedLoopJoin = "tidb_inlj" - // HintINLJ is hint enforce index nested loop join. + // HintINLJ is hint enforce index nested loop hash/sort merge join. HintINLJ = "inl_join" + // HintINLHJ is hint enforce index nested loop hash join. + HintINLHJ = "inl_hash_join" + // HintINLMJ is hint enforce index nested loop merge join. + HintINLMJ = "inl_merge_join" // TiDBHashJoin is hint enforce hash join. TiDBHashJoin = "tidb_hj" // HintHJ is hint enforce hash join. @@ -372,10 +376,22 @@ func (p *LogicalJoin) setPreferredJoinType(hintInfo *tableHintInfo) { p.preferJoinType |= preferHashJoin } if hintInfo.ifPreferINLJ(lhsAlias) { - p.preferJoinType |= preferLeftAsIndexInner + p.preferJoinType |= preferLeftAsINLJInner } if hintInfo.ifPreferINLJ(rhsAlias) { - p.preferJoinType |= preferRightAsIndexInner + p.preferJoinType |= preferRightAsINLJInner + } + if hintInfo.ifPreferINLHJ(lhsAlias) { + p.preferJoinType |= preferLeftAsINLHJInner + } + if hintInfo.ifPreferINLHJ(rhsAlias) { + p.preferJoinType |= preferRightAsINLHJInner + } + if hintInfo.ifPreferINLMJ(lhsAlias) { + p.preferJoinType |= preferLeftAsINLMJInner + } + if hintInfo.ifPreferINLMJ(rhsAlias) { + p.preferJoinType |= preferRightAsINLMJInner } // set hintInfo for further usage if this hint info can be used. @@ -385,7 +401,10 @@ func (p *LogicalJoin) setPreferredJoinType(hintInfo *tableHintInfo) { // If there're multiple join types and one of them is not index join hint, // then there is a conflict of join types. - if bits.OnesCount(p.preferJoinType) > 1 && (p.preferJoinType^preferRightAsIndexInner^preferLeftAsIndexInner) > 0 { + containIndexJoin := (p.preferJoinType^preferRightAsINLJInner^preferLeftAsINLJInner) > 0 || + (p.preferJoinType^preferRightAsINLHJInner^preferLeftAsINLHJInner) > 0 || + (p.preferJoinType^preferRightAsINLMJInner^preferLeftAsINLMJInner) > 0 + if bits.OnesCount(p.preferJoinType) > 1 && containIndexJoin { errMsg := "Join hints are conflict, you can only specify one type of join" warning := ErrInternal.GenWithStack(errMsg) p.ctx.GetSessionVars().StmtCtx.AppendWarning(warning) @@ -2076,10 +2095,10 @@ func (b *PlanBuilder) unfoldWildStar(p LogicalPlan, selectFields []*ast.SelectFi func (b *PlanBuilder) pushTableHints(hints []*ast.TableOptimizerHint, nodeType nodeType, currentLevel int) { hints = b.hintProcessor.getCurrentStmtHints(hints, nodeType, currentLevel) var ( - sortMergeTables, INLJTables, hashJoinTables []hintTableInfo - indexHintList []indexHintInfo - tiflashTables []hintTableInfo - aggHints aggHintInfo + sortMergeTables, INLJTables, INLHJTables, INLMJTables, hashJoinTables []hintTableInfo + indexHintList []indexHintInfo + tiflashTables []hintTableInfo + aggHints aggHintInfo ) for _, hint := range hints { switch hint.HintName.L { @@ -2087,6 +2106,10 @@ func (b *PlanBuilder) pushTableHints(hints []*ast.TableOptimizerHint, nodeType n sortMergeTables = append(sortMergeTables, tableNames2HintTableInfo(b.ctx, hint.Tables, b.hintProcessor, nodeType, currentLevel)...) case TiDBIndexNestedLoopJoin, HintINLJ: INLJTables = append(INLJTables, tableNames2HintTableInfo(b.ctx, hint.Tables, b.hintProcessor, nodeType, currentLevel)...) + case HintINLHJ: + INLHJTables = append(INLHJTables, tableNames2HintTableInfo(b.ctx, hint.Tables, b.hintProcessor, nodeType, currentLevel)...) + case HintINLMJ: + INLMJTables = append(INLMJTables, tableNames2HintTableInfo(b.ctx, hint.Tables, b.hintProcessor, nodeType, currentLevel)...) case TiDBHashJoin, HintHJ: hashJoinTables = append(hashJoinTables, tableNames2HintTableInfo(b.ctx, hint.Tables, b.hintProcessor, nodeType, currentLevel)...) case HintHashAgg: @@ -2137,7 +2160,7 @@ func (b *PlanBuilder) pushTableHints(hints []*ast.TableOptimizerHint, nodeType n } b.tableHintInfo = append(b.tableHintInfo, tableHintInfo{ sortMergeJoinTables: sortMergeTables, - indexNestedLoopJoinTables: INLJTables, + indexNestedLoopJoinTables: indexNestedLoopJoinTables{INLJTables, INLHJTables, INLMJTables}, hashJoinTables: hashJoinTables, indexHintList: indexHintList, flashTables: tiflashTables, @@ -2147,7 +2170,9 @@ func (b *PlanBuilder) pushTableHints(hints []*ast.TableOptimizerHint, nodeType n func (b *PlanBuilder) popTableHints() { hintInfo := b.tableHintInfo[len(b.tableHintInfo)-1] - b.appendUnmatchedJoinHintWarning(HintINLJ, TiDBIndexNestedLoopJoin, hintInfo.indexNestedLoopJoinTables) + b.appendUnmatchedJoinHintWarning(HintINLJ, TiDBIndexNestedLoopJoin, hintInfo.indexNestedLoopJoinTables.inljTables) + b.appendUnmatchedJoinHintWarning(HintINLHJ, "", hintInfo.indexNestedLoopJoinTables.inlhjTables) + b.appendUnmatchedJoinHintWarning(HintINLMJ, "", hintInfo.indexNestedLoopJoinTables.inlmjTables) b.appendUnmatchedJoinHintWarning(HintSMJ, TiDBMergeJoin, hintInfo.sortMergeJoinTables) b.appendUnmatchedJoinHintWarning(HintHJ, TiDBHashJoin, hintInfo.hashJoinTables) b.tableHintInfo = b.tableHintInfo[:len(b.tableHintInfo)-1] @@ -2158,8 +2183,12 @@ func (b *PlanBuilder) appendUnmatchedJoinHintWarning(joinType string, joinTypeAl if len(unMatchedTables) == 0 { return } - errMsg := fmt.Sprintf("There are no matching table names for (%s) in optimizer hint %s or %s. Maybe you can use the table alias name", - strings.Join(unMatchedTables, ", "), restore2JoinHint(joinType, hintTables), restore2JoinHint(joinTypeAlias, hintTables)) + if len(joinTypeAlias) != 0 { + joinTypeAlias = fmt.Sprintf(" or %s", restore2JoinHint(joinTypeAlias, hintTables)) + } + + errMsg := fmt.Sprintf("There are no matching table names for (%s) in optimizer hint %s%s. Maybe you can use the table alias name", + strings.Join(unMatchedTables, ", "), restore2JoinHint(joinType, hintTables), joinTypeAlias) b.ctx.GetSessionVars().StmtCtx.AppendWarning(ErrInternal.GenWithStack(errMsg)) } @@ -2791,7 +2820,13 @@ func (b *PlanBuilder) buildSemiJoin(outerPlan, innerPlan LogicalPlan, onConditio joinPlan.preferJoinType |= preferHashJoin } if b.TableHints().ifPreferINLJ(innerAlias) { - joinPlan.preferJoinType = preferRightAsIndexInner + joinPlan.preferJoinType = preferRightAsINLJInner + } + if b.TableHints().ifPreferINLHJ(innerAlias) { + joinPlan.preferJoinType = preferRightAsINLHJInner + } + if b.TableHints().ifPreferINLMJ(innerAlias) { + joinPlan.preferJoinType = preferRightAsINLMJInner } // If there're multiple join hints, they're conflict. if bits.OnesCount(joinPlan.preferJoinType) > 1 { diff --git a/planner/core/logical_plans.go b/planner/core/logical_plans.go index 29abcf399e1fd..10a1f9239415e 100644 --- a/planner/core/logical_plans.go +++ b/planner/core/logical_plans.go @@ -97,8 +97,12 @@ func (tp JoinType) String() string { } const ( - preferLeftAsIndexInner = 1 << iota - preferRightAsIndexInner + preferLeftAsINLJInner = 1 << iota + preferRightAsINLJInner + preferLeftAsINLHJInner + preferRightAsINLHJInner + preferLeftAsINLMJInner + preferRightAsINLMJInner preferHashJoin preferMergeJoin preferHashAgg diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index c2315c75ebb8e..03ddaf04bd2fa 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -56,13 +56,19 @@ type visitInfo struct { err error } +type indexNestedLoopJoinTables struct { + inljTables []hintTableInfo + inlhjTables []hintTableInfo + inlmjTables []hintTableInfo +} + type tableHintInfo struct { - indexNestedLoopJoinTables []hintTableInfo - sortMergeJoinTables []hintTableInfo - hashJoinTables []hintTableInfo - indexHintList []indexHintInfo - flashTables []hintTableInfo - aggHints aggHintInfo + indexNestedLoopJoinTables + sortMergeJoinTables []hintTableInfo + hashJoinTables []hintTableInfo + indexHintList []indexHintInfo + flashTables []hintTableInfo + aggHints aggHintInfo } type hintTableInfo struct { @@ -108,7 +114,15 @@ func (info *tableHintInfo) ifPreferHashJoin(tableNames ...*hintTableInfo) bool { } func (info *tableHintInfo) ifPreferINLJ(tableNames ...*hintTableInfo) bool { - return info.matchTableName(tableNames, info.indexNestedLoopJoinTables) + return info.matchTableName(tableNames, info.indexNestedLoopJoinTables.inljTables) +} + +func (info *tableHintInfo) ifPreferINLHJ(tableNames ...*hintTableInfo) bool { + return info.matchTableName(tableNames, info.indexNestedLoopJoinTables.inlhjTables) +} + +func (info *tableHintInfo) ifPreferINLMJ(tableNames ...*hintTableInfo) bool { + return info.matchTableName(tableNames, info.indexNestedLoopJoinTables.inlmjTables) } func (info *tableHintInfo) ifPreferTiFlash(tableNames ...*hintTableInfo) bool { From 6ad9281d49d5bfe89f965f349a0bf3e08eec195f Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Thu, 7 Nov 2019 16:27:01 +0800 Subject: [PATCH 02/14] add test --- executor/index_lookup_join_test.go | 55 ++++++++++++++++++++++++++ go.mod | 2 + go.sum | 2 + planner/core/exhaust_physical_plans.go | 42 +++++++++++++------- planner/core/logical_plan_builder.go | 2 +- 5 files changed, 87 insertions(+), 16 deletions(-) diff --git a/executor/index_lookup_join_test.go b/executor/index_lookup_join_test.go index f7352f35d47c9..9693ab441d414 100644 --- a/executor/index_lookup_join_test.go +++ b/executor/index_lookup_join_test.go @@ -79,6 +79,41 @@ func (s *testSuite1) TestBatchIndexJoinUnionScan(c *C) { tk.MustExec("rollback") } +func (s *testSuite1) TestIndexJoinHint(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec(`drop table if exists t1, t2;`) + tk.MustExec(`create table t1(a bigint, b bigint, index idx_a(a), index idx_b(b));`) + tk.MustExec(`create table t2(a bigint, b bigint, index idx_a(a), index idx_b(b));`) + tk.MustQuery("explain select /*+ INL_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;").Check(testkit.Rows( + "IndexJoin_25 12487.50 root inner join, inner:IndexLookUp_24, outer key:Column#4, inner key:Column#1", + "├─IndexLookUp_24 1.25 root ", + "│ ├─Selection_23 1.25 cop[tikv] not(isnull(Column#1))", + "│ │ └─IndexScan_21 1.25 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:false, stats:pseudo", + "│ └─TableScan_22 1.25 cop[tikv] table:t1, keep order:false, stats:pseudo", + "└─TableReader_37 9990.00 root data:Selection_36", + " └─Selection_36 9990.00 cop[tikv] not(isnull(Column#4))", + " └─TableScan_35 10000.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false, stats:pseudo")) + tk.MustQuery("explain select /*+ INL_HASH_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;").Check(testkit.Rows( + "IndexHashJoin_34 12487.50 root inner join, inner:IndexLookUp_24, outer key:Column#4, inner key:Column#1", + "├─IndexLookUp_24 1.25 root ", + "│ ├─Selection_23 1.25 cop[tikv] not(isnull(Column#1))", + "│ │ └─IndexScan_21 1.25 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:false, stats:pseudo", + "│ └─TableScan_22 1.25 cop[tikv] table:t1, keep order:false, stats:pseudo", + "└─TableReader_37 9990.00 root data:Selection_36", + " └─Selection_36 9990.00 cop[tikv] not(isnull(Column#4))", + " └─TableScan_35 10000.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false, stats:pseudo")) + tk.MustQuery("explain select /*+ INL_MERGE_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;").Check(testkit.Rows( + "IndexMergeJoin_32 12487.50 root inner join, inner:Projection_30, outer key:Column#4, inner key:Column#1", + "├─Projection_30 1.25 root Column#1, Column#2", + "│ └─IndexLookUp_29 1.25 root ", + "│ ├─Selection_28 1.25 cop[tikv] not(isnull(Column#1))", + "│ │ └─IndexScan_26 1.25 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:true, stats:pseudo", + "│ └─TableScan_27 1.25 cop[tikv] table:t1, keep order:false, stats:pseudo", + "└─TableReader_37 9990.00 root data:Selection_36", + " └─Selection_36 9990.00 cop[tikv] not(isnull(Column#4))", + " └─TableScan_35 10000.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false, stats:pseudo")) +} + func (s *testSuite1) TestInapplicableIndexJoinHint(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) tk.MustExec(`drop table if exists t1, t2;`) @@ -89,6 +124,16 @@ func (s *testSuite1) TestInapplicableIndexJoinHint(c *C) { tk.MustQuery(`select /*+ TIDB_INLJ(t1, t2) */ * from t1 join t2 on t1.a=t2.a;`).Check(testkit.Rows()) tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_JOIN(t1, t2) */ or /*+ TIDB_INLJ(t1, t2) */ is inapplicable`)) + tk.MustQuery(`select /*+ INL_HASH_JOIN(t1, t2) */ * from t1, t2;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_HASH_JOIN(t1, t2) */ is inapplicable without column equal ON condition`)) + tk.MustQuery(`select /*+ INL_HASH_JOIN(t1, t2) */ * from t1 join t2 on t1.a=t2.a;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_HASH_JOIN(t1, t2) */ is inapplicable`)) + + tk.MustQuery(`select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1, t2;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1, t2) */ is inapplicable without column equal ON condition`)) + tk.MustQuery(`select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1 join t2 on t1.a=t2.a;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1, t2) */ is inapplicable`)) + tk.MustExec(`drop table if exists t1, t2;`) tk.MustExec(`create table t1(a bigint, b bigint, index idx_a(a));`) tk.MustExec(`create table t2(a bigint, b bigint);`) @@ -96,6 +141,16 @@ func (s *testSuite1) TestInapplicableIndexJoinHint(c *C) { tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_JOIN(t1) */ or /*+ TIDB_INLJ(t1) */ is inapplicable`)) tk.MustQuery(`select /*+ TIDB_INLJ(t2) */ * from t1 right join t2 on t1.a=t2.a;`).Check(testkit.Rows()) tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_JOIN(t2) */ or /*+ TIDB_INLJ(t2) */ is inapplicable`)) + + tk.MustQuery(`select /*+ INL_HASH_JOIN(t1) */ * from t1 left join t2 on t1.a=t2.a;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_HASH_JOIN(t1) */ is inapplicable`)) + tk.MustQuery(`select /*+ INL_HASH_JOIN(t2) */ * from t1 right join t2 on t1.a=t2.a;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_HASH_JOIN(t2) */ is inapplicable`)) + + tk.MustQuery(`select /*+ INL_MERGE_JOIN(t1) */ * from t1 left join t2 on t1.a=t2.a;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1) */ is inapplicable`)) + tk.MustQuery(`select /*+ INL_MERGE_JOIN(t2) */ * from t1 right join t2 on t1.a=t2.a;`).Check(testkit.Rows()) + tk.MustQuery(`show warnings;`).Check(testkit.Rows(`Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t2) */ is inapplicable`)) } func (s *testSuite) TestIndexJoinOverflow(c *C) { diff --git a/go.mod b/go.mod index e9d399724ee9d..69adfabda4846 100644 --- a/go.mod +++ b/go.mod @@ -84,3 +84,5 @@ require ( replace github.com/google/pprof => github.com/lonng/pprof v0.0.0-20191012154247-04dfd648ce8d go 1.13 + +replace github.com/pingcap/parser => github.com/pingcap/parser v0.0.0-20191107065854-0811e8d41a36 diff --git a/go.sum b/go.sum index f50772ec7f607..6dcdd592b4cd6 100644 --- a/go.sum +++ b/go.sum @@ -172,6 +172,8 @@ github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/parser v0.0.0-20191031081038-bfb0c3adf567 h1:Ge5Vt+44xJkb2DZwrdyoD+qMclm1Sq5bWyCc6mW7GpI= github.com/pingcap/parser v0.0.0-20191031081038-bfb0c3adf567/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= +github.com/pingcap/parser v0.0.0-20191107065854-0811e8d41a36 h1:9uobXXTqIGXFu7ys8ns8hRSgztKOA5rGKg+6xpapSkE= +github.com/pingcap/parser v0.0.0-20191107065854-0811e8d41a36/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0 h1:GIEq+wZfrl2bcJxpuSrEH4H7/nlf5YdmpS+dU9lNIt8= github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0/go.mod h1:G/6rJpnYwM0LKMec2rI82/5Kg6GaZMvlfB+e6/tvYmI= github.com/pingcap/tidb-tools v2.1.3-0.20190321065848-1e8b48f5c168+incompatible h1:MkWCxgZpJBgY2f4HtwWMMFzSBb3+JPzeJgF3VrXE/bU= diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index 9ff31536afca5..0ae938b229f94 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -1168,10 +1168,18 @@ func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJ forceRightOuter := inljRightOuter || inlhjRightOuter || inlmjRightOuter defer func() { - // refine error message + // refine error message if !forced && (hasINLJHint || hasINLHJHint || hasINLMJHint) { // Construct warning message prefix. - errMsg := "Optimizer Hint INL_JOIN or TIDB_INLJ is inapplicable" + var errMsg string + switch { + case hasINLJHint: + errMsg = "Optimizer Hint INL_JOIN or TIDB_INLJ is inapplicable" + case hasINLHJHint: + errMsg = "Optimizer Hint INL_HASH_JOIN is inapplicable" + case hasINLMJHint: + errMsg = "Optimizer Hint INL_MERGE_JOIN is inapplicable" + } if p.hintInfo != nil { t := p.hintInfo.indexNestedLoopJoinTables switch { @@ -1196,20 +1204,20 @@ func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJ } }() - // canLeftOuter and canRightOuter indicates whether this type of join + // supportLeftOuter and supportRightOuter indicates whether this type of join // supports the left side or right side to be the outer side. - var canLeftOuter, canRightOuter bool + var supportLeftOuter, supportRightOuter bool switch p.JoinType { case SemiJoin, AntiSemiJoin, LeftOuterSemiJoin, AntiLeftOuterSemiJoin, LeftOuterJoin: - canLeftOuter = true + supportLeftOuter = true case RightOuterJoin: - canRightOuter = true + supportRightOuter = true case InnerJoin: - canLeftOuter, canRightOuter = true, true + supportLeftOuter, supportRightOuter = true, true } var allLeftOuterJoins, allRightOuterJoins, forcedLeftOuterJoins, forcedRightOuterJoins []PhysicalPlan - if canLeftOuter { + if supportLeftOuter { allLeftOuterJoins = p.getIndexJoinByOuterIdx(prop, 0) forcedLeftOuterJoins = make([]PhysicalPlan, 0, len(allLeftOuterJoins)) for _, j := range allLeftOuterJoins { @@ -1228,11 +1236,13 @@ func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJ } } } - if !canRightOuter || forcedLeftOuterJoins != nil && (forceLeftOuter && !forceRightOuter) { - return forcedLeftOuterJoins, forcedLeftOuterJoins != nil && forceLeftOuter + if len(forcedLeftOuterJoins) != 0 && (!supportRightOuter || forceLeftOuter && !forceRightOuter) { + return forcedLeftOuterJoins, forceLeftOuter + } else if !supportRightOuter { + return allLeftOuterJoins, false } } - if canRightOuter { + if supportRightOuter { allRightOuterJoins = p.getIndexJoinByOuterIdx(prop, 1) forcedRightOuterJoins = make([]PhysicalPlan, 0, len(allRightOuterJoins)) for _, j := range allRightOuterJoins { @@ -1251,13 +1261,15 @@ func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJ } } } - if !canLeftOuter || forcedRightOuterJoins != nil && (forceRightOuter && !forceLeftOuter) { - return forcedRightOuterJoins, forcedRightOuterJoins != nil && forceRightOuter + if len(forcedRightOuterJoins) != 0 && (!supportLeftOuter || forceRightOuter && !forceLeftOuter) { + return forcedRightOuterJoins, forceRightOuter + } else if !supportLeftOuter { + return allRightOuterJoins, false } } - canForceLeft := forcedLeftOuterJoins != nil && forceLeftOuter - canForceRight := forcedRightOuterJoins != nil && forceRightOuter + canForceLeft := len(forcedLeftOuterJoins) != 0 && forceLeftOuter + canForceRight := len(forcedRightOuterJoins) != 0 && forceRightOuter forced = canForceLeft || canForceRight if forced { return append(forcedLeftOuterJoins, forcedRightOuterJoins...), forced diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 28842feb846ec..6c7b9a8517c4b 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -404,7 +404,7 @@ func (p *LogicalJoin) setPreferredJoinType(hintInfo *tableHintInfo) { containIndexJoin := (p.preferJoinType^preferRightAsINLJInner^preferLeftAsINLJInner) > 0 || (p.preferJoinType^preferRightAsINLHJInner^preferLeftAsINLHJInner) > 0 || (p.preferJoinType^preferRightAsINLMJInner^preferLeftAsINLMJInner) > 0 - if bits.OnesCount(p.preferJoinType) > 1 && containIndexJoin { + if bits.OnesCount(p.preferJoinType) > 1 && !containIndexJoin { errMsg := "Join hints are conflict, you can only specify one type of join" warning := ErrInternal.GenWithStack(errMsg) p.ctx.GetSessionVars().StmtCtx.AppendWarning(warning) From c785feead79fd07660cf28cb09e2a25b54ee6bd3 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Thu, 7 Nov 2019 16:42:03 +0800 Subject: [PATCH 03/14] update go.mod --- go.mod | 11 ++++++----- go.sum | 10 ++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 69adfabda4846..d267e518a50a8 100644 --- a/go.mod +++ b/go.mod @@ -29,6 +29,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.5.1 // indirect github.com/json-iterator/go v1.1.6 // indirect github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.1 // indirect github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808 // indirect @@ -43,10 +44,10 @@ require ( github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e github.com/pingcap/kvproto v0.0.0-20191101062931-76b56d6eb466 github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 - github.com/pingcap/parser v0.0.0-20191031081038-bfb0c3adf567 + github.com/pingcap/parser v0.0.0-20191107084102-68af6554dec7 github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0 github.com/pingcap/tidb-tools v2.1.3-0.20190321065848-1e8b48f5c168+incompatible - github.com/pingcap/tipb v0.0.0-20191029074152-e6f0f14af644 + github.com/pingcap/tipb v0.0.0-20191105120856-bd4b782c8393 github.com/prometheus/client_golang v0.9.0 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 github.com/prometheus/common v0.0.0-20181020173914-7e9e6cabbd39 // indirect @@ -55,7 +56,7 @@ require ( github.com/shirou/gopsutil v2.18.10+incompatible github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371 // indirect github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca // indirect - github.com/sirupsen/logrus v1.2.0 + github.com/sirupsen/logrus v1.4.2 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 github.com/struCoder/pidusage v0.1.2 github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 @@ -67,9 +68,9 @@ require ( go.uber.org/atomic v1.4.0 go.uber.org/multierr v1.2.0 // indirect go.uber.org/zap v1.10.0 - golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf // indirect + golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 // indirect golang.org/x/net v0.0.0-20190909003024-a7b16738d86b - golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c + golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd golang.org/x/text v0.3.2 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect golang.org/x/tools v0.0.0-20190911022129-16c5e0f7d110 diff --git a/go.sum b/go.sum index 6dcdd592b4cd6..603a943e53851 100644 --- a/go.sum +++ b/go.sum @@ -114,6 +114,8 @@ github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDK github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.0.0/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -180,6 +182,8 @@ github.com/pingcap/tidb-tools v2.1.3-0.20190321065848-1e8b48f5c168+incompatible github.com/pingcap/tidb-tools v2.1.3-0.20190321065848-1e8b48f5c168+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tipb v0.0.0-20191029074152-e6f0f14af644 h1:J+nYGNqumgP4jtBz5Nqre1wiE/HrLXrJpFpqOotfoNc= github.com/pingcap/tipb v0.0.0-20191029074152-e6f0f14af644/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= +github.com/pingcap/tipb v0.0.0-20191105120856-bd4b782c8393 h1:8XcpRME085GsIe3eiJGhmuDPAjG8CUa8VE/QnQAwmfM= +github.com/pingcap/tipb v0.0.0-20191105120856-bd4b782c8393/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -211,6 +215,8 @@ github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca/go.mod h1:TrYk7fJV github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= @@ -270,6 +276,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf h1:fnPsqIDRbCSgumaMCRpoIoF2s4qxv0xSSS0BVZUE/ss= golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -294,11 +301,14 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190909082730-f460065e899a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c h1:S/FtSvpNLtFBgjTqcKsRpsa6aVsI6iztaz1bQd9BJwE= golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd h1:3x5uuvBgE6oaXJjCOvpCC1IpgJogqQ+PqGGU3ZxAgII= +golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= From 4adf5c5f88d7dcfb856bdae43d6c9377f5654009 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Thu, 7 Nov 2019 16:47:03 +0800 Subject: [PATCH 04/14] go mod tidy --- go.sum | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/go.sum b/go.sum index 667d411b079a0..1e92a1d415dff 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f h1:5ZfJxyXo8KyX8DgGXC5B7ILL8y51fci/qYz2B4j8iLY= github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= @@ -15,6 +16,7 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 h1:3jFq2xL4ZajGK4aZY8jz+DAF0FHjI51BXjjSwCzS1Dk= @@ -27,27 +29,37 @@ github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65 h1:hxuZop6tSoOi0sxFzoGGYdRqNrPubyaIf9KoBG9tPiE= github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f h1:dDxpBYafY/GYpcl+LS4Bn3ziLPuEdGRkRjYAbSlWxSA= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= +github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-playground/overalls v0.0.0-20180201144345-22ec1a223b7c/go.mod h1:UqxAgEOt89sCiXlrc/ycnx00LVvUO/eS8tMUkWX4R7w= +github.com/go-sql-driver/mysql v0.0.0-20170715192408-3955978caca4 h1:3DFRjZdCDhzvxDf0U6/1qAryzOqD7Y5iAj0DJRRl1bs= github.com/go-sql-driver/mysql v0.0.0-20170715192408-3955978caca4/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/gogo/protobuf v0.0.0-20180717141946-636bf0302bc9/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0 h1:xU6/SpYbvkNYiptHJYEDRseDLvYE7wSqhYYNy0QSUzI= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20181024230925-c65c006176ff/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v0.0.0-20180814211427-aa810b61a9c7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -66,31 +78,42 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.5.1 h1:3scN4iuXkNOyP98jF55Lv8a9j1o/IwvnDIZ0LHJK1nk= github.com/grpc-ecosystem/grpc-gateway v1.5.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf h1:Ut4tTtPNmInWiEWJRernsWm688R0RN6PFO8sZhwI0sk= github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf/go.mod h1:4AmD/VxjWcI5SRB0n6szE2A6s2fsNHDLO0nAlMHgfLQ= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/juju/ratelimit v1.0.1 h1:+7AIFJVQ0EQgq/K9+0Krm7m530Du7tIz0METWzN0RgY= github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.0.0/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lonng/pprof v0.0.0-20191012154247-04dfd648ce8d h1:6Ike9EBxOFsCMMih14rQJmb7WPWdgRu4C0OLl6oRHwE= github.com/lonng/pprof v0.0.0-20191012154247-04dfd648ce8d/go.mod h1:0vjxLpmyJvBwQbIQuxhHxmogQFpJvB9doVHvxFFfyoY= @@ -102,6 +125,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.0/go.mod h1:D8He9yQNgCq6Z5 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/montanaflynn/stats v0.0.0-20151014174947-eeaced052adb/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808 h1:pmpDGKLw4n82EtrNiLqB+xSz/JQwFOaZuMALYUHwX5s= github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 h1:7KAv7KMGTTqSmYZtNdcNTgsos+vFzULLwyElndwn+5c= github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7/go.mod h1:iWMfgwqYW+e8n5lC/jjNEhwcjbRDpl5NT7n2h+4UNcI= @@ -109,14 +133,18 @@ github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef h1:K0Fn+DoFqNqktdZtdV3 github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef/go.mod h1:7WjlapSfwQyo6LNmIvEWzsW1hbBQfpUO4JWnuQRmva8= github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8 h1:USx2/E1bX46VG32FIw034Au6seQ2fY9NEILmNh/UlQg= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= +github.com/pingcap/errcode v0.0.0-20180921232412-a1a7271709d9 h1:KH4f4Si9XK6/IW50HtoaiLIFHGkapOM6w83za47UYik= github.com/pingcap/errcode v0.0.0-20180921232412-a1a7271709d9/go.mod h1:4b2X8xSqxIroj/IZ9MX/VGZhAwc11wB9wRIzHvz6SeM= github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -144,6 +172,7 @@ github.com/pingcap/tipb v0.0.0-20191105120856-bd4b782c8393/go.mod h1:RtkHW8WbcNx github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.0 h1:tXuTFVHC03mW0D+Ua1Q2d1EAVqLTuggX50V0VLICCzY= @@ -163,41 +192,54 @@ github.com/remyoudompheng/bigfft v0.0.0-20190512091148-babf20351dd7/go.mod h1:qq github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.18.10+incompatible h1:cy84jW6EVRPa5g9HAHrlbxMSIjBhDSX0OFYyMYminYs= github.com/shirou/gopsutil v2.18.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371 h1:SWV2fHctRpRrp49VXJ6UZja7gU9QLHwRpIPBN89SKEo= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca h1:3fECS8atRjByijiI8yYiuwLwQ2ZxXobW7ua/8GRB3pI= github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/struCoder/pidusage v0.1.2 h1:fFPTThlcWFQyizv3xKs5Lyq1lpG5lZ36arEGNhWz2Vs= github.com/struCoder/pidusage v0.1.2/go.mod h1:pWBlW3YuSwRl6h7R5KbvA4N8oOqe9LjaKW5CwT1SPjI= +github.com/syndtr/goleveldb v0.0.0-20180815032940-ae2bd5eed72d h1:4J9HCZVpvDmj2tiKGSTUnb3Ok/9CEQb9oqu9LHKQQpc= github.com/syndtr/goleveldb v0.0.0-20180815032940-ae2bd5eed72d/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 h1:mbAskLJ0oJfDRtkanvQPiooDH8HvJ2FBh+iKT/OmiQQ= github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfKggNGDuadAa0LElHrByyrz4JPZ9fFx6Gs7nx7ZZU= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6 h1:lYIiVDtZnyTWlNwiAxLj0bbpTcx1BWCFhXjfsvmPdNc= github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo= github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk= github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo= github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.2 h1:JON3E2/GPW2iDNGoSAusl1KDf5TRQ8k8q7Tp097pZGs= github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= +github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43 h1:BasDe+IErOQKrMVXab7UayvSlIpiyGwRvuX3EKYY7UA= github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA= github.com/unrolled/render v0.0.0-20171102162132-65450fb6b2d3/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= +github.com/unrolled/render v0.0.0-20180914162206-b9786414de4d h1:ggUgChAeyge4NZ4QUw6lhHsVymzwSDJOZcE0s2X8S20= github.com/unrolled/render v0.0.0-20180914162206-b9786414de4d/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/negroni v0.3.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yookoala/realpath v1.0.0/go.mod h1:gJJMA9wuX7AcqLy1+ffPatSCySA1FQ2S8Ya9AIoYBpE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20190320044326-77d4b742cdbf/go.mod h1:KSGwdbiFchh5KIC9My2+ZVl5/3ANcwohw50dpPwa2cw= go.etcd.io/etcd v0.5.0-alpha.5.0.20190320044326-77d4b742cdbf h1:2pxGooJi3rmECPOvyqOyZgqqcKOF8Pg30aA1RXK4VuE= @@ -214,6 +256,7 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180608092829-8ac0e0d97ce4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 h1:PDpCLFAH/YIX0QpHPf2eO7L4rC2OOirBrKtXTLLiNTY= golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -247,6 +290,7 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -273,14 +317,18 @@ gopkg.in/alecthomas/gometalinter.v2 v2.0.12/go.mod h1:NDRytsqEZyolNuAgTzJkZMkSQM gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20180810215634-df19058c872c/go.mod h1:3HH7i1SgMqlzxCcBmUHW657sD4Kvv9sC3HpL3YukzwA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From cedd970b2d74d5817035fe88254d09f34b390630 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Thu, 7 Nov 2019 17:00:27 +0800 Subject: [PATCH 05/14] test --- go.sum | 1 + 1 file changed, 1 insertion(+) diff --git a/go.sum b/go.sum index 1e92a1d415dff..b6576b5aab94b 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,7 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20171208011716-f6d7a1f6fbf3/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= From 089ca0fb921052eba2b6da0533c6fb11783a2eab Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Fri, 8 Nov 2019 15:22:42 +0800 Subject: [PATCH 06/14] fix ci --- executor/join_test.go | 4 +- planner/core/testdata/analyze_suite_out.json | 8 +-- planner/core/testdata/plan_suite_out.json | 54 ++++++++++---------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/executor/join_test.go b/executor/join_test.go index 6f24ecb01aaba..bf187e837d323 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -1054,14 +1054,14 @@ func (s *testSuiteJoin1) TestIndexNestedLoopHashJoin(c *C) { tk.MustExec("analyze table t") tk.MustExec("analyze table s") // Test IndexNestedLoopHashJoin keepOrder. - tk.MustQuery("explain select /*+ TIDB_INLJ(s) */ * from t left join s on t.a=s.a order by t.pk").Check(testkit.Rows( + tk.MustQuery("explain select /*+ INL_HASH_JOIN(s) */ * from t left join s on t.a=s.a order by t.pk").Check(testkit.Rows( "IndexHashJoin_28 100.00 root left outer join, inner:TableReader_22, outer key:Column#2, inner key:Column#3", "├─TableReader_30 100.00 root data:TableScan_29", "│ └─TableScan_29 100.00 cop[tikv] table:t, range:[-inf,+inf], keep order:true", "└─TableReader_22 1.00 root data:TableScan_21", " └─TableScan_21 1.00 cop[tikv] table:s, range: decided by [Column#2], keep order:false", )) - rs := tk.MustQuery("select /*+ TIDB_INLJ(s) */ * from t left join s on t.a=s.a order by t.pk") + rs := tk.MustQuery("select /*+ INL_HASH_JOIN(s) */ * from t left join s on t.a=s.a order by t.pk") for i, row := range rs.Rows() { c.Assert(row[0].(string), Equals, fmt.Sprintf("%d", i)) } diff --git a/planner/core/testdata/analyze_suite_out.json b/planner/core/testdata/analyze_suite_out.json index 7edd75001b329..22bc60ca4e7ef 100644 --- a/planner/core/testdata/analyze_suite_out.json +++ b/planner/core/testdata/analyze_suite_out.json @@ -142,13 +142,13 @@ "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t2.a=t1.a and t2.b>t1.b-1 and t2.bIndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection" + "Best": "MergeInnerJoin{TableReader(Table(t))->IndexJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection" }, { "SQL": "select /*+ SM_JOIN(test.t1) */ t1.a, t1.b from t t1, (select /*+ INL_JOIN(test.t3) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Best": "MergeInnerJoin{TableReader(Table(t))->IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection" + "Best": "MergeInnerJoin{TableReader(Table(t))->IndexJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection" }, { "SQL": "select /*+ SM_JOIN(t1) */ t1.a, t1.b from t t1, (select /*+ HASH_JOIN(t2) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", @@ -16,15 +16,15 @@ }, { "SQL": "select /*+ INL_JOIN(t1) */ t1.a, t1.b from t t1, (select /*+ HASH_JOIN(t2) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Best": "IndexMergeJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" + "Best": "IndexJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" }, { "SQL": "select /*+ INL_JOIN(test.t1) */ t1.a, t1.b from t t1, (select /*+ HASH_JOIN(test.t2) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Best": "IndexMergeJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" + "Best": "IndexJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" }, { "SQL": "select /*+ INL_JOIN(t1) */ t1.a, t1.b from t t1, (select /*+ SM_JOIN(t2) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Best": "IndexMergeJoin{TableReader(Table(t))->MergeInnerJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" + "Best": "IndexJoin{TableReader(Table(t))->MergeInnerJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" }, { "SQL": "select /*+ HASH_JOIN(t1) */ t1.a, t1.b from t t1, (select /*+ SM_JOIN(t2) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", @@ -36,7 +36,7 @@ }, { "SQL": "select /*+ HASH_JOIN(t1) */ t1.a, t1.b from t t1, (select /*+ INL_JOIN(t2) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Best": "RightHashJoin{TableReader(Table(t))->IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#27,Column#13)}(Column#1,Column#13)->Projection" + "Best": "RightHashJoin{TableReader(Table(t))->IndexJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#27,Column#13)}(Column#1,Column#13)->Projection" }, { "SQL": "select /*+ SM_JOIN(t1) */ t1.a, t1.b from t t1, (select t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", @@ -44,7 +44,7 @@ }, { "SQL": "select /*+ INL_JOIN(t1) */ t1.a, t1.b from t t1, (select t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Best": "IndexMergeJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" + "Best": "IndexJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection" }, { "SQL": "select /*+ HASH_JOIN(t1) */ t1.a, t1.b from t t1, (select t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", @@ -435,15 +435,15 @@ }, { "SQL": "select /*+ TIDB_INLJ(t1, t2) */ * from t t1, t t2 where t1.a = t2.a", - "Best": "IndexMergeJoin{TableReader(Table(t))->TableReader(Table(t))}(Column#1,Column#13)" + "Best": "IndexJoin{TableReader(Table(t))->TableReader(Table(t))}(Column#1,Column#13)" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ * from t t1, t t2 where t1.a = t2.c", - "Best": "IndexMergeJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#1,Column#15)" + "Best": "IndexJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#1,Column#15)" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ t1.a , t2.a from t t1, t t2 where t1.a = t2.c", - "Best": "IndexMergeJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#1,Column#15)->Projection" + "Best": "IndexJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#1,Column#15)->Projection" }, { "SQL": "select /*+ TIDB_INLJ(t1, t2) */ t1.a, t2.a from t t1, t t2 where t1.a = t2.a order by t1.c", @@ -455,15 +455,15 @@ }, { "SQL": "select /*+ TIDB_INLJ(t1) */ t1.a , t2.a from t t1, t t2 where t1.a = t2.c", - "Best": "IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#15,Column#1)->Projection" + "Best": "IndexJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#15,Column#1)->Projection" }, { "SQL": "select /*+ TIDB_INLJ(t1, t2) */ * from t t1 left outer join t t2 on t1.a = t2.a and t2.b < 1", - "Best": "IndexMergeJoin{TableReader(Table(t))->TableReader(Table(t)->Sel([lt(Column#14, 1)]))}(Column#1,Column#13)" + "Best": "IndexJoin{TableReader(Table(t))->TableReader(Table(t)->Sel([lt(Column#14, 1)]))}(Column#1,Column#13)" }, { "SQL": "select /*+ TIDB_INLJ(t1, t2) */ * from t t1 join t t2 on t1.d=t2.d and t2.c = 1", - "Best": "IndexMergeJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#4,Column#16)" + "Best": "IndexJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#4,Column#16)" }, { "SQL": "select /*+ TIDB_INLJ(t1, t2) */ * from t t1 left outer join t t2 on t1.a = t2.b", @@ -479,27 +479,27 @@ }, { "SQL": "select /*+ TIDB_INLJ(t1) */ * from t t1 where t1.a in (select a from t t2)", - "Best": "IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(Column#13,Column#1)->Projection" + "Best": "IndexJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(Column#13,Column#1)->Projection" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 where t1.c=t2.c and t1.f=t2.f", - "Best": "IndexMergeJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#3,Column#15)" + "Best": "IndexJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#3,Column#15)" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 where t1.a = t2.a and t1.f=t2.f", - "Best": "IndexMergeJoin{TableReader(Table(t))->TableReader(Table(t))}(Column#1,Column#13)" + "Best": "IndexJoin{TableReader(Table(t))->TableReader(Table(t))}(Column#1,Column#13)" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 where t1.f=t2.f and t1.a=t2.a", - "Best": "IndexMergeJoin{TableReader(Table(t))->TableReader(Table(t))}(Column#1,Column#13)" + "Best": "IndexJoin{TableReader(Table(t))->TableReader(Table(t))}(Column#1,Column#13)" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 where t1.a=t2.a and t2.a in (1, 2)", - "Best": "IndexMergeJoin{TableReader(Table(t))->TableReader(Table(t)->Sel([in(Column#13, 1, 2)]))}(Column#1,Column#13)" + "Best": "IndexJoin{TableReader(Table(t))->TableReader(Table(t)->Sel([in(Column#13, 1, 2)]))}(Column#1,Column#13)" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 where t1.b=t2.c and t1.b=1 and t2.d > t1.d-10 and t2.d < t1.d+10", - "Best": "IndexHashJoin{TableReader(Table(t)->Sel([eq(Column#2, 1)]))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}" + "Best": "IndexJoin{TableReader(Table(t)->Sel([eq(Column#2, 1)]))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 where t1.b=t2.b and t1.c=1 and t2.c=1 and t2.d > t1.d-10 and t2.d < t1.d+10", @@ -609,7 +609,7 @@ }, { "SQL": "delete /*+ TIDB_INLJ(t1, t2) */ t1 from t t1, t t2 where t1.c=t2.c", - "Best": "IndexMergeJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#3,Column#15)->Delete", + "Best": "IndexJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(Column#3,Column#15)->Delete", "Hints": "USE_INDEX(@`del_1` `test`.`t1` ), USE_INDEX(@`del_1` `test`.`t2` `c_d_e`), INL_JOIN(@`del_1` `test`.`t2`)" }, { @@ -803,7 +803,7 @@ }, { "SQL": "select /*+ tidb_inlj(a,b) */ sum(a.g), sum(b.g) from t a join t b on a.g = b.g and a.g > 60 group by a.g order by a.g limit 1", - "Best": "IndexMergeJoin{IndexReader(Index(t.g)[(60,+inf]])->IndexReader(Index(t.g)[[NULL,+inf]]->Sel([gt(Column#22, 60)]))}(Column#10,Column#22)->Projection->StreamAgg->Limit->Projection" + "Best": "IndexJoin{IndexReader(Index(t.g)[(60,+inf]])->IndexReader(Index(t.g)[[NULL,+inf]]->Sel([gt(Column#22, 60)]))}(Column#10,Column#22)->Projection->StreamAgg->Limit->Projection" }, { "SQL": "select sum(a.g), sum(b.g) from t a join t b on a.g = b.g and a.a>5 group by a.g order by a.g limit 1", @@ -1107,13 +1107,13 @@ "Cases": [ { "SQL": "select /*+ TIDB_INLJ(t1) */ t1.a, t2.a, t3.a from t t1, t t2, t t3 where t1.a = t2.a and t2.a = t3.a;", - "Best": "RightHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(Column#13,Column#1)}(Column#25,Column#13)->Projection", + "Best": "RightHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(Column#13,Column#1)}(Column#25,Column#13)->Projection", "Warning": "", "Hints": "USE_INDEX(@`sel_1` `test`.`t3` `f`), USE_INDEX(@`sel_1` `test`.`t1` ), USE_INDEX(@`sel_1` `test`.`t2` `f`), INL_JOIN(@`sel_1` `test`.`t1`), HASH_JOIN(@`sel_1` `test`.`t3`)" }, { "SQL": "select /*+ TIDB_INLJ(test.t1) */ t1.a, t2.a, t3.a from t t1, t t2, t t3 where t1.a = t2.a and t2.a = t3.a;", - "Best": "RightHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(Column#13,Column#1)}(Column#25,Column#13)->Projection", + "Best": "RightHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(Column#13,Column#1)}(Column#25,Column#13)->Projection", "Warning": "", "Hints": "USE_INDEX(@`sel_1` `test`.`t3` `f`), USE_INDEX(@`sel_1` `test`.`t1` ), USE_INDEX(@`sel_1` `test`.`t2` `f`), INL_JOIN(@`sel_1` `test`.`t1`), HASH_JOIN(@`sel_1` `test`.`t3`)" }, @@ -1196,12 +1196,12 @@ "Cases": [ { "SQL": "select /*+ SM_JOIN(@sel_1 t1), INL_JOIN(@sel_2 t3) */ t1.a, t1.b from t t1, (select t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Plan": "MergeInnerJoin{TableReader(Table(t))->IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection", + "Plan": "MergeInnerJoin{TableReader(Table(t))->IndexJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection", "Hints": "USE_INDEX(@`sel_1` `test`.`t1` ), USE_INDEX(@`sel_2` `test`.`t2` ), USE_INDEX(@`sel_2` `test`.`t3` `c_d_e`), INL_JOIN(@`sel_2` `test`.`t3`), SM_JOIN(@`sel_1` `test`.`t1`)" }, { "SQL": "select /*+ SM_JOIN(@sel_1 t1), INL_JOIN(@qb t3) */ t1.a, t1.b from t t1, (select /*+ QB_NAME(qb) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Plan": "MergeInnerJoin{TableReader(Table(t))->IndexMergeJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection", + "Plan": "MergeInnerJoin{TableReader(Table(t))->IndexJoin{TableReader(Table(t))->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#1,Column#13)->Projection", "Hints": "USE_INDEX(@`sel_1` `test`.`t1` ), USE_INDEX(@`sel_2` `test`.`t2` ), USE_INDEX(@`sel_2` `test`.`t3` `c_d_e`), INL_JOIN(@`sel_2` `test`.`t3`), SM_JOIN(@`sel_1` `test`.`t1`)" }, { @@ -1216,12 +1216,12 @@ }, { "SQL": "select /*+ INL_JOIN(@sel_1 t1), HASH_JOIN(@sel_2 t2) */ t1.a, t1.b from t t1, (select t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Plan": "IndexMergeJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection", + "Plan": "IndexJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection", "Hints": "USE_INDEX(@`sel_1` `test`.`t1` ), USE_INDEX(@`sel_2` `test`.`t2` `f`), USE_INDEX(@`sel_2` `test`.`t3` `c_d_e`), HASH_JOIN(@`sel_2` `test`.`t2`), INL_JOIN(@`sel_1` `test`.`t1`)" }, { "SQL": "select /*+ INL_JOIN(@sel_1 t1), HASH_JOIN(@qb t2) */ t1.a, t1.b from t t1, (select /*+ QB_NAME(qb) */ t2.a from t t2, t t3 where t2.a = t3.c) s where t1.a=s.a", - "Plan": "IndexMergeJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection", + "Plan": "IndexJoin{TableReader(Table(t))->LeftHashJoin{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.c_d_e)[[NULL,+inf]])}(Column#13,Column#27)}(Column#13,Column#1)->Projection", "Hints": "USE_INDEX(@`sel_1` `test`.`t1` ), USE_INDEX(@`sel_2` `test`.`t2` `f`), USE_INDEX(@`sel_2` `test`.`t3` `c_d_e`), HASH_JOIN(@`sel_2` `test`.`t2`), INL_JOIN(@`sel_1` `test`.`t1`)" }, { From a947e9bfcfdc9e185ec44ede0769582340f80053 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Fri, 8 Nov 2019 16:40:00 +0800 Subject: [PATCH 07/14] fix ci --- executor/join_test.go | 10 +++++----- planner/core/logical_plan_builder.go | 12 ++++++------ planner/core/logical_plans.go | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/executor/join_test.go b/executor/join_test.go index bf187e837d323..426d0744abd3c 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -205,9 +205,9 @@ func (s *testSuiteJoin2) TestJoin(c *C) { tk.MustExec("create table t1(a int, b int)") tk.MustExec("insert into t values(1, 3), (2, 2), (3, 1)") tk.MustExec("insert into t1 values(0, 0), (1, 2), (1, 3), (3, 4)") - tk.MustQuery("select /*+ TIDB_INLJ(t1) */ * from t join t1 on t.a=t1.a order by t.b").Check(testkit.Rows("3 1 3 4", "1 3 1 2", "1 3 1 3")) + tk.MustQuery("select /*+ TIDB_INLJ(t1) */ * from t join t1 on t.a=t1.a order by t.b").Sort().Check(testkit.Rows("1 3 1 2", "1 3 1 3", "3 1 3 4")) tk.MustQuery("select /*+ TIDB_INLJ(t) */ t.a, t.b from t join t1 on t.a=t1.a where t1.b = 4 limit 1").Check(testkit.Rows("3 1")) - tk.MustQuery("select /*+ TIDB_INLJ(t, t1) */ * from t right join t1 on t.a=t1.a order by t.b").Check(testkit.Rows(" 0 0", "3 1 3 4", "1 3 1 2", "1 3 1 3")) + tk.MustQuery("select /*+ TIDB_INLJ(t, t1) */ * from t right join t1 on t.a=t1.a order by t.b").Sort().Check(testkit.Rows("1 3 1 2", "1 3 1 3", "3 1 3 4", " 0 0")) // join reorder will disorganize the resulting schema tk.MustExec("drop table if exists t, t1") @@ -1020,16 +1020,16 @@ func (s *testSuiteJoin1) TestIndexLookupJoin(c *C) { tk.MustExec("insert into t1 values(1, 0), (2, null)") tk.MustExec("create table t2(a int primary key)") tk.MustExec("insert into t2 values(0)") - tk.MustQuery("select /*+ TIDB_INLJ(t2)*/ * from t1 left join t2 on t1.b = t2.a;").Check(testkit.Rows( - `2 `, + tk.MustQuery("select /*+ TIDB_INLJ(t2)*/ * from t1 left join t2 on t1.b = t2.a;").Sort().Check(testkit.Rows( `1 0 0`, + `2 `, )) tk.MustExec("create table t3(a int, key(a))") tk.MustExec("insert into t3 values(0)") tk.MustQuery("select /*+ TIDB_INLJ(t3)*/ * from t1 left join t3 on t1.b = t3.a;").Check(testkit.Rows( - `2 `, `1 0 0`, + `2 `, )) } diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 6c7b9a8517c4b..17c4d5b3f1d73 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -399,12 +399,12 @@ func (p *LogicalJoin) setPreferredJoinType(hintInfo *tableHintInfo) { p.hintInfo = hintInfo } - // If there're multiple join types and one of them is not index join hint, - // then there is a conflict of join types. - containIndexJoin := (p.preferJoinType^preferRightAsINLJInner^preferLeftAsINLJInner) > 0 || - (p.preferJoinType^preferRightAsINLHJInner^preferLeftAsINLHJInner) > 0 || - (p.preferJoinType^preferRightAsINLMJInner^preferLeftAsINLMJInner) > 0 - if bits.OnesCount(p.preferJoinType) > 1 && !containIndexJoin { + // If there're multiple join types and at least one of them is not index + // join hint, then there must exist conflict of join types. + mask := preferRightAsINLJInner ^ preferLeftAsINLJInner ^ + preferRightAsINLHJInner ^ preferLeftAsINLHJInner ^ + preferRightAsINLMJInner ^ preferLeftAsINLMJInner + if onesCount := bits.OnesCount(p.preferJoinType & ^mask); onesCount > 1 || onesCount == 1 && p.preferJoinType&mask > 0 { errMsg := "Join hints are conflict, you can only specify one type of join" warning := ErrInternal.GenWithStack(errMsg) p.ctx.GetSessionVars().StmtCtx.AppendWarning(warning) diff --git a/planner/core/logical_plans.go b/planner/core/logical_plans.go index 10a1f9239415e..3a787d413b348 100644 --- a/planner/core/logical_plans.go +++ b/planner/core/logical_plans.go @@ -97,7 +97,7 @@ func (tp JoinType) String() string { } const ( - preferLeftAsINLJInner = 1 << iota + preferLeftAsINLJInner uint = 1 << iota preferRightAsINLJInner preferLeftAsINLHJInner preferRightAsINLHJInner From a027979573297f1119d39970bae37993315bc346 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Fri, 8 Nov 2019 16:46:51 +0800 Subject: [PATCH 08/14] fix ci --- go.mod | 6 ++---- go.sum | 36 ++++++++++++------------------------ 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/go.mod b/go.mod index cc678596a3c33..5639b5dd3009d 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,7 @@ require ( github.com/shirou/gopsutil v2.18.10+incompatible github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371 // indirect github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca // indirect - github.com/sirupsen/logrus v1.4.2 + github.com/sirupsen/logrus v1.2.0 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 github.com/struCoder/pidusage v0.1.2 github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 @@ -61,7 +61,7 @@ require ( go.uber.org/zap v1.12.0 golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf // indirect golang.org/x/net v0.0.0-20190909003024-a7b16738d86b - golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd + golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c golang.org/x/text v0.3.2 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect golang.org/x/tools v0.0.0-20191107010934-f79515f33823 @@ -76,5 +76,3 @@ require ( replace github.com/google/pprof => github.com/lonng/pprof v0.0.0-20191012154247-04dfd648ce8d go 1.13 - -replace github.com/pingcap/parser => github.com/pingcap/parser v0.0.0-20191107065854-0811e8d41a36 diff --git a/go.sum b/go.sum index 6f34d768d4546..9ad77bc312a27 100644 --- a/go.sum +++ b/go.sum @@ -5,7 +5,6 @@ github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f h1:5ZfJxyXo8KyX8 github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -16,7 +15,6 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20171208011716-f6d7a1f6fbf3/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= @@ -52,7 +50,6 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -118,7 +115,6 @@ github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf h1:Ut4tTtPNmInW github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf/go.mod h1:4AmD/VxjWcI5SRB0n6szE2A6s2fsNHDLO0nAlMHgfLQ= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -172,7 +168,6 @@ github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKw github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= -github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8 h1:USx2/E1bX46VG32FIw034Au6seQ2fY9NEILmNh/UlQg= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4 h1:iRtOAQ6FXkY/BGvst3CDfTva4nTqh6CL8WXvanLdbu0= github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= @@ -193,8 +188,8 @@ github.com/pingcap/kvproto v0.0.0-20191104103048-40f562012fb1/go.mod h1:WWLmULLO github.com/pingcap/log v0.0.0-20190715063458-479153f07ebd/go.mod h1:WpHUKhNZ18v116SvGrmjkA9CBhYmuUTKL+p8JC9ANEw= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww9rkZ1DnWfl0pXV3BOWlkYIjA= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= -github.com/pingcap/parser v0.0.0-20191107065854-0811e8d41a36 h1:9uobXXTqIGXFu7ys8ns8hRSgztKOA5rGKg+6xpapSkE= -github.com/pingcap/parser v0.0.0-20191107065854-0811e8d41a36/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= +github.com/pingcap/parser v0.0.0-20191107084102-68af6554dec7 h1:vjPDsANQmfb+RHVfQvqzb/xpzkQhFdICUEjtA8XvAYw= +github.com/pingcap/parser v0.0.0-20191107084102-68af6554dec7/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0 h1:GIEq+wZfrl2bcJxpuSrEH4H7/nlf5YdmpS+dU9lNIt8= github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0/go.mod h1:G/6rJpnYwM0LKMec2rI82/5Kg6GaZMvlfB+e6/tvYmI= github.com/pingcap/tidb-tools v3.0.6-0.20191106033616-90632dda3863+incompatible h1:H1jg0aDWz2SLRh3hNBo2HFtnuHtudIUvBumU7syRkic= @@ -212,7 +207,6 @@ github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -220,12 +214,13 @@ github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1/go.mod h1:daVV7q github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d h1:GoAlyOgbOEIFdaDqxJVlbOQ1DtGmZWs/Qau0hIlk+WQ= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/remyoudompheng/bigfft v0.0.0-20190512091148-babf20351dd7 h1:FUL3b97ZY2EPqg2NbXKuMHs5pXJB9hjj1fDHnF2vl28= github.com/remyoudompheng/bigfft v0.0.0-20190512091148-babf20351dd7/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.18.10+incompatible h1:cy84jW6EVRPa5g9HAHrlbxMSIjBhDSX0OFYyMYminYs= github.com/shirou/gopsutil v2.18.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -234,20 +229,18 @@ github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJ github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca h1:3fECS8atRjByijiI8yYiuwLwQ2ZxXobW7ua/8GRB3pI= github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -266,9 +259,7 @@ github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1 github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo= github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go v1.1.2 h1:JON3E2/GPW2iDNGoSAusl1KDf5TRQ8k8q7Tp097pZGs= github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= -github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43 h1:BasDe+IErOQKrMVXab7UayvSlIpiyGwRvuX3EKYY7UA= github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA= github.com/unrolled/render v0.0.0-20171102162132-65450fb6b2d3/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= github.com/unrolled/render v0.0.0-20180914162206-b9786414de4d h1:ggUgChAeyge4NZ4QUw6lhHsVymzwSDJOZcE0s2X8S20= @@ -298,11 +289,12 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.12.0 h1:dySoUQPFBGj6xwjmBzageVL8jGi8uxc6bEmJQjA06bw= go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20180608092829-8ac0e0d97ce4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 h1:PDpCLFAH/YIX0QpHPf2eO7L4rC2OOirBrKtXTLLiNTY= -golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf h1:fnPsqIDRbCSgumaMCRpoIoF2s4qxv0xSSS0BVZUE/ss= +golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -329,20 +321,17 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -<<<<<<< HEAD -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -======= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= ->>>>>>> b4fd8e7e8a285f1985de8bad85644a7985c4139b golang.org/x/sys v0.0.0-20190909082730-f460065e899a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd h1:3x5uuvBgE6oaXJjCOvpCC1IpgJogqQ+PqGGU3ZxAgII= -golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c h1:S/FtSvpNLtFBgjTqcKsRpsa6aVsI6iztaz1bQd9BJwE= +golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -357,7 +346,6 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191107010934-f79515f33823 h1:akkRBeitX2EZP59KdtKw310CI4WGPCNPyrLbE7WZA8Y= golang.org/x/tools v0.0.0-20191107010934-f79515f33823/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= From 203260522522070721f51ede19db1d600216e451 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Fri, 8 Nov 2019 16:58:13 +0800 Subject: [PATCH 09/14] fix ci --- cmd/explaintest/r/explain_complex.result | 17 +++---- .../r/explain_complex_stats.result | 17 +++---- cmd/explaintest/r/explain_easy.result | 14 +++--- cmd/explaintest/r/generated_columns.result | 22 ++++----- cmd/explaintest/r/index_join.result | 28 +++++------ cmd/explaintest/r/topn_push_down.result | 22 ++++----- cmd/explaintest/r/tpch.result | 46 ++++++++++--------- 7 files changed, 85 insertions(+), 81 deletions(-) diff --git a/cmd/explaintest/r/explain_complex.result b/cmd/explaintest/r/explain_complex.result index 25620de1c9f41..24a1afe01f864 100644 --- a/cmd/explaintest/r/explain_complex.result +++ b/cmd/explaintest/r/explain_complex.result @@ -152,14 +152,15 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id count task operator info Projection_10 0.00 root Column#1, Column#2, Column#4, Column#5, Column#3, Column#24, Column#25, Column#26, Column#11, Column#12, Column#13, Column#14, Column#15, Column#16, Column#17 └─Limit_13 0.00 root offset:0, count:2000 - └─IndexJoin_19 0.00 root inner join, inner:IndexLookUp_18, outer key:Column#2, Column#5, inner key:Column#21, Column#23 - ├─TableReader_43 0.00 root data:Selection_42 - │ └─Selection_42 0.00 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592), not(isnull(Column#5)) - │ └─TableScan_41 10000.00 cop[tikv] table:dt, range:[0,+inf], keep order:false, stats:pseudo - └─IndexLookUp_18 0.00 root - ├─IndexScan_15 1.25 cop[tikv] table:rr, index:aid, dic, range: decided by [eq(Column#21, Column#2) eq(Column#23, Column#5)], keep order:false, stats:pseudo - └─Selection_17 0.00 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) - └─TableScan_16 1.25 cop[tikv] table:rr, keep order:false, stats:pseudo + └─IndexMergeJoin_41 0.00 root inner join, inner:IndexLookUp_39, outer key:Column#21, Column#23, inner key:Column#2, Column#5 + ├─IndexLookUp_39 0.00 root + │ ├─Selection_37 0.00 cop[tikv] not(isnull(Column#5)) + │ │ └─IndexScan_35 0.00 cop[tikv] table:dt, index:aid, dic, range: decided by [eq(Column#2, Column#21) eq(Column#5, Column#23)], keep order:true, stats:pseudo + │ └─Selection_38 0.00 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592) + │ └─TableScan_36 0.00 cop[tikv] table:dt, keep order:false, stats:pseudo + └─TableReader_61 3.33 root data:Selection_60 + └─Selection_60 3.33 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) + └─TableScan_59 10000.00 cop[tikv] table:rr, range:[-inf,+inf], keep order:false, stats:pseudo explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id count task operator info Projection_5 1.00 root Column#14, Column#16, Column#22, Column#23, Column#24 diff --git a/cmd/explaintest/r/explain_complex_stats.result b/cmd/explaintest/r/explain_complex_stats.result index 6b996c44cd352..03c23edabde67 100644 --- a/cmd/explaintest/r/explain_complex_stats.result +++ b/cmd/explaintest/r/explain_complex_stats.result @@ -160,14 +160,15 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id count task operator info Projection_10 428.32 root Column#1, Column#2, Column#4, Column#5, Column#3, Column#24, Column#25, Column#26, Column#11, Column#12, Column#13, Column#14, Column#15, Column#16, Column#17 └─Limit_13 428.32 root offset:0, count:2000 - └─IndexJoin_19 428.32 root inner join, inner:IndexLookUp_18, outer key:Column#2, Column#5, inner key:Column#21, Column#23 - ├─TableReader_43 428.32 root data:Selection_42 - │ └─Selection_42 428.32 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592), not(isnull(Column#5)) - │ └─TableScan_41 2000.00 cop[tikv] table:dt, range:[0,+inf], keep order:false - └─IndexLookUp_18 0.48 root - ├─IndexScan_15 1.00 cop[tikv] table:rr, index:aid, dic, range: decided by [eq(Column#21, Column#2) eq(Column#23, Column#5)], keep order:false - └─Selection_17 0.48 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) - └─TableScan_16 1.00 cop[tikv] table:rr, keep order:false + └─IndexMergeJoin_41 428.32 root inner join, inner:IndexLookUp_39, outer key:Column#21, Column#23, inner key:Column#2, Column#5 + ├─IndexLookUp_39 0.09 root + │ ├─Selection_37 0.44 cop[tikv] not(isnull(Column#5)) + │ │ └─IndexScan_35 0.44 cop[tikv] table:dt, index:aid, dic, range: decided by [eq(Column#2, Column#21) eq(Column#5, Column#23)], keep order:true + │ └─Selection_38 0.09 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592) + │ └─TableScan_36 0.44 cop[tikv] table:dt, keep order:false + └─TableReader_61 970.00 root data:Selection_60 + └─Selection_60 970.00 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) + └─TableScan_59 2000.00 cop[tikv] table:rr, range:[-inf,+inf], keep order:false explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id count task operator info Projection_5 207.86 root Column#14, Column#16, Column#22, Column#23, Column#24 diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index fc51f00db8e26..f627f05b0c17b 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -350,13 +350,13 @@ Projection_11 5.00 root Column#12 ├─TableReader_15 5.00 root data:TableScan_14 │ └─TableScan_14 5.00 cop[tikv] table:t, range:[-inf,+inf], keep order:false └─StreamAgg_20 1.00 root funcs:count(1) - └─MergeJoin_51 2.40 root inner join, left key:Column#4, right key:Column#7 - ├─IndexReader_38 2.40 root index:Selection_37 - │ └─Selection_37 2.40 cop[tikv] eq(3, Column#1) - │ └─IndexScan_36 3.00 cop[tikv] table:s, index:b, range:[3,3], keep order:true - └─TableReader_41 4.00 root data:Selection_40 - └─Selection_40 4.00 cop[tikv] eq(3, Column#1) - └─TableScan_39 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:true + └─MergeJoin_62 2.40 root inner join, left key:Column#4, right key:Column#7 + ├─IndexReader_49 2.40 root index:Selection_48 + │ └─Selection_48 2.40 cop[tikv] eq(3, Column#1) + │ └─IndexScan_47 3.00 cop[tikv] table:s, index:b, range:[3,3], keep order:true + └─TableReader_52 4.00 root data:Selection_51 + └─Selection_51 4.00 cop[tikv] eq(3, Column#1) + └─TableScan_50 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:true explain select t.c in (select count(*) from t s left join t t1 on s.a = t1.a where 3 = t.a and s.b = 3) from t; id count task operator info Projection_10 5.00 root Column#12 diff --git a/cmd/explaintest/r/generated_columns.result b/cmd/explaintest/r/generated_columns.result index 433faf1f12906..7880ca8e9bd99 100644 --- a/cmd/explaintest/r/generated_columns.result +++ b/cmd/explaintest/r/generated_columns.result @@ -71,24 +71,24 @@ VALUES ('{"a": 1}', '{"1": "1"}'); ANALYZE TABLE sgc1, sgc2; EXPLAIN SELECT /*+ TIDB_INLJ(sgc1, sgc2) */ * from sgc1 join sgc2 on sgc1.a=sgc2.a; id count task operator info -IndexHashJoin_35 5.00 root inner join, inner:IndexLookUp_25, outer key:Column#8, inner key:Column#3 +IndexJoin_26 5.00 root inner join, inner:IndexLookUp_25, outer key:Column#8, inner key:Column#3 ├─IndexLookUp_25 5.00 root │ ├─Selection_24 5.00 cop[tikv] not(isnull(Column#3)) │ │ └─IndexScan_22 5.00 cop[tikv] table:sgc1, index:a, range: decided by [eq(Column#3, Column#8)], keep order:false │ └─TableScan_23 5.00 cop[tikv] table:sgc1, keep order:false -└─TableReader_38 1.00 root data:Selection_37 - └─Selection_37 1.00 cop[tikv] not(isnull(Column#8)) - └─TableScan_36 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false +└─TableReader_47 1.00 root data:Selection_46 + └─Selection_46 1.00 cop[tikv] not(isnull(Column#8)) + └─TableScan_45 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false EXPLAIN SELECT * from sgc1 join sgc2 on sgc1.a=sgc2.a; id count task operator info Projection_6 5.00 root Column#1, Column#2, Column#3, Column#4, Column#6, Column#7, Column#8, Column#9 -└─HashRightJoin_24 5.00 root inner join, inner:TableReader_43, equal:[eq(Column#8, Column#3)] - ├─TableReader_43 1.00 root data:Selection_42 - │ └─Selection_42 1.00 cop[tikv] not(isnull(Column#8)) - │ └─TableScan_41 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false - └─TableReader_52 5.00 root data:Selection_51 - └─Selection_51 5.00 cop[tikv] not(isnull(Column#3)) - └─TableScan_50 5.00 cop[tikv] table:sgc1, range:[-inf,+inf], keep order:false +└─HashRightJoin_38 5.00 root inner join, inner:TableReader_57, equal:[eq(Column#8, Column#3)] + ├─TableReader_57 1.00 root data:Selection_56 + │ └─Selection_56 1.00 cop[tikv] not(isnull(Column#8)) + │ └─TableScan_55 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false + └─TableReader_66 5.00 root data:Selection_65 + └─Selection_65 5.00 cop[tikv] not(isnull(Column#3)) + └─TableScan_64 5.00 cop[tikv] table:sgc1, range:[-inf,+inf], keep order:false DROP TABLE IF EXISTS sgc3; CREATE TABLE sgc3 ( j JSON, diff --git a/cmd/explaintest/r/index_join.result b/cmd/explaintest/r/index_join.result index 6cafbfe8b3dd6..b1d55ebdd3f0f 100644 --- a/cmd/explaintest/r/index_join.result +++ b/cmd/explaintest/r/index_join.result @@ -8,35 +8,35 @@ set session tidb_hashagg_partial_concurrency = 1; set session tidb_hashagg_final_concurrency = 1; explain select /*+ TIDB_INLJ(t1, t2) */ * from t1 join t2 on t1.a=t2.a; id count task operator info -IndexHashJoin_34 5.00 root inner join, inner:IndexLookUp_24, outer key:Column#4, inner key:Column#1 +IndexJoin_25 5.00 root inner join, inner:IndexLookUp_24, outer key:Column#4, inner key:Column#1 ├─IndexLookUp_24 5.00 root │ ├─Selection_23 5.00 cop[tikv] not(isnull(Column#1)) │ │ └─IndexScan_21 5.00 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:false │ └─TableScan_22 5.00 cop[tikv] table:t1, keep order:false -└─TableReader_37 1.00 root data:Selection_36 - └─Selection_36 1.00 cop[tikv] not(isnull(Column#4)) - └─TableScan_35 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false +└─TableReader_43 1.00 root data:Selection_42 + └─Selection_42 1.00 cop[tikv] not(isnull(Column#4)) + └─TableScan_41 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false explain select * from t1 join t2 on t1.a=t2.a; id count task operator info Projection_6 5.00 root Column#1, Column#2, Column#4, Column#5 -└─HashRightJoin_23 5.00 root inner join, inner:TableReader_34, equal:[eq(Column#4, Column#1)] - ├─TableReader_34 1.00 root data:Selection_33 - │ └─Selection_33 1.00 cop[tikv] not(isnull(Column#4)) - │ └─TableScan_32 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false - └─TableReader_40 5.00 root data:Selection_39 - └─Selection_39 5.00 cop[tikv] not(isnull(Column#1)) - └─TableScan_38 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:false +└─HashRightJoin_37 5.00 root inner join, inner:TableReader_48, equal:[eq(Column#4, Column#1)] + ├─TableReader_48 1.00 root data:Selection_47 + │ └─Selection_47 1.00 cop[tikv] not(isnull(Column#4)) + │ └─TableScan_46 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false + └─TableReader_54 5.00 root data:Selection_53 + └─Selection_53 5.00 cop[tikv] not(isnull(Column#1)) + └─TableScan_52 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:false drop table if exists t1, t2; create table t1(a int not null, b int not null); create table t2(a int not null, b int not null, key a(a)); set @@tidb_opt_insubq_to_join_and_agg=0; explain select /*+ TIDB_INLJ(t2@sel_2) */ * from t1 where t1.a in (select t2.a from t2); id count task operator info -IndexMergeJoin_14 8000.00 root semi join, inner:IndexReader_12, outer key:Column#1, inner key:Column#4 +IndexJoin_10 8000.00 root semi join, inner:IndexReader_9, outer key:Column#1, inner key:Column#4 ├─TableReader_18 10000.00 root data:TableScan_17 │ └─TableScan_17 10000.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:false, stats:pseudo -└─IndexReader_12 1.25 root index:IndexScan_11 - └─IndexScan_11 1.25 cop[tikv] table:t2, index:a, range: decided by [eq(Column#4, Column#1)], keep order:true, stats:pseudo +└─IndexReader_9 1.25 root index:IndexScan_8 + └─IndexScan_8 1.25 cop[tikv] table:t2, index:a, range: decided by [eq(Column#4, Column#1)], keep order:false, stats:pseudo show warnings; Level Code Message set @@tidb_opt_insubq_to_join_and_agg=1; diff --git a/cmd/explaintest/r/topn_push_down.result b/cmd/explaintest/r/topn_push_down.result index 97077eaffebf1..acbfe8fbaf116 100644 --- a/cmd/explaintest/r/topn_push_down.result +++ b/cmd/explaintest/r/topn_push_down.result @@ -170,11 +170,11 @@ id count task operator info Projection_12 0.00 root Column#47 └─TopN_15 0.00 root Column#47:asc, offset:0, count:5 └─IndexJoin_24 0.00 root inner join, inner:IndexLookUp_23, outer key:Column#1, inner key:Column#41 - ├─IndexLookUp_67 0.00 root - │ ├─Selection_65 0.00 cop[tikv] eq(Column#4, 18), eq(Column#5, 1) - │ │ └─IndexScan_63 10.00 cop[tikv] table:tr, index:shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date, range:[810094178,810094178], keep order:false, stats:pseudo - │ └─Selection_66 0.00 cop[tikv] eq(Column#21, 32314), eq(Column#3, 2) - │ └─TableScan_64 0.00 cop[tikv] table:tr, keep order:false, stats:pseudo + ├─IndexLookUp_78 0.00 root + │ ├─Selection_76 0.00 cop[tikv] eq(Column#4, 18), eq(Column#5, 1) + │ │ └─IndexScan_74 10.00 cop[tikv] table:tr, index:shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date, range:[810094178,810094178], keep order:false, stats:pseudo + │ └─Selection_77 0.00 cop[tikv] eq(Column#21, 32314), eq(Column#3, 2) + │ └─TableScan_75 0.00 cop[tikv] table:tr, keep order:false, stats:pseudo └─IndexLookUp_23 0.03 root ├─IndexScan_20 1.25 cop[tikv] table:te, index:trade_id, range: decided by [eq(Column#41, Column#1)], keep order:false, stats:pseudo └─Selection_22 0.03 cop[tikv] ge(Column#47, 2018-04-23 00:00:00.000000), le(Column#47, 2018-04-23 23:59:59.000000) @@ -217,20 +217,20 @@ create table t(a int not null, index idx(a)); explain select /*+ TIDB_INLJ(t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; id count task operator info Limit_11 5.00 root offset:0, count:5 -└─IndexMergeJoin_19 5.00 root inner join, inner:IndexReader_17, outer key:Column#1, inner key:Column#3 +└─IndexJoin_15 5.00 root inner join, inner:IndexReader_14, outer key:Column#1, inner key:Column#3 ├─TableReader_23 4.00 root data:TableScan_22 │ └─TableScan_22 4.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:false, stats:pseudo - └─IndexReader_17 1.25 root index:IndexScan_16 - └─IndexScan_16 1.25 cop[tikv] table:t2, index:a, range: decided by [eq(Column#3, Column#1)], keep order:true, stats:pseudo + └─IndexReader_14 1.25 root index:IndexScan_13 + └─IndexScan_13 1.25 cop[tikv] table:t2, index:a, range: decided by [eq(Column#3, Column#1)], keep order:false, stats:pseudo explain select /*+ TIDB_INLJ(t2) */ * from t t1 left join t t2 on t1.a = t2.a where t2.a is null limit 5; id count task operator info Limit_12 5.00 root offset:0, count:5 └─Selection_13 5.00 root isnull(Column#3) - └─IndexMergeJoin_21 5.00 root left outer join, inner:IndexReader_19, outer key:Column#1, inner key:Column#3 + └─IndexJoin_17 5.00 root left outer join, inner:IndexReader_16, outer key:Column#1, inner key:Column#3 ├─TableReader_25 4.00 root data:TableScan_24 │ └─TableScan_24 4.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:false, stats:pseudo - └─IndexReader_19 1.25 root index:IndexScan_18 - └─IndexScan_18 1.25 cop[tikv] table:t2, index:a, range: decided by [eq(Column#3, Column#1)], keep order:true, stats:pseudo + └─IndexReader_16 1.25 root index:IndexScan_15 + └─IndexScan_15 1.25 cop[tikv] table:t2, index:a, range: decided by [eq(Column#3, Column#1)], keep order:false, stats:pseudo explain select /*+ TIDB_SMJ(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a limit 5; id count task operator info Limit_11 5.00 root offset:0, count:5 diff --git a/cmd/explaintest/r/tpch.result b/cmd/explaintest/r/tpch.result index 78e24e1c5993e..c84b36a932aa1 100644 --- a/cmd/explaintest/r/tpch.result +++ b/cmd/explaintest/r/tpch.result @@ -769,14 +769,16 @@ l_shipmode; id count task operator info Sort_9 1.00 root Column#29:asc └─Projection_11 1.00 root Column#24, Column#27, Column#28 - └─HashAgg_14 1.00 root group by:Column#38, funcs:sum(Column#35), sum(Column#36), firstrow(Column#37) - └─Projection_40 10023369.01 root cast(case(or(eq(Column#6, "1-URGENT"), eq(Column#6, "2-HIGH")), 1, 0)), cast(case(and(ne(Column#6, "1-URGENT"), ne(Column#6, "2-HIGH")), 1, 0)), Column#24, Column#24 - └─IndexMergeJoin_22 10023369.01 root inner join, inner:TableReader_20, outer key:Column#10, inner key:Column#1 - ├─TableReader_36 10023369.01 root data:Selection_35 - │ └─Selection_35 10023369.01 cop[tikv] ge(Column#22, 1997-01-01 00:00:00.000000), in(Column#24, "RAIL", "FOB"), lt(Column#20, Column#21), lt(Column#21, Column#22), lt(Column#22, 1998-01-01) - │ └─TableScan_34 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false - └─TableReader_20 1.00 root data:TableScan_19 - └─TableScan_19 1.00 cop[tikv] table:orders, range: decided by [Column#10], keep order:true + └─HashAgg_14 1.00 root group by:Column#43, funcs:sum(Column#40), sum(Column#41), firstrow(Column#42) + └─Projection_54 10023369.01 root cast(case(or(eq(Column#6, "1-URGENT"), eq(Column#6, "2-HIGH")), 1, 0)), cast(case(and(ne(Column#6, "1-URGENT"), ne(Column#6, "2-HIGH")), 1, 0)), Column#24, Column#24 + └─IndexMergeJoin_36 10023369.01 root inner join, inner:Projection_34, outer key:Column#1, inner key:Column#10 + ├─Projection_34 0.00 root Column#10, Column#20, Column#21, Column#22, Column#24 + │ └─IndexLookUp_33 0.00 root + │ ├─IndexScan_30 0.13 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#10, Column#1)], keep order:true + │ └─Selection_32 0.00 cop[tikv] ge(Column#22, 1997-01-01 00:00:00.000000), in(Column#24, "RAIL", "FOB"), lt(Column#20, Column#21), lt(Column#21, Column#22), lt(Column#22, 1998-01-01) + │ └─TableScan_31 0.13 cop[tikv] table:lineitem, keep order:false + └─TableReader_52 75000000.00 root data:TableScan_51 + └─TableScan_51 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false /* Q13 Customer Distribution Query This query seeks relationships between customers and the size of their orders. @@ -931,16 +933,16 @@ id count task operator info Sort_13 3863988.24 root Column#28:desc, Column#25:asc, Column#26:asc, Column#27:asc └─Projection_15 3863988.24 root Column#10, Column#11, Column#12, Column#24 └─HashAgg_18 3863988.24 root group by:Column#10, Column#11, Column#12, funcs:count(distinct Column#2), firstrow(Column#10), firstrow(Column#11), firstrow(Column#12) - └─HashLeftJoin_30 3863988.24 root anti semi join, inner:TableReader_57, equal:[eq(Column#2, Column#16)] + └─HashLeftJoin_30 3863988.24 root anti semi join, inner:TableReader_68, equal:[eq(Column#2, Column#16)] ├─IndexMergeJoin_38 4829985.30 root inner join, inner:IndexReader_36, outer key:Column#7, inner key:Column#1 - │ ├─TableReader_50 1200618.43 root data:Selection_49 - │ │ └─Selection_49 1200618.43 cop[tikv] in(Column#12, 48, 19, 12, 4, 41, 7, 21, 39), ne(Column#10, "Brand#34"), not(like(Column#11, "LARGE BRUSHED%", 92)) - │ │ └─TableScan_48 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false + │ ├─TableReader_61 1200618.43 root data:Selection_60 + │ │ └─Selection_60 1200618.43 cop[tikv] in(Column#12, 48, 19, 12, 4, 41, 7, 21, 39), ne(Column#10, "Brand#34"), not(like(Column#11, "LARGE BRUSHED%", 92)) + │ │ └─TableScan_59 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─IndexReader_36 4.02 root index:IndexScan_35 │ └─IndexScan_35 4.02 cop[tikv] table:partsupp, index:PS_PARTKEY, PS_SUPPKEY, range: decided by [eq(Column#1, Column#7)], keep order:true - └─TableReader_57 400000.00 root data:Selection_56 - └─Selection_56 400000.00 cop[tikv] like(Column#22, "%Customer%Complaints%", 92) - └─TableScan_55 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false + └─TableReader_68 400000.00 root data:Selection_67 + └─Selection_67 400000.00 cop[tikv] like(Column#22, "%Customer%Complaints%", 92) + └─TableScan_66 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false /* Q17 Small-Quantity-Order Revenue Query This query determines how much average yearly revenue would be lost if orders were no longer filled for small @@ -1159,17 +1161,17 @@ Sort_28 20000.00 root Column#48:asc └─Projection_54 64006.34 root Column#12, Column#13, Column#14, Column#18, mul(0.5, Column#45) └─Selection_55 64006.34 root gt(cast(Column#14), mul(0.5, Column#45)) └─HashAgg_58 80007.93 root group by:Column#12, Column#13, funcs:firstrow(Column#12), firstrow(Column#13), firstrow(Column#14), firstrow(Column#18), sum(Column#32) - └─HashLeftJoin_61 9711455.06 root left outer join, inner:TableReader_91, equal:[eq(Column#12, Column#29) eq(Column#13, Column#30)] + └─HashLeftJoin_61 9711455.06 root left outer join, inner:TableReader_102, equal:[eq(Column#12, Column#29) eq(Column#13, Column#30)] ├─IndexHashJoin_74 321865.05 root inner join, inner:IndexLookUp_65, outer key:Column#18, inner key:Column#12 - │ ├─TableReader_86 80007.93 root data:Selection_85 - │ │ └─Selection_85 80007.93 cop[tikv] like(Column#19, "green%", 92) - │ │ └─TableScan_84 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false + │ ├─TableReader_97 80007.93 root data:Selection_96 + │ │ └─Selection_96 80007.93 cop[tikv] like(Column#19, "green%", 92) + │ │ └─TableScan_95 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─IndexLookUp_65 4.02 root │ ├─IndexScan_63 4.02 cop[tikv] table:partsupp, index:PS_PARTKEY, PS_SUPPKEY, range: decided by [eq(Column#12, Column#18)], keep order:false │ └─TableScan_64 4.02 cop[tikv] table:partsupp, keep order:false - └─TableReader_91 44189356.65 root data:Selection_90 - └─Selection_90 44189356.65 cop[tikv] ge(Column#38, 1993-01-01 00:00:00.000000), lt(Column#38, 1994-01-01) - └─TableScan_89 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false + └─TableReader_102 44189356.65 root data:Selection_101 + └─Selection_101 44189356.65 cop[tikv] ge(Column#38, 1993-01-01 00:00:00.000000), lt(Column#38, 1994-01-01) + └─TableScan_100 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q21 Suppliers Who Kept Orders Waiting Query This query identifies certain suppliers who were not able to ship required parts in a timely manner. From 918098d9bf4ad762feef296f83f96dee9cda7fc0 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Tue, 12 Nov 2019 10:28:54 +0800 Subject: [PATCH 10/14] address comment --- executor/index_lookup_join_test.go | 35 ------------------- planner/core/physical_plan_test.go | 41 +++++++++++++++++++++++ planner/core/testdata/plan_suite_in.json | 8 +++++ planner/core/testdata/plan_suite_out.json | 17 ++++++++++ 4 files changed, 66 insertions(+), 35 deletions(-) diff --git a/executor/index_lookup_join_test.go b/executor/index_lookup_join_test.go index 9693ab441d414..2a28a6fe90bf9 100644 --- a/executor/index_lookup_join_test.go +++ b/executor/index_lookup_join_test.go @@ -79,41 +79,6 @@ func (s *testSuite1) TestBatchIndexJoinUnionScan(c *C) { tk.MustExec("rollback") } -func (s *testSuite1) TestIndexJoinHint(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec(`drop table if exists t1, t2;`) - tk.MustExec(`create table t1(a bigint, b bigint, index idx_a(a), index idx_b(b));`) - tk.MustExec(`create table t2(a bigint, b bigint, index idx_a(a), index idx_b(b));`) - tk.MustQuery("explain select /*+ INL_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;").Check(testkit.Rows( - "IndexJoin_25 12487.50 root inner join, inner:IndexLookUp_24, outer key:Column#4, inner key:Column#1", - "├─IndexLookUp_24 1.25 root ", - "│ ├─Selection_23 1.25 cop[tikv] not(isnull(Column#1))", - "│ │ └─IndexScan_21 1.25 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:false, stats:pseudo", - "│ └─TableScan_22 1.25 cop[tikv] table:t1, keep order:false, stats:pseudo", - "└─TableReader_37 9990.00 root data:Selection_36", - " └─Selection_36 9990.00 cop[tikv] not(isnull(Column#4))", - " └─TableScan_35 10000.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false, stats:pseudo")) - tk.MustQuery("explain select /*+ INL_HASH_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;").Check(testkit.Rows( - "IndexHashJoin_34 12487.50 root inner join, inner:IndexLookUp_24, outer key:Column#4, inner key:Column#1", - "├─IndexLookUp_24 1.25 root ", - "│ ├─Selection_23 1.25 cop[tikv] not(isnull(Column#1))", - "│ │ └─IndexScan_21 1.25 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:false, stats:pseudo", - "│ └─TableScan_22 1.25 cop[tikv] table:t1, keep order:false, stats:pseudo", - "└─TableReader_37 9990.00 root data:Selection_36", - " └─Selection_36 9990.00 cop[tikv] not(isnull(Column#4))", - " └─TableScan_35 10000.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false, stats:pseudo")) - tk.MustQuery("explain select /*+ INL_MERGE_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;").Check(testkit.Rows( - "IndexMergeJoin_32 12487.50 root inner join, inner:Projection_30, outer key:Column#4, inner key:Column#1", - "├─Projection_30 1.25 root Column#1, Column#2", - "│ └─IndexLookUp_29 1.25 root ", - "│ ├─Selection_28 1.25 cop[tikv] not(isnull(Column#1))", - "│ │ └─IndexScan_26 1.25 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:true, stats:pseudo", - "│ └─TableScan_27 1.25 cop[tikv] table:t1, keep order:false, stats:pseudo", - "└─TableReader_37 9990.00 root data:Selection_36", - " └─Selection_36 9990.00 cop[tikv] not(isnull(Column#4))", - " └─TableScan_35 10000.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false, stats:pseudo")) -} - func (s *testSuite1) TestInapplicableIndexJoinHint(c *C) { tk := testkit.NewTestKitWithInit(c, s.store) tk.MustExec(`drop table if exists t1, t2;`) diff --git a/planner/core/physical_plan_test.go b/planner/core/physical_plan_test.go index acc4f0bd1c8a1..9ebd2bf29e6ba 100644 --- a/planner/core/physical_plan_test.go +++ b/planner/core/physical_plan_test.go @@ -20,6 +20,7 @@ import ( "github.com/pingcap/parser" "github.com/pingcap/parser/model" "github.com/pingcap/parser/terror" + "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/planner" @@ -1072,3 +1073,43 @@ func testDAGPlanBuilderSplitAvg(c *C, root core.PhysicalPlan) { testDAGPlanBuilderSplitAvg(c, son) } } + +func (s *testPlanSuite) TestIndexJoinHint(c *C) { + defer testleak.AfterTest(c)() + store, dom, err := newStoreWithBootstrap() + c.Assert(err, IsNil) + defer func() { + dom.Close() + store.Close() + }() + se, err := session.CreateSession4Test(store) + c.Assert(err, IsNil) + ctx := context.Background() + _, err = se.Execute(ctx, "use test") + c.Assert(err, IsNil) + _, err = se.Execute(ctx, `drop table if exists test.t1, test.t2;`) + c.Assert(err, IsNil) + _, err = se.Execute(ctx, `create table test.t1(a bigint, b bigint, index idx_a(a), index idx_b(b));`) + c.Assert(err, IsNil) + _, err = se.Execute(ctx, `create table test.t2(a bigint, b bigint, index idx_a(a), index idx_b(b));`) + c.Assert(err, IsNil) + var input []string + var output []struct { + SQL string + Plan string + } + is := domain.GetDomain(se).InfoSchema() + s.testData.GetTestCases(c, &input, &output) + for i, tt := range input { + comment := Commentf("case:%v sql: %s", i, tt) + stmt, err := s.ParseOneStmt(tt, "", "") + c.Assert(err, IsNil, comment) + p, _, err := planner.Optimize(ctx, se, stmt, is) + c.Assert(err, IsNil, comment) + s.testData.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = core.ToString(p) + }) + c.Assert(core.ToString(p), Equals, output[i].Plan, comment) + } +} diff --git a/planner/core/testdata/plan_suite_in.json b/planner/core/testdata/plan_suite_in.json index 066c780e3e076..cda2837c9b2bb 100644 --- a/planner/core/testdata/plan_suite_in.json +++ b/planner/core/testdata/plan_suite_in.json @@ -487,5 +487,13 @@ "cases": [ "select t1.a, (select count(t2.a) from t t2 where t2.g in (select t3.d from t t3 where t3.c = t1.a)) as agg_col from t t1;" ] + }, + { + "name": "TestIndexJoinHint", + "cases": [ + "select /*+ INL_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", + "select /*+ INL_HASH_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", + "select /*+ INL_MERGE_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;" + ] } ] diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index c45b6859a88ef..2c7a46e119c7a 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -1271,5 +1271,22 @@ "Best": "Apply{IndexReader(Index(t.f)[[NULL,+inf]])->IndexMergeJoin{IndexReader(Index(t.c_d_e)[[NULL,+inf]]->HashAgg)->HashAgg->IndexReader(Index(t.g)[[NULL,+inf]])}(Column#29,Column#23)}->HashAgg" } ] + }, + { + "Name": "TestIndexJoinHint", + "Cases": [ + { + "SQL": "select /*+ INL_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", + "Plan": "IndexJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(Column#1))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(Column#4))]))}(Column#4,Column#1)" + }, + { + "SQL": "select /*+ INL_HASH_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", + "Plan": "IndexHashJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(Column#1))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(Column#4))]))}(Column#4,Column#1)" + }, + { + "SQL": "select /*+ INL_MERGE_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", + "Plan": "IndexMergeJoin{IndexLookUp(Index(t1.idx_a)[[NULL,+inf]]->Sel([not(isnull(Column#1))]), Table(t1))->Projection->TableReader(Table(t2)->Sel([not(isnull(Column#4))]))}(Column#4,Column#1)" + } + ] } ] From 33a738c747d3a34f7d8f3a0f7855f9f74453ca85 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Tue, 12 Nov 2019 10:53:41 +0800 Subject: [PATCH 11/14] fix conflicts --- cmd/explaintest/r/tpch.result | 376 ++++++++++++++++------------------ 1 file changed, 181 insertions(+), 195 deletions(-) diff --git a/cmd/explaintest/r/tpch.result b/cmd/explaintest/r/tpch.result index b16020ca5ed14..3bdaff79aff2c 100644 --- a/cmd/explaintest/r/tpch.result +++ b/cmd/explaintest/r/tpch.result @@ -119,12 +119,12 @@ order by l_returnflag, l_linestatus; id count task operator info -Sort_6 2.94 root Column#26:asc, Column#27:asc -└─Projection_8 2.94 root Column#9, Column#10, Column#18, Column#19, Column#20, Column#21, Column#22, Column#23, Column#24, Column#25 - └─HashAgg_14 2.94 root group by:Column#49, Column#50, funcs:sum(Column#36), sum(Column#37), sum(Column#38), sum(Column#39), avg(Column#40, Column#41), avg(Column#42, Column#43), avg(Column#44, Column#45), count(Column#46), firstrow(Column#49), firstrow(Column#50) - └─TableReader_15 2.94 root data:HashAgg_9 - └─HashAgg_9 2.94 cop[tikv] group by:Column#10, Column#9, funcs:sum(Column#5), sum(Column#6), sum(mul(Column#6, minus(1, Column#7))), sum(mul(mul(Column#6, minus(1, Column#7)), plus(1, Column#8))), count(Column#5), sum(Column#5), count(Column#6), sum(Column#6), count(Column#7), sum(Column#7), count(1) - └─Selection_13 293795345.00 cop[tikv] le(Column#11, 1998-08-15) +Sort_6 1.00 root Column#26:asc, Column#27:asc +└─Projection_8 1.00 root Column#9, Column#10, Column#18, Column#19, Column#20, Column#21, Column#22, Column#23, Column#24, Column#25 + └─HashAgg_14 1.00 root group by:Column#49, Column#50, funcs:sum(Column#36), sum(Column#37), sum(Column#38), sum(Column#39), avg(Column#40, Column#41), avg(Column#42, Column#43), avg(Column#44, Column#45), count(Column#46), firstrow(Column#49), firstrow(Column#50) + └─TableReader_15 1.00 root data:HashAgg_9 + └─HashAgg_9 1.00 cop[tikv] group by:Column#10, Column#9, funcs:sum(Column#5), sum(Column#6), sum(mul(Column#6, minus(1, Column#7))), sum(mul(mul(Column#6, minus(1, Column#7)), plus(1, Column#8))), count(Column#5), sum(Column#5), count(Column#6), sum(Column#6), count(Column#7), sum(Column#7), count(1) + └─Selection_13 99701931.19 cop[tikv] le(Column#11, 1998-08-15) └─TableScan_12 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q2 Minimum Cost Supplier Query @@ -184,13 +184,13 @@ limit 100; id count task operator info Projection_37 100.00 root Column#15, Column#11, Column#24, Column#1, Column#3, Column#12, Column#14, Column#16 └─TopN_40 100.00 root Column#15:desc, Column#24:asc, Column#11:asc, Column#1:asc, offset:0, count:100 - └─HashRightJoin_45 155496.00 root inner join, inner:IndexMergeJoin_55, equal:[eq(Column#1, Column#30) eq(Column#20, Column#50)] - ├─IndexMergeJoin_55 155496.00 root inner join, inner:TableReader_53, outer key:Column#17, inner key:Column#1 - │ ├─HashRightJoin_61 8155010.44 root inner join, inner:HashRightJoin_63, equal:[eq(Column#10, Column#18)] - │ │ ├─HashRightJoin_63 100000.00 root inner join, inner:HashRightJoin_76, equal:[eq(Column#23, Column#13)] - │ │ │ ├─HashRightJoin_76 5.00 root inner join, inner:TableReader_81, equal:[eq(Column#27, Column#25)] - │ │ │ │ ├─TableReader_81 1.00 root data:Selection_80 - │ │ │ │ │ └─Selection_80 1.00 cop[tikv] eq(Column#28, "ASIA") + └─HashRightJoin_45 8000.00 root inner join, inner:IndexMergeJoin_55, equal:[eq(Column#1, Column#30) eq(Column#20, Column#50)] + ├─IndexMergeJoin_55 8000.00 root inner join, inner:TableReader_53, outer key:Column#17, inner key:Column#1 + │ ├─HashRightJoin_61 40775.05 root inner join, inner:HashRightJoin_63, equal:[eq(Column#10, Column#18)] + │ │ ├─HashRightJoin_63 500.00 root inner join, inner:HashRightJoin_76, equal:[eq(Column#23, Column#13)] + │ │ │ ├─HashRightJoin_76 0.03 root inner join, inner:TableReader_81, equal:[eq(Column#27, Column#25)] + │ │ │ │ ├─TableReader_81 0.01 root data:Selection_80 + │ │ │ │ │ └─Selection_80 0.01 cop[tikv] eq(Column#28, "ASIA") │ │ │ │ │ └─TableScan_79 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false │ │ │ │ └─TableReader_78 25.00 root data:TableScan_77 │ │ │ │ └─TableScan_77 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false @@ -198,16 +198,16 @@ Projection_37 100.00 root Column#15, Column#11, Column#24, Column#1, Column#3, C │ │ │ └─TableScan_82 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false │ │ └─TableReader_85 40000000.00 root data:TableScan_84 │ │ └─TableScan_84 40000000.00 cop[tikv] table:partsupp, range:[-inf,+inf], keep order:false - │ └─TableReader_53 0.02 root data:Selection_52 - │ └─Selection_52 0.02 cop[tikv] eq(Column#6, 30), like(Column#5, "%STEEL", 92) - │ └─TableScan_51 0.02 cop[tikv] table:part, range: decided by [Column#17], keep order:true - └─Selection_89 6524008.35 root not(isnull(Column#50)) - └─HashAgg_92 8155010.44 root group by:Column#30, funcs:min(Column#33), firstrow(Column#30) - └─HashRightJoin_96 8155010.44 root inner join, inner:HashRightJoin_98, equal:[eq(Column#36, Column#31)] - ├─HashRightJoin_98 100000.00 root inner join, inner:HashRightJoin_111, equal:[eq(Column#43, Column#39)] - │ ├─HashRightJoin_111 5.00 root inner join, inner:TableReader_116, equal:[eq(Column#47, Column#45)] - │ │ ├─TableReader_116 1.00 root data:Selection_115 - │ │ │ └─Selection_115 1.00 cop[tikv] eq(Column#48, "ASIA") + │ └─TableReader_53 0.16 root data:Selection_52 + │ └─Selection_52 0.16 cop[tikv] eq(Column#6, 30), like(Column#5, "%STEEL", 92) + │ └─TableScan_51 0.20 cop[tikv] table:part, range: decided by [Column#17], keep order:true + └─Selection_89 32620.04 root not(isnull(Column#50)) + └─HashAgg_92 40775.05 root group by:Column#30, funcs:min(Column#33), firstrow(Column#30) + └─HashRightJoin_96 40775.05 root inner join, inner:HashRightJoin_98, equal:[eq(Column#36, Column#31)] + ├─HashRightJoin_98 500.00 root inner join, inner:HashRightJoin_111, equal:[eq(Column#43, Column#39)] + │ ├─HashRightJoin_111 0.03 root inner join, inner:TableReader_116, equal:[eq(Column#47, Column#45)] + │ │ ├─TableReader_116 0.01 root data:Selection_115 + │ │ │ └─Selection_115 0.01 cop[tikv] eq(Column#48, "ASIA") │ │ │ └─TableScan_114 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false │ │ └─TableReader_113 25.00 root data:TableScan_112 │ │ └─TableScan_112 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false @@ -251,19 +251,19 @@ limit 10; id count task operator info Projection_14 10.00 root Column#18, Column#35, Column#13, Column#16 └─TopN_17 10.00 root Column#35:desc, Column#13:asc, offset:0, count:10 - └─HashAgg_23 40252367.98 root group by:Column#52, Column#53, Column#54, funcs:sum(Column#48), firstrow(Column#49), firstrow(Column#50), firstrow(Column#51) - └─Projection_81 91515927.49 root mul(Column#23, minus(1, Column#24)), Column#13, Column#16, Column#18, Column#18, Column#13, Column#16 - └─IndexHashJoin_38 91515927.49 root inner join, inner:IndexLookUp_28, outer key:Column#9, inner key:Column#18 - ├─HashRightJoin_71 22592975.51 root inner join, inner:TableReader_77, equal:[eq(Column#1, Column#10)] - │ ├─TableReader_77 1498236.00 root data:Selection_76 - │ │ └─Selection_76 1498236.00 cop[tikv] eq(Column#7, "AUTOMOBILE") + └─HashAgg_23 458118.38 root group by:Column#52, Column#53, Column#54, funcs:sum(Column#48), firstrow(Column#49), firstrow(Column#50), firstrow(Column#51) + └─Projection_81 458118.38 root mul(Column#23, minus(1, Column#24)), Column#13, Column#16, Column#18, Column#18, Column#13, Column#16 + └─IndexHashJoin_38 458118.38 root inner join, inner:IndexLookUp_28, outer key:Column#9, inner key:Column#18 + ├─HashRightJoin_71 113097.88 root inner join, inner:TableReader_77, equal:[eq(Column#1, Column#10)] + │ ├─TableReader_77 7500.00 root data:Selection_76 + │ │ └─Selection_76 7500.00 cop[tikv] eq(Column#7, "AUTOMOBILE") │ │ └─TableScan_75 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - │ └─TableReader_74 36870000.00 root data:Selection_73 - │ └─Selection_73 36870000.00 cop[tikv] lt(Column#13, 1995-03-13 00:00:00.000000) + │ └─TableReader_74 24925000.00 root data:Selection_73 + │ └─Selection_73 24925000.00 cop[tikv] lt(Column#13, 1995-03-13 00:00:00.000000) │ └─TableScan_72 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false - └─IndexLookUp_28 2.20 root + └─IndexLookUp_28 1.35 root ├─IndexScan_25 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#18, Column#9)], keep order:false - └─Selection_27 2.20 cop[tikv] gt(Column#28, 1995-03-13 00:00:00.000000) + └─Selection_27 1.35 cop[tikv] gt(Column#28, 1995-03-13 00:00:00.000000) └─TableScan_26 4.05 cop[tikv] table:lineitem, keep order:false /* Q4 Order Priority Checking Query @@ -298,9 +298,9 @@ id count task operator info Sort_10 1.00 root Column#44:asc └─Projection_12 1.00 root Column#6, Column#43 └─HashAgg_15 1.00 root group by:Column#6, funcs:count(1), firstrow(Column#6) - └─IndexHashJoin_30 2340750.00 root semi join, inner:IndexLookUp_20, outer key:Column#1, inner key:Column#10 - ├─TableReader_42 2925937.50 root data:Selection_41 - │ └─Selection_41 2925937.50 cop[tikv] ge(Column#5, 1995-01-01 00:00:00.000000), lt(Column#5, 1995-04-01) + └─IndexHashJoin_30 1500000.00 root semi join, inner:IndexLookUp_20, outer key:Column#1, inner key:Column#10 + ├─TableReader_42 1875000.00 root data:Selection_41 + │ └─Selection_41 1875000.00 cop[tikv] ge(Column#5, 1995-01-01 00:00:00.000000), lt(Column#5, 1995-04-01) │ └─TableScan_40 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false └─IndexLookUp_20 3.24 root ├─IndexScan_17 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#10, Column#1)], keep order:false @@ -343,29 +343,29 @@ n_name order by revenue desc; id count task operator info -Sort_23 5.00 root Column#51:desc -└─Projection_25 5.00 root Column#43, Column#49 - └─HashAgg_28 5.00 root group by:Column#54, funcs:sum(Column#52), firstrow(Column#53) - └─Projection_86 11822812.50 root mul(Column#23, minus(1, Column#24)), Column#43, Column#43 - └─HashLeftJoin_38 11822812.50 root inner join, inner:TableReader_84, equal:[eq(Column#38, Column#4) eq(Column#10, Column#1)] - ├─IndexMergeJoin_49 11822812.50 root inner join, inner:TableReader_47, outer key:Column#18, inner key:Column#9 - │ ├─HashRightJoin_55 61163763.01 root inner join, inner:HashRightJoin_57, equal:[eq(Column#35, Column#20)] - │ │ ├─HashRightJoin_57 100000.00 root inner join, inner:HashRightJoin_70, equal:[eq(Column#42, Column#38)] - │ │ │ ├─HashRightJoin_70 5.00 root inner join, inner:TableReader_75, equal:[eq(Column#46, Column#44)] - │ │ │ │ ├─TableReader_75 1.00 root data:Selection_74 - │ │ │ │ │ └─Selection_74 1.00 cop[tikv] eq(Column#47, "MIDDLE EAST") - │ │ │ │ │ └─TableScan_73 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false - │ │ │ │ └─TableReader_72 25.00 root data:TableScan_71 - │ │ │ │ └─TableScan_71 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false - │ │ │ └─TableReader_77 500000.00 root data:TableScan_76 - │ │ │ └─TableScan_76 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false - │ │ └─TableReader_79 300005811.00 root data:TableScan_78 - │ │ └─TableScan_78 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false - │ └─TableReader_47 0.15 root data:Selection_46 - │ └─Selection_46 0.15 cop[tikv] ge(Column#13, 1994-01-01 00:00:00.000000), lt(Column#13, 1995-01-01) - │ └─TableScan_45 0.19 cop[tikv] table:orders, range: decided by [Column#18], keep order:true - └─TableReader_84 7500000.00 root data:TableScan_83 - └─TableScan_83 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false +Sort_23 1.00 root Column#51:desc +└─Projection_25 1.00 root Column#43, Column#49 + └─HashAgg_28 1.00 root group by:Column#59, funcs:sum(Column#57), firstrow(Column#58) + └─Projection_78 151898862.55 root mul(Column#23, minus(1, Column#24)), Column#43, Column#43 + └─HashRightJoin_43 151898862.55 root inner join, inner:HashLeftJoin_44, equal:[eq(Column#35, Column#20) eq(Column#9, Column#18)] + ├─HashLeftJoin_44 37500000.00 root inner join, inner:TableReader_74, equal:[eq(Column#1, Column#10)] + │ ├─HashRightJoin_47 150000000.00 root inner join, inner:HashRightJoin_49, equal:[eq(Column#38, Column#4)] + │ │ ├─HashRightJoin_49 500.00 root inner join, inner:HashRightJoin_62, equal:[eq(Column#42, Column#38)] + │ │ │ ├─HashRightJoin_62 0.03 root inner join, inner:TableReader_67, equal:[eq(Column#46, Column#44)] + │ │ │ │ ├─TableReader_67 0.01 root data:Selection_66 + │ │ │ │ │ └─Selection_66 0.01 cop[tikv] eq(Column#47, "MIDDLE EAST") + │ │ │ │ │ └─TableScan_65 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false + │ │ │ │ └─TableReader_64 25.00 root data:TableScan_63 + │ │ │ │ └─TableScan_63 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false + │ │ │ └─TableReader_69 500000.00 root data:TableScan_68 + │ │ │ └─TableScan_68 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false + │ │ └─TableReader_71 7500000.00 root data:TableScan_70 + │ │ └─TableScan_70 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false + │ └─TableReader_74 1875000.00 root data:Selection_73 + │ └─Selection_73 1875000.00 cop[tikv] ge(Column#13, 1994-01-01 00:00:00.000000), lt(Column#13, 1995-01-01) + │ └─TableScan_72 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false + └─TableReader_76 300005811.00 root data:TableScan_75 + └─TableScan_75 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q6 Forecasting Revenue Change Query This query quantifies the amount of revenue increase that would have resulted from eliminating certain companywide @@ -391,7 +391,7 @@ id count task operator info StreamAgg_20 1.00 root funcs:sum(Column#21) └─TableReader_21 1.00 root data:StreamAgg_9 └─StreamAgg_9 1.00 cop[tikv] funcs:sum(mul(Column#6, Column#7)) - └─Selection_19 3713857.91 cop[tikv] ge(Column#11, 1994-01-01 00:00:00.000000), ge(Column#7, 0.05), le(Column#7, 0.07), lt(Column#11, 1995-01-01), lt(Column#5, 24) + └─Selection_19 62313.71 cop[tikv] ge(Column#11, 1994-01-01 00:00:00.000000), ge(Column#7, 0.05), le(Column#7, 0.07), lt(Column#11, 1995-01-01), lt(Column#5, 24) └─TableScan_18 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q7 Volume Shipping Query @@ -444,29 +444,29 @@ supp_nation, cust_nation, l_year; id count task operator info -Sort_22 769.96 root Column#55:asc, Column#56:asc, Column#57:asc -└─Projection_24 769.96 root Column#50, Column#51, Column#52, Column#54 - └─HashAgg_27 769.96 root group by:Column#50, Column#51, Column#52, funcs:sum(Column#53), firstrow(Column#50), firstrow(Column#51), firstrow(Column#52) - └─Projection_28 1957240.42 root Column#43, Column#47, extract("YEAR", Column#18), mul(Column#13, minus(1, Column#14)) - └─HashLeftJoin_40 1957240.42 root inner join, inner:TableReader_94, equal:[eq(Column#37, Column#46)], other cond:or(and(eq(Column#43, "JAPAN"), eq(Column#47, "INDIA")), and(eq(Column#43, "INDIA"), eq(Column#47, "JAPAN"))) - ├─HashLeftJoin_51 24465505.20 root inner join, inner:TableReader_91, equal:[eq(Column#26, Column#34)] - │ ├─IndexMergeJoin_60 24465505.20 root inner join, inner:TableReader_58, outer key:Column#8, inner key:Column#25 - │ │ ├─HashRightJoin_66 24465505.20 root inner join, inner:HashRightJoin_79, equal:[eq(Column#1, Column#10)] - │ │ │ ├─HashRightJoin_79 40000.00 root inner join, inner:TableReader_84, equal:[eq(Column#42, Column#4)] - │ │ │ │ ├─TableReader_84 2.00 root data:Selection_83 - │ │ │ │ │ └─Selection_83 2.00 cop[tikv] or(eq(Column#43, "JAPAN"), eq(Column#43, "INDIA")) +Sort_22 63.15 root Column#55:asc, Column#56:asc, Column#57:asc +└─Projection_24 63.15 root Column#50, Column#51, Column#52, Column#54 + └─HashAgg_27 63.15 root group by:Column#50, Column#51, Column#52, funcs:sum(Column#53), firstrow(Column#50), firstrow(Column#51), firstrow(Column#52) + └─Projection_28 1223.28 root Column#43, Column#47, extract("YEAR", Column#18), mul(Column#13, minus(1, Column#14)) + └─HashLeftJoin_40 1223.28 root inner join, inner:TableReader_94, equal:[eq(Column#37, Column#46)], other cond:or(and(eq(Column#43, "JAPAN"), eq(Column#47, "INDIA")), and(eq(Column#43, "INDIA"), eq(Column#47, "JAPAN"))) + ├─IndexMergeJoin_48 611637.63 root inner join, inner:TableReader_46, outer key:Column#26, inner key:Column#34 + │ ├─IndexMergeJoin_60 611637.63 root inner join, inner:TableReader_58, outer key:Column#8, inner key:Column#25 + │ │ ├─HashRightJoin_66 611637.63 root inner join, inner:HashRightJoin_79, equal:[eq(Column#1, Column#10)] + │ │ │ ├─HashRightJoin_79 1000.00 root inner join, inner:TableReader_84, equal:[eq(Column#42, Column#4)] + │ │ │ │ ├─TableReader_84 0.05 root data:Selection_83 + │ │ │ │ │ └─Selection_83 0.05 cop[tikv] or(eq(Column#43, "JAPAN"), eq(Column#43, "INDIA")) │ │ │ │ │ └─TableScan_82 25.00 cop[tikv] table:n1, range:[-inf,+inf], keep order:false │ │ │ │ └─TableReader_81 500000.00 root data:TableScan_80 │ │ │ │ └─TableScan_80 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false - │ │ │ └─TableReader_87 91446230.29 root data:Selection_86 - │ │ │ └─Selection_86 91446230.29 cop[tikv] ge(Column#18, 1995-01-01 00:00:00.000000), le(Column#18, 1996-12-31 00:00:00.000000) + │ │ │ └─TableReader_87 7500145.28 root data:Selection_86 + │ │ │ └─Selection_86 7500145.28 cop[tikv] ge(Column#18, 1995-01-01 00:00:00.000000), le(Column#18, 1996-12-31 00:00:00.000000) │ │ │ └─TableScan_85 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false │ │ └─TableReader_58 1.00 root data:TableScan_57 │ │ └─TableScan_57 1.00 cop[tikv] table:orders, range: decided by [Column#8], keep order:true - │ └─TableReader_91 7500000.00 root data:TableScan_90 - │ └─TableScan_90 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - └─TableReader_94 2.00 root data:Selection_93 - └─Selection_93 2.00 cop[tikv] or(eq(Column#47, "INDIA"), eq(Column#47, "JAPAN")) + │ └─TableReader_46 1.00 root data:TableScan_45 + │ └─TableScan_45 1.00 cop[tikv] table:customer, range: decided by [Column#26], keep order:true + └─TableReader_94 0.05 root data:Selection_93 + └─Selection_93 0.05 cop[tikv] or(eq(Column#47, "INDIA"), eq(Column#47, "JAPAN")) └─TableScan_92 25.00 cop[tikv] table:n2, range:[-inf,+inf], keep order:false /* Q8 National Market Share Query @@ -516,36 +516,36 @@ o_year order by o_year; id count task operator info -Sort_29 719.02 root Column#67:asc -└─Projection_31 719.02 root Column#62, div(Column#65, Column#66) - └─HashAgg_34 719.02 root group by:Column#80, funcs:sum(Column#77), sum(Column#78), firstrow(Column#79) - └─Projection_123 563136.02 root case(eq(Column#64, "INDIA"), Column#63, 0), Column#63, Column#62, Column#62 - └─Projection_35 563136.02 root extract("YEAR", Column#38), mul(Column#22, minus(1, Column#23)), Column#56 - └─HashLeftJoin_45 563136.02 root inner join, inner:TableReader_121, equal:[eq(Column#13, Column#55)] - ├─HashLeftJoin_56 563136.02 root inner join, inner:TableReader_119, equal:[eq(Column#19, Column#10)] - │ ├─HashLeftJoin_69 563136.02 root inner join, inner:TableReader_117, equal:[eq(Column#18, Column#1)] - │ │ ├─IndexHashJoin_83 90788402.51 root inner join, inner:IndexLookUp_74, outer key:Column#34, inner key:Column#17 - │ │ │ ├─HashRightJoin_87 22413367.93 root inner join, inner:HashRightJoin_89, equal:[eq(Column#43, Column#35)] - │ │ │ │ ├─HashRightJoin_89 1500000.00 root inner join, inner:HashRightJoin_102, equal:[eq(Column#51, Column#46)] - │ │ │ │ │ ├─HashRightJoin_102 5.00 root inner join, inner:TableReader_107, equal:[eq(Column#59, Column#53)] - │ │ │ │ │ │ ├─TableReader_107 1.00 root data:Selection_106 - │ │ │ │ │ │ │ └─Selection_106 1.00 cop[tikv] eq(Column#60, "ASIA") +Sort_29 60.15 root Column#67:asc +└─Projection_31 60.15 root Column#62, div(Column#65, Column#66) + └─HashAgg_34 60.15 root group by:Column#80, funcs:sum(Column#77), sum(Column#78), firstrow(Column#79) + └─Projection_123 10000.00 root case(eq(Column#64, "INDIA"), Column#63, 0), Column#63, Column#62, Column#62 + └─Projection_35 10000.00 root extract("YEAR", Column#38), mul(Column#22, minus(1, Column#23)), Column#56 + └─HashLeftJoin_45 10000.00 root inner join, inner:TableReader_121, equal:[eq(Column#13, Column#55)] + ├─IndexMergeJoin_53 10000.00 root inner join, inner:TableReader_51, outer key:Column#19, inner key:Column#10 + │ ├─IndexMergeJoin_66 10000.00 root inner join, inner:TableReader_64, outer key:Column#18, inner key:Column#1 + │ │ ├─IndexHashJoin_83 458118.38 root inner join, inner:IndexLookUp_74, outer key:Column#34, inner key:Column#17 + │ │ │ ├─HashRightJoin_87 113097.88 root inner join, inner:HashRightJoin_89, equal:[eq(Column#43, Column#35)] + │ │ │ │ ├─HashRightJoin_89 7500.00 root inner join, inner:HashRightJoin_102, equal:[eq(Column#51, Column#46)] + │ │ │ │ │ ├─HashRightJoin_102 0.03 root inner join, inner:TableReader_107, equal:[eq(Column#59, Column#53)] + │ │ │ │ │ │ ├─TableReader_107 0.01 root data:Selection_106 + │ │ │ │ │ │ │ └─Selection_106 0.01 cop[tikv] eq(Column#60, "ASIA") │ │ │ │ │ │ │ └─TableScan_105 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false │ │ │ │ │ │ └─TableReader_104 25.00 root data:TableScan_103 │ │ │ │ │ │ └─TableScan_103 25.00 cop[tikv] table:n1, range:[-inf,+inf], keep order:false │ │ │ │ │ └─TableReader_109 7500000.00 root data:TableScan_108 │ │ │ │ │ └─TableScan_108 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - │ │ │ │ └─TableReader_112 22413367.93 root data:Selection_111 - │ │ │ │ └─Selection_111 22413367.93 cop[tikv] ge(Column#38, 1995-01-01 00:00:00.000000), le(Column#38, 1996-12-31 00:00:00.000000) + │ │ │ │ └─TableReader_112 1875000.00 root data:Selection_111 + │ │ │ │ └─Selection_111 1875000.00 cop[tikv] ge(Column#38, 1995-01-01 00:00:00.000000), le(Column#38, 1996-12-31 00:00:00.000000) │ │ │ │ └─TableScan_110 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false │ │ │ └─IndexLookUp_74 4.05 root │ │ │ ├─IndexScan_72 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#17, Column#34)], keep order:false │ │ │ └─TableScan_73 4.05 cop[tikv] table:lineitem, keep order:false - │ │ └─TableReader_117 61674.00 root data:Selection_116 - │ │ └─Selection_116 61674.00 cop[tikv] eq(Column#5, "SMALL PLATED COPPER") - │ │ └─TableScan_115 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false - │ └─TableReader_119 500000.00 root data:TableScan_118 - │ └─TableScan_118 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false + │ │ └─TableReader_64 0.02 root data:Selection_63 + │ │ └─Selection_63 0.02 cop[tikv] eq(Column#5, "SMALL PLATED COPPER") + │ │ └─TableScan_62 0.02 cop[tikv] table:part, range: decided by [Column#18], keep order:true + │ └─TableReader_51 1.00 root data:TableScan_50 + │ └─TableScan_50 1.00 cop[tikv] table:supplier, range: decided by [Column#19], keep order:true └─TableReader_121 25.00 root data:TableScan_120 └─TableScan_120 25.00 cop[tikv] table:n2, range:[-inf,+inf], keep order:false /* @@ -660,23 +660,23 @@ limit 20; id count task operator info Projection_17 20.00 root Column#1, Column#2, Column#39, Column#6, Column#36, Column#3, Column#5, Column#8 └─TopN_20 20.00 root Column#39:desc, offset:0, count:20 - └─HashAgg_26 3017307.69 root group by:Column#61, Column#62, Column#63, Column#64, Column#65, Column#66, Column#67, funcs:sum(Column#53), firstrow(Column#54), firstrow(Column#55), firstrow(Column#56), firstrow(Column#57), firstrow(Column#58), firstrow(Column#59), firstrow(Column#60) - └─Projection_67 12222016.17 root mul(Column#23, minus(1, Column#24)), Column#1, Column#2, Column#3, Column#5, Column#6, Column#8, Column#36, Column#1, Column#2, Column#6, Column#5, Column#36, Column#3, Column#8 - └─IndexMergeJoin_39 12222016.17 root inner join, inner:Projection_37, outer key:Column#9, inner key:Column#18 - ├─HashLeftJoin_44 3017307.69 root inner join, inner:TableReader_63, equal:[eq(Column#1, Column#10)] + └─HashAgg_26 300005.81 root group by:Column#61, Column#62, Column#63, Column#64, Column#65, Column#66, Column#67, funcs:sum(Column#53), firstrow(Column#54), firstrow(Column#55), firstrow(Column#56), firstrow(Column#57), firstrow(Column#58), firstrow(Column#59), firstrow(Column#60) + └─Projection_67 300005.81 root mul(Column#23, minus(1, Column#24)), Column#1, Column#2, Column#3, Column#5, Column#6, Column#8, Column#36, Column#1, Column#2, Column#6, Column#5, Column#36, Column#3, Column#8 + └─IndexMergeJoin_39 300005.81 root inner join, inner:Projection_37, outer key:Column#9, inner key:Column#18 + ├─HashLeftJoin_44 1875000.00 root inner join, inner:TableReader_63, equal:[eq(Column#1, Column#10)] │ ├─HashRightJoin_56 7500000.00 root inner join, inner:TableReader_60, equal:[eq(Column#35, Column#4)] │ │ ├─TableReader_60 25.00 root data:TableScan_59 │ │ │ └─TableScan_59 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ │ └─TableReader_58 7500000.00 root data:TableScan_57 │ │ └─TableScan_57 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - │ └─TableReader_63 3017307.69 root data:Selection_62 - │ └─Selection_62 3017307.69 cop[tikv] ge(Column#13, 1993-08-01 00:00:00.000000), lt(Column#13, 1993-11-01) + │ └─TableReader_63 1875000.00 root data:Selection_62 + │ └─Selection_62 1875000.00 cop[tikv] ge(Column#13, 1993-08-01 00:00:00.000000), lt(Column#13, 1993-11-01) │ └─TableScan_61 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false - └─Projection_37 1.00 root Column#18, Column#23, Column#24, Column#26 - └─IndexLookUp_36 1.00 root - ├─IndexScan_33 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#18, Column#9)], keep order:true - └─Selection_35 1.00 cop[tikv] eq(Column#26, "R") - └─TableScan_34 4.05 cop[tikv] table:lineitem, keep order:false + └─Projection_37 0.00 root Column#18, Column#23, Column#24, Column#26 + └─IndexLookUp_36 0.00 root + ├─IndexScan_33 0.16 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#18, Column#9)], keep order:true + └─Selection_35 0.00 cop[tikv] eq(Column#26, "R") + └─TableScan_34 0.16 cop[tikv] table:lineitem, keep order:false /* Q11 Important Stock Identification Query This query finds the most important subset of suppliers' stock in a given nation. @@ -713,15 +713,15 @@ and n_name = 'MOZAMBIQUE' order by value desc; id count task operator info -Projection_57 1304801.67 root Column#1, Column#18 -└─Sort_58 1304801.67 root Column#18:desc - └─Selection_60 1304801.67 root gt(Column#18, NULL) - └─HashAgg_63 1631002.09 root group by:Column#49, funcs:sum(Column#47), firstrow(Column#48) - └─Projection_89 1631002.09 root mul(Column#4, cast(Column#3)), Column#1, Column#1 - └─HashRightJoin_67 1631002.09 root inner join, inner:HashRightJoin_80, equal:[eq(Column#7, Column#2)] - ├─HashRightJoin_80 20000.00 root inner join, inner:TableReader_85, equal:[eq(Column#14, Column#10)] - │ ├─TableReader_85 1.00 root data:Selection_84 - │ │ └─Selection_84 1.00 cop[tikv] eq(Column#15, "MOZAMBIQUE") +Projection_57 32620.04 root Column#1, Column#18 +└─Sort_58 32620.04 root Column#18:desc + └─Selection_60 32620.04 root gt(Column#18, NULL) + └─HashAgg_63 40775.05 root group by:Column#49, funcs:sum(Column#47), firstrow(Column#48) + └─Projection_89 40775.05 root mul(Column#4, cast(Column#3)), Column#1, Column#1 + └─HashRightJoin_67 40775.05 root inner join, inner:HashRightJoin_80, equal:[eq(Column#7, Column#2)] + ├─HashRightJoin_80 500.00 root inner join, inner:TableReader_85, equal:[eq(Column#14, Column#10)] + │ ├─TableReader_85 0.03 root data:Selection_84 + │ │ └─Selection_84 0.03 cop[tikv] eq(Column#15, "MOZAMBIQUE") │ │ └─TableScan_83 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ └─TableReader_82 500000.00 root data:TableScan_81 │ └─TableScan_81 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false @@ -770,13 +770,13 @@ id count task operator info Sort_9 1.00 root Column#29:asc └─Projection_11 1.00 root Column#24, Column#27, Column#28 └─HashAgg_14 1.00 root group by:Column#43, funcs:sum(Column#40), sum(Column#41), firstrow(Column#42) - └─Projection_54 10023369.01 root cast(case(or(eq(Column#6, "1-URGENT"), eq(Column#6, "2-HIGH")), 1, 0)), cast(case(and(ne(Column#6, "1-URGENT"), ne(Column#6, "2-HIGH")), 1, 0)), Column#24, Column#24 - └─IndexMergeJoin_36 10023369.01 root inner join, inner:Projection_34, outer key:Column#1, inner key:Column#10 + └─Projection_54 12000.23 root cast(case(or(eq(Column#6, "1-URGENT"), eq(Column#6, "2-HIGH")), 1, 0)), cast(case(and(ne(Column#6, "1-URGENT"), ne(Column#6, "2-HIGH")), 1, 0)), Column#24, Column#24 + └─IndexMergeJoin_36 12000.23 root inner join, inner:Projection_34, outer key:Column#1, inner key:Column#10 ├─Projection_34 0.00 root Column#10, Column#20, Column#21, Column#22, Column#24 │ └─IndexLookUp_33 0.00 root - │ ├─IndexScan_30 0.13 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#10, Column#1)], keep order:true + │ ├─IndexScan_30 0.00 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#10, Column#1)], keep order:true │ └─Selection_32 0.00 cop[tikv] ge(Column#22, 1997-01-01 00:00:00.000000), in(Column#24, "RAIL", "FOB"), lt(Column#20, Column#21), lt(Column#21, Column#22), lt(Column#22, 1998-01-01) - │ └─TableScan_31 0.13 cop[tikv] table:lineitem, keep order:false + │ └─TableScan_31 0.00 cop[tikv] table:lineitem, keep order:false └─TableReader_52 75000000.00 root data:TableScan_51 └─TableScan_51 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false /* @@ -842,14 +842,14 @@ and l_shipdate >= '1996-12-01' and l_shipdate < date_add('1996-12-01', interval '1' month); id count task operator info Projection_8 1.00 root div(mul(100.00, Column#27), Column#28) -└─StreamAgg_13 1.00 root funcs:sum(Column#31), sum(Column#32) - └─Projection_41 4121984.49 root case(like(Column#22, "PROMO%", 92), mul(Column#6, minus(1, Column#7)), 0), mul(Column#6, minus(1, Column#7)) - └─IndexMergeJoin_36 4121984.49 root inner join, inner:TableReader_34, outer key:Column#2, inner key:Column#18 - ├─TableReader_27 4121984.49 root data:Selection_26 - │ └─Selection_26 4121984.49 cop[tikv] ge(Column#11, 1996-12-01 00:00:00.000000), lt(Column#11, 1997-01-01) +└─HashAgg_11 1.00 root funcs:sum(Column#31), sum(Column#32) + └─Projection_41 7500145.28 root case(like(Column#22, "PROMO%", 92), mul(Column#6, minus(1, Column#7)), 0), mul(Column#6, minus(1, Column#7)) + └─HashRightJoin_24 7500145.28 root inner join, inner:TableReader_27, equal:[eq(Column#2, Column#18)] + ├─TableReader_27 7500145.28 root data:Selection_26 + │ └─Selection_26 7500145.28 cop[tikv] ge(Column#11, 1996-12-01 00:00:00.000000), lt(Column#11, 1997-01-01) │ └─TableScan_25 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false - └─TableReader_34 1.00 root data:TableScan_33 - └─TableScan_33 1.00 cop[tikv] table:part, range: decided by [Column#2], keep order:true + └─TableReader_29 10000000.00 root data:TableScan_28 + └─TableScan_28 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false /* Q15 Top Supplier Query This query determines the top supplier so it can be rewarded, given more business, or identified for special recognition. @@ -930,19 +930,19 @@ p_brand, p_type, p_size; id count task operator info -Sort_13 3863988.24 root Column#28:desc, Column#25:asc, Column#26:asc, Column#27:asc -└─Projection_15 3863988.24 root Column#10, Column#11, Column#12, Column#24 - └─HashAgg_18 3863988.24 root group by:Column#10, Column#11, Column#12, funcs:count(distinct Column#2), firstrow(Column#10), firstrow(Column#11), firstrow(Column#12) - └─HashLeftJoin_30 3863988.24 root anti semi join, inner:TableReader_68, equal:[eq(Column#2, Column#16)] - ├─IndexMergeJoin_38 4829985.30 root inner join, inner:IndexReader_36, outer key:Column#7, inner key:Column#1 - │ ├─TableReader_61 1200618.43 root data:Selection_60 - │ │ └─Selection_60 1200618.43 cop[tikv] in(Column#12, 48, 19, 12, 4, 41, 7, 21, 39), ne(Column#10, "Brand#34"), not(like(Column#11, "LARGE BRUSHED%", 92)) +Sort_13 137109.51 root Column#28:desc, Column#25:asc, Column#26:asc, Column#27:asc +└─Projection_15 137109.51 root Column#10, Column#11, Column#12, Column#24 + └─HashAgg_18 137109.51 root group by:Column#10, Column#11, Column#12, funcs:count(distinct Column#2), firstrow(Column#10), firstrow(Column#11), firstrow(Column#12) + └─IndexHashJoin_29 137109.51 root anti semi join, inner:TableReader_21, outer key:Column#2, inner key:Column#16 + ├─IndexMergeJoin_38 171386.89 root inner join, inner:IndexReader_36, outer key:Column#7, inner key:Column#1 + │ ├─TableReader_61 42602.67 root data:Selection_60 + │ │ └─Selection_60 42602.67 cop[tikv] in(Column#12, 48, 19, 12, 4, 41, 7, 21, 39), ne(Column#10, "Brand#34"), not(like(Column#11, "LARGE BRUSHED%", 92)) │ │ └─TableScan_59 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─IndexReader_36 4.02 root index:IndexScan_35 │ └─IndexScan_35 4.02 cop[tikv] table:partsupp, index:PS_PARTKEY, PS_SUPPKEY, range: decided by [eq(Column#1, Column#7)], keep order:true - └─TableReader_68 400000.00 root data:Selection_67 - └─Selection_67 400000.00 cop[tikv] like(Column#22, "%Customer%Complaints%", 92) - └─TableScan_66 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false + └─TableReader_21 0.80 root data:Selection_20 + └─Selection_20 0.80 cop[tikv] like(Column#22, "%Customer%Complaints%", 92) + └─TableScan_19 1.00 cop[tikv] table:supplier, range: decided by [Column#2], keep order:false /* Q17 Small-Quantity-Order Revenue Query This query determines how much average yearly revenue would be lost if orders were no longer filled for small @@ -973,12 +973,12 @@ l_partkey = p_partkey ); id count task operator info Projection_16 1.00 root div(Column#46, 7.0) -└─StreamAgg_21 1.00 root funcs:sum(Column#6) - └─Projection_51 293773.83 root Column#2, Column#5, Column#6, Column#18, Column#21, Column#24, mul(0.2, Column#44) - └─HashRightJoin_53 293773.83 root inner join, inner:HashRightJoin_37, equal:[eq(Column#18, Column#28)], other cond:lt(Column#5, mul(0.2, Column#44)) - ├─HashRightJoin_37 293773.83 root inner join, inner:TableReader_42, equal:[eq(Column#18, Column#2)] - │ ├─TableReader_42 9736.49 root data:Selection_41 - │ │ └─Selection_41 9736.49 cop[tikv] eq(Column#21, "Brand#44"), eq(Column#24, "WRAP PKG") +└─HashAgg_19 1.00 root funcs:sum(Column#6) + └─Projection_22 301.72 root Column#2, Column#5, Column#6, Column#18, Column#21, Column#24, mul(0.2, Column#44) + └─HashRightJoin_24 301.72 root inner join, inner:HashRightJoin_37, equal:[eq(Column#18, Column#28)], other cond:lt(Column#5, mul(0.2, Column#44)) + ├─HashRightJoin_37 301.72 root inner join, inner:TableReader_42, equal:[eq(Column#18, Column#2)] + │ ├─TableReader_42 10.00 root data:Selection_41 + │ │ └─Selection_41 10.00 cop[tikv] eq(Column#21, "Brand#44"), eq(Column#24, "WRAP PKG") │ │ └─TableScan_40 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─TableReader_39 300005811.00 root data:TableScan_38 │ └─TableScan_38 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false @@ -1092,15 +1092,15 @@ and l_shipmode in ('AIR', 'AIR REG') and l_shipinstruct = 'DELIVER IN PERSON' ); id count task operator info -StreamAgg_13 1.00 root funcs:sum(Column#29) -└─Projection_46 6286493.79 root mul(Column#6, minus(1, Column#7)) - └─IndexMergeJoin_41 6286493.79 root inner join, inner:TableReader_39, outer key:Column#2, inner key:Column#18, other cond:or(and(and(eq(Column#21, "Brand#52"), in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(Column#5, 4), and(le(Column#5, 14), le(Column#23, 5)))), or(and(and(eq(Column#21, "Brand#11"), in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(Column#5, 18), and(le(Column#5, 28), le(Column#23, 10)))), and(and(eq(Column#21, "Brand#51"), in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(Column#5, 29), and(le(Column#5, 39), le(Column#23, 15)))))) - ├─TableReader_29 6286493.79 root data:Selection_28 - │ └─Selection_28 6286493.79 cop[tikv] eq(Column#14, "DELIVER IN PERSON"), in(Column#15, "AIR", "AIR REG"), or(and(ge(Column#5, 4), le(Column#5, 14)), or(and(ge(Column#5, 18), le(Column#5, 28)), and(ge(Column#5, 29), le(Column#5, 39)))) +HashAgg_11 1.00 root funcs:sum(Column#29) +└─Projection_46 45.00 root mul(Column#6, minus(1, Column#7)) + └─IndexMergeJoin_22 45.00 root inner join, inner:TableReader_20, outer key:Column#2, inner key:Column#18, other cond:or(and(and(eq(Column#21, "Brand#52"), in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(Column#5, 4), and(le(Column#5, 14), le(Column#23, 5)))), or(and(and(eq(Column#21, "Brand#11"), in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(Column#5, 18), and(le(Column#5, 28), le(Column#23, 10)))), and(and(eq(Column#21, "Brand#51"), in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(Column#5, 29), and(le(Column#5, 39), le(Column#23, 15)))))) + ├─TableReader_29 45.00 root data:Selection_28 + │ └─Selection_28 45.00 cop[tikv] eq(Column#14, "DELIVER IN PERSON"), in(Column#15, "AIR", "AIR REG"), or(and(ge(Column#5, 4), le(Column#5, 14)), or(and(ge(Column#5, 18), le(Column#5, 28)), and(ge(Column#5, 29), le(Column#5, 39)))) │ └─TableScan_27 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false - └─TableReader_39 0.80 root data:Selection_38 - └─Selection_38 0.80 cop[tikv] ge(Column#23, 1), or(and(eq(Column#21, "Brand#52"), and(in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(Column#23, 5))), or(and(eq(Column#21, "Brand#11"), and(in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(Column#23, 10))), and(eq(Column#21, "Brand#51"), and(in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(Column#23, 15))))) - └─TableScan_37 1.00 cop[tikv] table:part, range: decided by [Column#2], keep order:true + └─TableReader_20 0.80 root data:Selection_19 + └─Selection_19 0.80 cop[tikv] ge(Column#23, 1), or(and(eq(Column#21, "Brand#52"), and(in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(Column#23, 5))), or(and(eq(Column#21, "Brand#11"), and(in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(Column#23, 10))), and(eq(Column#21, "Brand#51"), and(in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(Column#23, 15))))) + └─TableScan_18 1.00 cop[tikv] table:part, range: decided by [Column#2], keep order:true /* Q20 Potential Part Promotion Query The Potential Part Promotion Query identifies suppliers in a particular nation having selected parts that may be candidates @@ -1148,44 +1148,30 @@ and n_name = 'ALGERIA' order by s_name; id count task operator info -Sort_28 20000.00 root Column#48:asc -└─Projection_30 20000.00 root Column#2, Column#3 - └─HashRightJoin_32 20000.00 root inner join, inner:HashRightJoin_45, equal:[eq(Column#1, Column#13)] - ├─HashRightJoin_45 20000.00 root inner join, inner:TableReader_50, equal:[eq(Column#8, Column#4)] - │ ├─TableReader_50 1.00 root data:Selection_49 - │ │ └─Selection_49 1.00 cop[tikv] eq(Column#9, "ALGERIA") +Sort_28 500.00 root Column#48:asc +└─Projection_30 500.00 root Column#2, Column#3 + └─HashRightJoin_32 500.00 root inner join, inner:HashRightJoin_45, equal:[eq(Column#1, Column#13)] + ├─HashRightJoin_45 500.00 root inner join, inner:TableReader_50, equal:[eq(Column#8, Column#4)] + │ ├─TableReader_50 0.03 root data:Selection_49 + │ │ └─Selection_49 0.03 cop[tikv] eq(Column#9, "ALGERIA") │ │ └─TableScan_48 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ └─TableReader_47 500000.00 root data:TableScan_46 │ └─TableScan_46 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false - └─HashAgg_53 64006.34 root group by:Column#13, funcs:firstrow(Column#13) - └─Projection_54 64006.34 root Column#12, Column#13, Column#14, Column#18, mul(0.5, Column#45) - └─Selection_55 64006.34 root gt(cast(Column#14), mul(0.5, Column#45)) - └─HashAgg_58 80007.93 root group by:Column#12, Column#13, funcs:firstrow(Column#12), firstrow(Column#13), firstrow(Column#14), firstrow(Column#18), sum(Column#32) -<<<<<<< HEAD - └─HashLeftJoin_61 9711455.06 root left outer join, inner:TableReader_102, equal:[eq(Column#12, Column#29) eq(Column#13, Column#30)] - ├─IndexHashJoin_74 321865.05 root inner join, inner:IndexLookUp_65, outer key:Column#18, inner key:Column#12 - │ ├─TableReader_97 80007.93 root data:Selection_96 - │ │ └─Selection_96 80007.93 cop[tikv] like(Column#19, "green%", 92) - │ │ └─TableScan_95 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false - │ └─IndexLookUp_65 4.02 root - │ ├─IndexScan_63 4.02 cop[tikv] table:partsupp, index:PS_PARTKEY, PS_SUPPKEY, range: decided by [eq(Column#12, Column#18)], keep order:false - │ └─TableScan_64 4.02 cop[tikv] table:partsupp, keep order:false - └─TableReader_102 44189356.65 root data:Selection_101 - └─Selection_101 44189356.65 cop[tikv] ge(Column#38, 1993-01-01 00:00:00.000000), lt(Column#38, 1994-01-01) - └─TableScan_100 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false -======= - └─HashLeftJoin_62 9711455.06 root left outer join, inner:IndexHashJoin_75 (REVERSED), equal:[eq(Column#12, Column#29) eq(Column#13, Column#30)] - ├─IndexHashJoin_75 321865.05 root inner join, inner:IndexLookUp_66, outer key:Column#18, inner key:Column#12 - │ ├─TableReader_87 80007.93 root data:Selection_86 - │ │ └─Selection_86 80007.93 cop[tikv] like(Column#19, "green%", 92) - │ │ └─TableScan_85 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false + └─HashAgg_53 200000.00 root group by:Column#13, funcs:firstrow(Column#13) + └─Projection_54 200000.00 root Column#12, Column#13, Column#14, Column#18, mul(0.5, Column#45) + └─Selection_55 200000.00 root gt(cast(Column#14), mul(0.5, Column#45)) + └─HashAgg_58 250000.00 root group by:Column#12, Column#13, funcs:firstrow(Column#12), firstrow(Column#13), firstrow(Column#14), firstrow(Column#18), sum(Column#32) + └─HashLeftJoin_62 7500145.28 root left outer join, inner:IndexHashJoin_75 (REVERSED), equal:[eq(Column#12, Column#29) eq(Column#13, Column#30)] + ├─IndexHashJoin_75 1005728.63 root inner join, inner:IndexLookUp_66, outer key:Column#18, inner key:Column#12 + │ ├─TableReader_98 250000.00 root data:Selection_97 + │ │ └─Selection_97 250000.00 cop[tikv] like(Column#19, "green%", 92) + │ │ └─TableScan_96 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─IndexLookUp_66 4.02 root │ ├─IndexScan_64 4.02 cop[tikv] table:partsupp, index:PS_PARTKEY, PS_SUPPKEY, range: decided by [eq(Column#12, Column#18)], keep order:false │ └─TableScan_65 4.02 cop[tikv] table:partsupp, keep order:false - └─TableReader_92 44189356.65 root data:Selection_91 - └─Selection_91 44189356.65 cop[tikv] ge(Column#38, 1993-01-01 00:00:00.000000), lt(Column#38, 1994-01-01) - └─TableScan_90 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false ->>>>>>> dffc5152f2ada6d860f48b200a26df512a92fdb6 + └─TableReader_103 7500145.28 root data:Selection_102 + └─Selection_102 7500145.28 cop[tikv] ge(Column#38, 1993-01-01 00:00:00.000000), lt(Column#38, 1994-01-01) + └─TableScan_101 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q21 Suppliers Who Kept Orders Waiting Query This query identifies certain suppliers who were not able to ship required parts in a timely manner. @@ -1238,22 +1224,22 @@ id count task operator info Projection_25 1.00 root Column#2, Column#104 └─TopN_28 1.00 root Column#104:desc, Column#2:asc, offset:0, count:100 └─HashAgg_34 1.00 root group by:Column#2, funcs:count(1), firstrow(Column#2) - └─IndexHashJoin_49 7828961.66 root anti semi join, inner:IndexLookUp_39, outer key:Column#8, inner key:Column#71, other cond:ne(Column#73, Column#10) - ├─IndexHashJoin_88 9786202.08 root semi join, inner:IndexLookUp_79, outer key:Column#8, inner key:Column#38, other cond:ne(Column#40, Column#1), ne(Column#40, Column#10) - │ ├─IndexMergeJoin_99 12232752.60 root inner join, inner:TableReader_97, outer key:Column#8, inner key:Column#25 - │ │ ├─HashRightJoin_105 12232752.60 root inner join, inner:HashRightJoin_118, equal:[eq(Column#1, Column#10)] - │ │ │ ├─HashRightJoin_118 20000.00 root inner join, inner:TableReader_123, equal:[eq(Column#34, Column#4)] - │ │ │ │ ├─TableReader_123 1.00 root data:Selection_122 - │ │ │ │ │ └─Selection_122 1.00 cop[tikv] eq(Column#35, "EGYPT") + └─IndexHashJoin_49 48000.00 root anti semi join, inner:IndexLookUp_39, outer key:Column#8, inner key:Column#71, other cond:ne(Column#73, Column#10) + ├─IndexHashJoin_88 60000.00 root semi join, inner:IndexLookUp_79, outer key:Column#8, inner key:Column#38, other cond:ne(Column#40, Column#1), ne(Column#40, Column#10) + │ ├─IndexMergeJoin_99 75000.00 root inner join, inner:TableReader_97, outer key:Column#8, inner key:Column#25 + │ │ ├─HashRightJoin_105 305818.82 root inner join, inner:HashRightJoin_118, equal:[eq(Column#1, Column#10)] + │ │ │ ├─HashRightJoin_118 500.00 root inner join, inner:TableReader_123, equal:[eq(Column#34, Column#4)] + │ │ │ │ ├─TableReader_123 0.03 root data:Selection_122 + │ │ │ │ │ └─Selection_122 0.03 cop[tikv] eq(Column#35, "EGYPT") │ │ │ │ │ └─TableScan_121 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ │ │ │ └─TableReader_120 500000.00 root data:TableScan_119 │ │ │ │ └─TableScan_119 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false │ │ │ └─TableReader_126 240004648.80 root data:Selection_125 │ │ │ └─Selection_125 240004648.80 cop[tikv] gt(Column#20, Column#19) │ │ │ └─TableScan_124 300005811.00 cop[tikv] table:l1, range:[-inf,+inf], keep order:false - │ │ └─TableReader_97 0.80 root data:Selection_96 - │ │ └─Selection_96 0.80 cop[tikv] eq(Column#27, "F") - │ │ └─TableScan_95 1.00 cop[tikv] table:orders, range: decided by [Column#8], keep order:true + │ │ └─TableReader_97 0.20 root data:Selection_96 + │ │ └─Selection_96 0.20 cop[tikv] eq(Column#27, "F") + │ │ └─TableScan_95 0.25 cop[tikv] table:orders, range: decided by [Column#8], keep order:true │ └─IndexLookUp_79 4.05 root │ ├─IndexScan_77 4.05 cop[tikv] table:l2, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#38, Column#8)], keep order:false │ └─TableScan_78 4.05 cop[tikv] table:l2, keep order:false From 2ae0b6afaf0d7cff6c0ce9ddd5fc21ade9b4cc94 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Tue, 12 Nov 2019 16:06:30 +0800 Subject: [PATCH 12/14] address comment --- cmd/explaintest/r/explain_complex.result | 17 +- .../r/explain_complex_stats.result | 17 +- cmd/explaintest/r/explain_easy.result | 14 +- cmd/explaintest/r/generated_columns.result | 20 +- cmd/explaintest/r/index_join.result | 20 +- cmd/explaintest/r/topn_push_down.result | 10 +- cmd/explaintest/r/tpch.result | 374 +++++++++--------- planner/core/exhaust_physical_plans.go | 28 +- planner/core/logical_plan_builder.go | 35 +- planner/core/physical_plan_test.go | 2 + 10 files changed, 286 insertions(+), 251 deletions(-) diff --git a/cmd/explaintest/r/explain_complex.result b/cmd/explaintest/r/explain_complex.result index ee36be98a83d8..d5ea0dc8ede60 100644 --- a/cmd/explaintest/r/explain_complex.result +++ b/cmd/explaintest/r/explain_complex.result @@ -152,15 +152,14 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id count task operator info Projection_10 0.00 root Column#1, Column#2, Column#4, Column#5, Column#3, Column#24, Column#25, Column#26, Column#11, Column#12, Column#13, Column#14, Column#15, Column#16, Column#17 └─Limit_13 0.00 root offset:0, count:2000 - └─IndexMergeJoin_41 0.00 root inner join, inner:IndexLookUp_39, outer key:Column#21, Column#23, inner key:Column#2, Column#5 - ├─IndexLookUp_39 0.00 root - │ ├─Selection_37 0.00 cop[tikv] not(isnull(Column#5)) - │ │ └─IndexScan_35 0.00 cop[tikv] table:dt, index:aid, dic, range: decided by [eq(Column#2, Column#21) eq(Column#5, Column#23)], keep order:true, stats:pseudo - │ └─Selection_38 0.00 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592) - │ └─TableScan_36 0.00 cop[tikv] table:dt, keep order:false, stats:pseudo - └─TableReader_61 3.33 root data:Selection_60 - └─Selection_60 3.33 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) - └─TableScan_59 10000.00 cop[tikv] table:rr, range:[-inf,+inf], keep order:false, stats:pseudo + └─IndexJoin_19 0.00 root inner join, inner:IndexLookUp_18, outer key:Column#2, Column#5, inner key:Column#21, Column#23 + ├─TableReader_43 0.00 root data:Selection_42 + │ └─Selection_42 0.00 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592), not(isnull(Column#5)) + │ └─TableScan_41 10000.00 cop[tikv] table:dt, range:[0,+inf], keep order:false, stats:pseudo + └─IndexLookUp_18 0.00 root + ├─IndexScan_15 1.25 cop[tikv] table:rr, index:aid, dic, range: decided by [eq(Column#21, Column#2) eq(Column#23, Column#5)], keep order:false, stats:pseudo + └─Selection_17 0.00 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) + └─TableScan_16 1.25 cop[tikv] table:rr, keep order:false, stats:pseudo explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id count task operator info Projection_5 1.00 root Column#14, Column#16, Column#22, Column#23, Column#24 diff --git a/cmd/explaintest/r/explain_complex_stats.result b/cmd/explaintest/r/explain_complex_stats.result index 03c23edabde67..6b996c44cd352 100644 --- a/cmd/explaintest/r/explain_complex_stats.result +++ b/cmd/explaintest/r/explain_complex_stats.result @@ -160,15 +160,14 @@ explain select dt.id as id, dt.aid as aid, dt.pt as pt, dt.dic as dic, dt.cm as id count task operator info Projection_10 428.32 root Column#1, Column#2, Column#4, Column#5, Column#3, Column#24, Column#25, Column#26, Column#11, Column#12, Column#13, Column#14, Column#15, Column#16, Column#17 └─Limit_13 428.32 root offset:0, count:2000 - └─IndexMergeJoin_41 428.32 root inner join, inner:IndexLookUp_39, outer key:Column#21, Column#23, inner key:Column#2, Column#5 - ├─IndexLookUp_39 0.09 root - │ ├─Selection_37 0.44 cop[tikv] not(isnull(Column#5)) - │ │ └─IndexScan_35 0.44 cop[tikv] table:dt, index:aid, dic, range: decided by [eq(Column#2, Column#21) eq(Column#5, Column#23)], keep order:true - │ └─Selection_38 0.09 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592) - │ └─TableScan_36 0.44 cop[tikv] table:dt, keep order:false - └─TableReader_61 970.00 root data:Selection_60 - └─Selection_60 970.00 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) - └─TableScan_59 2000.00 cop[tikv] table:rr, range:[-inf,+inf], keep order:false + └─IndexJoin_19 428.32 root inner join, inner:IndexLookUp_18, outer key:Column#2, Column#5, inner key:Column#21, Column#23 + ├─TableReader_43 428.32 root data:Selection_42 + │ └─Selection_42 428.32 cop[tikv] eq(Column#18, 0), eq(Column#4, "ios"), gt(Column#9, 1478185592), not(isnull(Column#5)) + │ └─TableScan_41 2000.00 cop[tikv] table:dt, range:[0,+inf], keep order:false + └─IndexLookUp_18 0.48 root + ├─IndexScan_15 1.00 cop[tikv] table:rr, index:aid, dic, range: decided by [eq(Column#21, Column#2) eq(Column#23, Column#5)], keep order:false + └─Selection_17 0.48 cop[tikv] eq(Column#22, "ios"), gt(Column#26, 1478185592) + └─TableScan_16 1.00 cop[tikv] table:rr, keep order:false explain select pc,cr,count(DISTINCT uid) as pay_users,count(oid) as pay_times,sum(am) as am from pp where ps=2 and ppt>=1478188800 and ppt<1478275200 and pi in ('510017','520017') and uid in ('18089709','18090780') group by pc,cr; id count task operator info Projection_5 207.86 root Column#14, Column#16, Column#22, Column#23, Column#24 diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index c51b8117e646e..9c2273719aba0 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -350,13 +350,13 @@ Projection_11 5.00 root Column#12 ├─TableReader_15 5.00 root data:TableScan_14 │ └─TableScan_14 5.00 cop[tikv] table:t, range:[-inf,+inf], keep order:false └─StreamAgg_20 1.00 root funcs:count(1) - └─MergeJoin_62 2.40 root inner join, left key:Column#4, right key:Column#7 - ├─IndexReader_49 2.40 root index:Selection_48 - │ └─Selection_48 2.40 cop[tikv] eq(3, Column#1) - │ └─IndexScan_47 3.00 cop[tikv] table:s, index:b, range:[3,3], keep order:true - └─TableReader_52 4.00 root data:Selection_51 - └─Selection_51 4.00 cop[tikv] eq(3, Column#1) - └─TableScan_50 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:true + └─MergeJoin_51 2.40 root inner join, left key:Column#4, right key:Column#7 + ├─IndexReader_38 2.40 root index:Selection_37 + │ └─Selection_37 2.40 cop[tikv] eq(3, Column#1) + │ └─IndexScan_36 3.00 cop[tikv] table:s, index:b, range:[3,3], keep order:true + └─TableReader_41 4.00 root data:Selection_40 + └─Selection_40 4.00 cop[tikv] eq(3, Column#1) + └─TableScan_39 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:true explain select t.c in (select count(*) from t s left join t t1 on s.a = t1.a where 3 = t.a and s.b = 3) from t; id count task operator info Projection_10 5.00 root Column#12 diff --git a/cmd/explaintest/r/generated_columns.result b/cmd/explaintest/r/generated_columns.result index 7880ca8e9bd99..f425e461d20ad 100644 --- a/cmd/explaintest/r/generated_columns.result +++ b/cmd/explaintest/r/generated_columns.result @@ -76,19 +76,19 @@ IndexJoin_26 5.00 root inner join, inner:IndexLookUp_25, outer key:Column#8, inn │ ├─Selection_24 5.00 cop[tikv] not(isnull(Column#3)) │ │ └─IndexScan_22 5.00 cop[tikv] table:sgc1, index:a, range: decided by [eq(Column#3, Column#8)], keep order:false │ └─TableScan_23 5.00 cop[tikv] table:sgc1, keep order:false -└─TableReader_47 1.00 root data:Selection_46 - └─Selection_46 1.00 cop[tikv] not(isnull(Column#8)) - └─TableScan_45 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false +└─TableReader_38 1.00 root data:Selection_37 + └─Selection_37 1.00 cop[tikv] not(isnull(Column#8)) + └─TableScan_36 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false EXPLAIN SELECT * from sgc1 join sgc2 on sgc1.a=sgc2.a; id count task operator info Projection_6 5.00 root Column#1, Column#2, Column#3, Column#4, Column#6, Column#7, Column#8, Column#9 -└─HashRightJoin_38 5.00 root inner join, inner:TableReader_57, equal:[eq(Column#8, Column#3)] - ├─TableReader_57 1.00 root data:Selection_56 - │ └─Selection_56 1.00 cop[tikv] not(isnull(Column#8)) - │ └─TableScan_55 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false - └─TableReader_66 5.00 root data:Selection_65 - └─Selection_65 5.00 cop[tikv] not(isnull(Column#3)) - └─TableScan_64 5.00 cop[tikv] table:sgc1, range:[-inf,+inf], keep order:false +└─HashRightJoin_24 5.00 root inner join, inner:TableReader_43, equal:[eq(Column#8, Column#3)] + ├─TableReader_43 1.00 root data:Selection_42 + │ └─Selection_42 1.00 cop[tikv] not(isnull(Column#8)) + │ └─TableScan_41 1.00 cop[tikv] table:sgc2, range:[-inf,+inf], keep order:false + └─TableReader_52 5.00 root data:Selection_51 + └─Selection_51 5.00 cop[tikv] not(isnull(Column#3)) + └─TableScan_50 5.00 cop[tikv] table:sgc1, range:[-inf,+inf], keep order:false DROP TABLE IF EXISTS sgc3; CREATE TABLE sgc3 ( j JSON, diff --git a/cmd/explaintest/r/index_join.result b/cmd/explaintest/r/index_join.result index b1d55ebdd3f0f..68c53dbe4f809 100644 --- a/cmd/explaintest/r/index_join.result +++ b/cmd/explaintest/r/index_join.result @@ -13,19 +13,19 @@ IndexJoin_25 5.00 root inner join, inner:IndexLookUp_24, outer key:Column#4, inn │ ├─Selection_23 5.00 cop[tikv] not(isnull(Column#1)) │ │ └─IndexScan_21 5.00 cop[tikv] table:t1, index:a, range: decided by [eq(Column#1, Column#4)], keep order:false │ └─TableScan_22 5.00 cop[tikv] table:t1, keep order:false -└─TableReader_43 1.00 root data:Selection_42 - └─Selection_42 1.00 cop[tikv] not(isnull(Column#4)) - └─TableScan_41 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false +└─TableReader_37 1.00 root data:Selection_36 + └─Selection_36 1.00 cop[tikv] not(isnull(Column#4)) + └─TableScan_35 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false explain select * from t1 join t2 on t1.a=t2.a; id count task operator info Projection_6 5.00 root Column#1, Column#2, Column#4, Column#5 -└─HashRightJoin_37 5.00 root inner join, inner:TableReader_48, equal:[eq(Column#4, Column#1)] - ├─TableReader_48 1.00 root data:Selection_47 - │ └─Selection_47 1.00 cop[tikv] not(isnull(Column#4)) - │ └─TableScan_46 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false - └─TableReader_54 5.00 root data:Selection_53 - └─Selection_53 5.00 cop[tikv] not(isnull(Column#1)) - └─TableScan_52 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:false +└─HashRightJoin_23 5.00 root inner join, inner:TableReader_34, equal:[eq(Column#4, Column#1)] + ├─TableReader_34 1.00 root data:Selection_33 + │ └─Selection_33 1.00 cop[tikv] not(isnull(Column#4)) + │ └─TableScan_32 1.00 cop[tikv] table:t2, range:[-inf,+inf], keep order:false + └─TableReader_40 5.00 root data:Selection_39 + └─Selection_39 5.00 cop[tikv] not(isnull(Column#1)) + └─TableScan_38 5.00 cop[tikv] table:t1, range:[-inf,+inf], keep order:false drop table if exists t1, t2; create table t1(a int not null, b int not null); create table t2(a int not null, b int not null, key a(a)); diff --git a/cmd/explaintest/r/topn_push_down.result b/cmd/explaintest/r/topn_push_down.result index 1a87ca544caa6..97101d3dcfad2 100644 --- a/cmd/explaintest/r/topn_push_down.result +++ b/cmd/explaintest/r/topn_push_down.result @@ -170,11 +170,11 @@ id count task operator info Projection_12 0.00 root Column#47 └─TopN_15 0.00 root Column#47:asc, offset:0, count:5 └─IndexJoin_24 0.00 root inner join, inner:IndexLookUp_23, outer key:Column#1, inner key:Column#41 - ├─IndexLookUp_78 0.00 root - │ ├─Selection_76 0.00 cop[tikv] eq(Column#4, 18), eq(Column#5, 1) - │ │ └─IndexScan_74 10.00 cop[tikv] table:tr, index:shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date, range:[810094178,810094178], keep order:false, stats:pseudo - │ └─Selection_77 0.00 cop[tikv] eq(Column#21, 32314), eq(Column#3, 2) - │ └─TableScan_75 0.00 cop[tikv] table:tr, keep order:false, stats:pseudo + ├─IndexLookUp_67 0.00 root + │ ├─Selection_65 0.00 cop[tikv] eq(Column#4, 18), eq(Column#5, 1) + │ │ └─IndexScan_63 10.00 cop[tikv] table:tr, index:shop_identy, trade_status, business_type, trade_pay_status, trade_type, delivery_type, source, biz_date, range:[810094178,810094178], keep order:false, stats:pseudo + │ └─Selection_66 0.00 cop[tikv] eq(Column#21, 32314), eq(Column#3, 2) + │ └─TableScan_64 0.00 cop[tikv] table:tr, keep order:false, stats:pseudo └─IndexLookUp_23 0.03 root ├─IndexScan_20 1.25 cop[tikv] table:te, index:trade_id, range: decided by [eq(Column#41, Column#1)], keep order:false, stats:pseudo └─Selection_22 0.03 cop[tikv] ge(Column#47, 2018-04-23 00:00:00.000000), le(Column#47, 2018-04-23 23:59:59.000000) diff --git a/cmd/explaintest/r/tpch.result b/cmd/explaintest/r/tpch.result index 3bdaff79aff2c..e5220c8265d68 100644 --- a/cmd/explaintest/r/tpch.result +++ b/cmd/explaintest/r/tpch.result @@ -119,12 +119,12 @@ order by l_returnflag, l_linestatus; id count task operator info -Sort_6 1.00 root Column#26:asc, Column#27:asc -└─Projection_8 1.00 root Column#9, Column#10, Column#18, Column#19, Column#20, Column#21, Column#22, Column#23, Column#24, Column#25 - └─HashAgg_14 1.00 root group by:Column#49, Column#50, funcs:sum(Column#36), sum(Column#37), sum(Column#38), sum(Column#39), avg(Column#40, Column#41), avg(Column#42, Column#43), avg(Column#44, Column#45), count(Column#46), firstrow(Column#49), firstrow(Column#50) - └─TableReader_15 1.00 root data:HashAgg_9 - └─HashAgg_9 1.00 cop[tikv] group by:Column#10, Column#9, funcs:sum(Column#5), sum(Column#6), sum(mul(Column#6, minus(1, Column#7))), sum(mul(mul(Column#6, minus(1, Column#7)), plus(1, Column#8))), count(Column#5), sum(Column#5), count(Column#6), sum(Column#6), count(Column#7), sum(Column#7), count(1) - └─Selection_13 99701931.19 cop[tikv] le(Column#11, 1998-08-15) +Sort_6 2.94 root Column#26:asc, Column#27:asc +└─Projection_8 2.94 root Column#9, Column#10, Column#18, Column#19, Column#20, Column#21, Column#22, Column#23, Column#24, Column#25 + └─HashAgg_14 2.94 root group by:Column#49, Column#50, funcs:sum(Column#36), sum(Column#37), sum(Column#38), sum(Column#39), avg(Column#40, Column#41), avg(Column#42, Column#43), avg(Column#44, Column#45), count(Column#46), firstrow(Column#49), firstrow(Column#50) + └─TableReader_15 2.94 root data:HashAgg_9 + └─HashAgg_9 2.94 cop[tikv] group by:Column#10, Column#9, funcs:sum(Column#5), sum(Column#6), sum(mul(Column#6, minus(1, Column#7))), sum(mul(mul(Column#6, minus(1, Column#7)), plus(1, Column#8))), count(Column#5), sum(Column#5), count(Column#6), sum(Column#6), count(Column#7), sum(Column#7), count(1) + └─Selection_13 293795345.00 cop[tikv] le(Column#11, 1998-08-15) └─TableScan_12 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q2 Minimum Cost Supplier Query @@ -184,13 +184,13 @@ limit 100; id count task operator info Projection_37 100.00 root Column#15, Column#11, Column#24, Column#1, Column#3, Column#12, Column#14, Column#16 └─TopN_40 100.00 root Column#15:desc, Column#24:asc, Column#11:asc, Column#1:asc, offset:0, count:100 - └─HashRightJoin_45 8000.00 root inner join, inner:IndexMergeJoin_55, equal:[eq(Column#1, Column#30) eq(Column#20, Column#50)] - ├─IndexMergeJoin_55 8000.00 root inner join, inner:TableReader_53, outer key:Column#17, inner key:Column#1 - │ ├─HashRightJoin_61 40775.05 root inner join, inner:HashRightJoin_63, equal:[eq(Column#10, Column#18)] - │ │ ├─HashRightJoin_63 500.00 root inner join, inner:HashRightJoin_76, equal:[eq(Column#23, Column#13)] - │ │ │ ├─HashRightJoin_76 0.03 root inner join, inner:TableReader_81, equal:[eq(Column#27, Column#25)] - │ │ │ │ ├─TableReader_81 0.01 root data:Selection_80 - │ │ │ │ │ └─Selection_80 0.01 cop[tikv] eq(Column#28, "ASIA") + └─HashRightJoin_45 155496.00 root inner join, inner:IndexMergeJoin_55, equal:[eq(Column#1, Column#30) eq(Column#20, Column#50)] + ├─IndexMergeJoin_55 155496.00 root inner join, inner:TableReader_53, outer key:Column#17, inner key:Column#1 + │ ├─HashRightJoin_61 8155010.44 root inner join, inner:HashRightJoin_63, equal:[eq(Column#10, Column#18)] + │ │ ├─HashRightJoin_63 100000.00 root inner join, inner:HashRightJoin_76, equal:[eq(Column#23, Column#13)] + │ │ │ ├─HashRightJoin_76 5.00 root inner join, inner:TableReader_81, equal:[eq(Column#27, Column#25)] + │ │ │ │ ├─TableReader_81 1.00 root data:Selection_80 + │ │ │ │ │ └─Selection_80 1.00 cop[tikv] eq(Column#28, "ASIA") │ │ │ │ │ └─TableScan_79 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false │ │ │ │ └─TableReader_78 25.00 root data:TableScan_77 │ │ │ │ └─TableScan_77 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false @@ -198,16 +198,16 @@ Projection_37 100.00 root Column#15, Column#11, Column#24, Column#1, Column#3, C │ │ │ └─TableScan_82 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false │ │ └─TableReader_85 40000000.00 root data:TableScan_84 │ │ └─TableScan_84 40000000.00 cop[tikv] table:partsupp, range:[-inf,+inf], keep order:false - │ └─TableReader_53 0.16 root data:Selection_52 - │ └─Selection_52 0.16 cop[tikv] eq(Column#6, 30), like(Column#5, "%STEEL", 92) - │ └─TableScan_51 0.20 cop[tikv] table:part, range: decided by [Column#17], keep order:true - └─Selection_89 32620.04 root not(isnull(Column#50)) - └─HashAgg_92 40775.05 root group by:Column#30, funcs:min(Column#33), firstrow(Column#30) - └─HashRightJoin_96 40775.05 root inner join, inner:HashRightJoin_98, equal:[eq(Column#36, Column#31)] - ├─HashRightJoin_98 500.00 root inner join, inner:HashRightJoin_111, equal:[eq(Column#43, Column#39)] - │ ├─HashRightJoin_111 0.03 root inner join, inner:TableReader_116, equal:[eq(Column#47, Column#45)] - │ │ ├─TableReader_116 0.01 root data:Selection_115 - │ │ │ └─Selection_115 0.01 cop[tikv] eq(Column#48, "ASIA") + │ └─TableReader_53 0.02 root data:Selection_52 + │ └─Selection_52 0.02 cop[tikv] eq(Column#6, 30), like(Column#5, "%STEEL", 92) + │ └─TableScan_51 0.02 cop[tikv] table:part, range: decided by [Column#17], keep order:true + └─Selection_89 6524008.35 root not(isnull(Column#50)) + └─HashAgg_92 8155010.44 root group by:Column#30, funcs:min(Column#33), firstrow(Column#30) + └─HashRightJoin_96 8155010.44 root inner join, inner:HashRightJoin_98, equal:[eq(Column#36, Column#31)] + ├─HashRightJoin_98 100000.00 root inner join, inner:HashRightJoin_111, equal:[eq(Column#43, Column#39)] + │ ├─HashRightJoin_111 5.00 root inner join, inner:TableReader_116, equal:[eq(Column#47, Column#45)] + │ │ ├─TableReader_116 1.00 root data:Selection_115 + │ │ │ └─Selection_115 1.00 cop[tikv] eq(Column#48, "ASIA") │ │ │ └─TableScan_114 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false │ │ └─TableReader_113 25.00 root data:TableScan_112 │ │ └─TableScan_112 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false @@ -251,19 +251,19 @@ limit 10; id count task operator info Projection_14 10.00 root Column#18, Column#35, Column#13, Column#16 └─TopN_17 10.00 root Column#35:desc, Column#13:asc, offset:0, count:10 - └─HashAgg_23 458118.38 root group by:Column#52, Column#53, Column#54, funcs:sum(Column#48), firstrow(Column#49), firstrow(Column#50), firstrow(Column#51) - └─Projection_81 458118.38 root mul(Column#23, minus(1, Column#24)), Column#13, Column#16, Column#18, Column#18, Column#13, Column#16 - └─IndexHashJoin_38 458118.38 root inner join, inner:IndexLookUp_28, outer key:Column#9, inner key:Column#18 - ├─HashRightJoin_71 113097.88 root inner join, inner:TableReader_77, equal:[eq(Column#1, Column#10)] - │ ├─TableReader_77 7500.00 root data:Selection_76 - │ │ └─Selection_76 7500.00 cop[tikv] eq(Column#7, "AUTOMOBILE") + └─HashAgg_23 40252367.98 root group by:Column#52, Column#53, Column#54, funcs:sum(Column#48), firstrow(Column#49), firstrow(Column#50), firstrow(Column#51) + └─Projection_81 91515927.49 root mul(Column#23, minus(1, Column#24)), Column#13, Column#16, Column#18, Column#18, Column#13, Column#16 + └─IndexHashJoin_38 91515927.49 root inner join, inner:IndexLookUp_28, outer key:Column#9, inner key:Column#18 + ├─HashRightJoin_71 22592975.51 root inner join, inner:TableReader_77, equal:[eq(Column#1, Column#10)] + │ ├─TableReader_77 1498236.00 root data:Selection_76 + │ │ └─Selection_76 1498236.00 cop[tikv] eq(Column#7, "AUTOMOBILE") │ │ └─TableScan_75 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - │ └─TableReader_74 24925000.00 root data:Selection_73 - │ └─Selection_73 24925000.00 cop[tikv] lt(Column#13, 1995-03-13 00:00:00.000000) + │ └─TableReader_74 36870000.00 root data:Selection_73 + │ └─Selection_73 36870000.00 cop[tikv] lt(Column#13, 1995-03-13 00:00:00.000000) │ └─TableScan_72 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false - └─IndexLookUp_28 1.35 root + └─IndexLookUp_28 2.20 root ├─IndexScan_25 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#18, Column#9)], keep order:false - └─Selection_27 1.35 cop[tikv] gt(Column#28, 1995-03-13 00:00:00.000000) + └─Selection_27 2.20 cop[tikv] gt(Column#28, 1995-03-13 00:00:00.000000) └─TableScan_26 4.05 cop[tikv] table:lineitem, keep order:false /* Q4 Order Priority Checking Query @@ -298,9 +298,9 @@ id count task operator info Sort_10 1.00 root Column#44:asc └─Projection_12 1.00 root Column#6, Column#43 └─HashAgg_15 1.00 root group by:Column#6, funcs:count(1), firstrow(Column#6) - └─IndexHashJoin_30 1500000.00 root semi join, inner:IndexLookUp_20, outer key:Column#1, inner key:Column#10 - ├─TableReader_42 1875000.00 root data:Selection_41 - │ └─Selection_41 1875000.00 cop[tikv] ge(Column#5, 1995-01-01 00:00:00.000000), lt(Column#5, 1995-04-01) + └─IndexHashJoin_30 2340750.00 root semi join, inner:IndexLookUp_20, outer key:Column#1, inner key:Column#10 + ├─TableReader_42 2925937.50 root data:Selection_41 + │ └─Selection_41 2925937.50 cop[tikv] ge(Column#5, 1995-01-01 00:00:00.000000), lt(Column#5, 1995-04-01) │ └─TableScan_40 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false └─IndexLookUp_20 3.24 root ├─IndexScan_17 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#10, Column#1)], keep order:false @@ -343,29 +343,29 @@ n_name order by revenue desc; id count task operator info -Sort_23 1.00 root Column#51:desc -└─Projection_25 1.00 root Column#43, Column#49 - └─HashAgg_28 1.00 root group by:Column#59, funcs:sum(Column#57), firstrow(Column#58) - └─Projection_78 151898862.55 root mul(Column#23, minus(1, Column#24)), Column#43, Column#43 - └─HashRightJoin_43 151898862.55 root inner join, inner:HashLeftJoin_44, equal:[eq(Column#35, Column#20) eq(Column#9, Column#18)] - ├─HashLeftJoin_44 37500000.00 root inner join, inner:TableReader_74, equal:[eq(Column#1, Column#10)] - │ ├─HashRightJoin_47 150000000.00 root inner join, inner:HashRightJoin_49, equal:[eq(Column#38, Column#4)] - │ │ ├─HashRightJoin_49 500.00 root inner join, inner:HashRightJoin_62, equal:[eq(Column#42, Column#38)] - │ │ │ ├─HashRightJoin_62 0.03 root inner join, inner:TableReader_67, equal:[eq(Column#46, Column#44)] - │ │ │ │ ├─TableReader_67 0.01 root data:Selection_66 - │ │ │ │ │ └─Selection_66 0.01 cop[tikv] eq(Column#47, "MIDDLE EAST") - │ │ │ │ │ └─TableScan_65 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false - │ │ │ │ └─TableReader_64 25.00 root data:TableScan_63 - │ │ │ │ └─TableScan_63 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false - │ │ │ └─TableReader_69 500000.00 root data:TableScan_68 - │ │ │ └─TableScan_68 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false - │ │ └─TableReader_71 7500000.00 root data:TableScan_70 - │ │ └─TableScan_70 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - │ └─TableReader_74 1875000.00 root data:Selection_73 - │ └─Selection_73 1875000.00 cop[tikv] ge(Column#13, 1994-01-01 00:00:00.000000), lt(Column#13, 1995-01-01) - │ └─TableScan_72 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false - └─TableReader_76 300005811.00 root data:TableScan_75 - └─TableScan_75 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false +Sort_23 5.00 root Column#51:desc +└─Projection_25 5.00 root Column#43, Column#49 + └─HashAgg_28 5.00 root group by:Column#54, funcs:sum(Column#52), firstrow(Column#53) + └─Projection_86 11822812.50 root mul(Column#23, minus(1, Column#24)), Column#43, Column#43 + └─HashLeftJoin_38 11822812.50 root inner join, inner:TableReader_84, equal:[eq(Column#38, Column#4) eq(Column#10, Column#1)] + ├─IndexMergeJoin_49 11822812.50 root inner join, inner:TableReader_47, outer key:Column#18, inner key:Column#9 + │ ├─HashRightJoin_55 61163763.01 root inner join, inner:HashRightJoin_57, equal:[eq(Column#35, Column#20)] + │ │ ├─HashRightJoin_57 100000.00 root inner join, inner:HashRightJoin_70, equal:[eq(Column#42, Column#38)] + │ │ │ ├─HashRightJoin_70 5.00 root inner join, inner:TableReader_75, equal:[eq(Column#46, Column#44)] + │ │ │ │ ├─TableReader_75 1.00 root data:Selection_74 + │ │ │ │ │ └─Selection_74 1.00 cop[tikv] eq(Column#47, "MIDDLE EAST") + │ │ │ │ │ └─TableScan_73 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false + │ │ │ │ └─TableReader_72 25.00 root data:TableScan_71 + │ │ │ │ └─TableScan_71 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false + │ │ │ └─TableReader_77 500000.00 root data:TableScan_76 + │ │ │ └─TableScan_76 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false + │ │ └─TableReader_79 300005811.00 root data:TableScan_78 + │ │ └─TableScan_78 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false + │ └─TableReader_47 0.15 root data:Selection_46 + │ └─Selection_46 0.15 cop[tikv] ge(Column#13, 1994-01-01 00:00:00.000000), lt(Column#13, 1995-01-01) + │ └─TableScan_45 0.19 cop[tikv] table:orders, range: decided by [Column#18], keep order:true + └─TableReader_84 7500000.00 root data:TableScan_83 + └─TableScan_83 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false /* Q6 Forecasting Revenue Change Query This query quantifies the amount of revenue increase that would have resulted from eliminating certain companywide @@ -391,7 +391,7 @@ id count task operator info StreamAgg_20 1.00 root funcs:sum(Column#21) └─TableReader_21 1.00 root data:StreamAgg_9 └─StreamAgg_9 1.00 cop[tikv] funcs:sum(mul(Column#6, Column#7)) - └─Selection_19 62313.71 cop[tikv] ge(Column#11, 1994-01-01 00:00:00.000000), ge(Column#7, 0.05), le(Column#7, 0.07), lt(Column#11, 1995-01-01), lt(Column#5, 24) + └─Selection_19 3713857.91 cop[tikv] ge(Column#11, 1994-01-01 00:00:00.000000), ge(Column#7, 0.05), le(Column#7, 0.07), lt(Column#11, 1995-01-01), lt(Column#5, 24) └─TableScan_18 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q7 Volume Shipping Query @@ -444,29 +444,29 @@ supp_nation, cust_nation, l_year; id count task operator info -Sort_22 63.15 root Column#55:asc, Column#56:asc, Column#57:asc -└─Projection_24 63.15 root Column#50, Column#51, Column#52, Column#54 - └─HashAgg_27 63.15 root group by:Column#50, Column#51, Column#52, funcs:sum(Column#53), firstrow(Column#50), firstrow(Column#51), firstrow(Column#52) - └─Projection_28 1223.28 root Column#43, Column#47, extract("YEAR", Column#18), mul(Column#13, minus(1, Column#14)) - └─HashLeftJoin_40 1223.28 root inner join, inner:TableReader_94, equal:[eq(Column#37, Column#46)], other cond:or(and(eq(Column#43, "JAPAN"), eq(Column#47, "INDIA")), and(eq(Column#43, "INDIA"), eq(Column#47, "JAPAN"))) - ├─IndexMergeJoin_48 611637.63 root inner join, inner:TableReader_46, outer key:Column#26, inner key:Column#34 - │ ├─IndexMergeJoin_60 611637.63 root inner join, inner:TableReader_58, outer key:Column#8, inner key:Column#25 - │ │ ├─HashRightJoin_66 611637.63 root inner join, inner:HashRightJoin_79, equal:[eq(Column#1, Column#10)] - │ │ │ ├─HashRightJoin_79 1000.00 root inner join, inner:TableReader_84, equal:[eq(Column#42, Column#4)] - │ │ │ │ ├─TableReader_84 0.05 root data:Selection_83 - │ │ │ │ │ └─Selection_83 0.05 cop[tikv] or(eq(Column#43, "JAPAN"), eq(Column#43, "INDIA")) +Sort_22 769.96 root Column#55:asc, Column#56:asc, Column#57:asc +└─Projection_24 769.96 root Column#50, Column#51, Column#52, Column#54 + └─HashAgg_27 769.96 root group by:Column#50, Column#51, Column#52, funcs:sum(Column#53), firstrow(Column#50), firstrow(Column#51), firstrow(Column#52) + └─Projection_28 1957240.42 root Column#43, Column#47, extract("YEAR", Column#18), mul(Column#13, minus(1, Column#14)) + └─HashLeftJoin_40 1957240.42 root inner join, inner:TableReader_94, equal:[eq(Column#37, Column#46)], other cond:or(and(eq(Column#43, "JAPAN"), eq(Column#47, "INDIA")), and(eq(Column#43, "INDIA"), eq(Column#47, "JAPAN"))) + ├─HashLeftJoin_51 24465505.20 root inner join, inner:TableReader_91, equal:[eq(Column#26, Column#34)] + │ ├─IndexMergeJoin_60 24465505.20 root inner join, inner:TableReader_58, outer key:Column#8, inner key:Column#25 + │ │ ├─HashRightJoin_66 24465505.20 root inner join, inner:HashRightJoin_79, equal:[eq(Column#1, Column#10)] + │ │ │ ├─HashRightJoin_79 40000.00 root inner join, inner:TableReader_84, equal:[eq(Column#42, Column#4)] + │ │ │ │ ├─TableReader_84 2.00 root data:Selection_83 + │ │ │ │ │ └─Selection_83 2.00 cop[tikv] or(eq(Column#43, "JAPAN"), eq(Column#43, "INDIA")) │ │ │ │ │ └─TableScan_82 25.00 cop[tikv] table:n1, range:[-inf,+inf], keep order:false │ │ │ │ └─TableReader_81 500000.00 root data:TableScan_80 │ │ │ │ └─TableScan_80 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false - │ │ │ └─TableReader_87 7500145.28 root data:Selection_86 - │ │ │ └─Selection_86 7500145.28 cop[tikv] ge(Column#18, 1995-01-01 00:00:00.000000), le(Column#18, 1996-12-31 00:00:00.000000) + │ │ │ └─TableReader_87 91446230.29 root data:Selection_86 + │ │ │ └─Selection_86 91446230.29 cop[tikv] ge(Column#18, 1995-01-01 00:00:00.000000), le(Column#18, 1996-12-31 00:00:00.000000) │ │ │ └─TableScan_85 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false │ │ └─TableReader_58 1.00 root data:TableScan_57 │ │ └─TableScan_57 1.00 cop[tikv] table:orders, range: decided by [Column#8], keep order:true - │ └─TableReader_46 1.00 root data:TableScan_45 - │ └─TableScan_45 1.00 cop[tikv] table:customer, range: decided by [Column#26], keep order:true - └─TableReader_94 0.05 root data:Selection_93 - └─Selection_93 0.05 cop[tikv] or(eq(Column#47, "INDIA"), eq(Column#47, "JAPAN")) + │ └─TableReader_91 7500000.00 root data:TableScan_90 + │ └─TableScan_90 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false + └─TableReader_94 2.00 root data:Selection_93 + └─Selection_93 2.00 cop[tikv] or(eq(Column#47, "INDIA"), eq(Column#47, "JAPAN")) └─TableScan_92 25.00 cop[tikv] table:n2, range:[-inf,+inf], keep order:false /* Q8 National Market Share Query @@ -516,36 +516,36 @@ o_year order by o_year; id count task operator info -Sort_29 60.15 root Column#67:asc -└─Projection_31 60.15 root Column#62, div(Column#65, Column#66) - └─HashAgg_34 60.15 root group by:Column#80, funcs:sum(Column#77), sum(Column#78), firstrow(Column#79) - └─Projection_123 10000.00 root case(eq(Column#64, "INDIA"), Column#63, 0), Column#63, Column#62, Column#62 - └─Projection_35 10000.00 root extract("YEAR", Column#38), mul(Column#22, minus(1, Column#23)), Column#56 - └─HashLeftJoin_45 10000.00 root inner join, inner:TableReader_121, equal:[eq(Column#13, Column#55)] - ├─IndexMergeJoin_53 10000.00 root inner join, inner:TableReader_51, outer key:Column#19, inner key:Column#10 - │ ├─IndexMergeJoin_66 10000.00 root inner join, inner:TableReader_64, outer key:Column#18, inner key:Column#1 - │ │ ├─IndexHashJoin_83 458118.38 root inner join, inner:IndexLookUp_74, outer key:Column#34, inner key:Column#17 - │ │ │ ├─HashRightJoin_87 113097.88 root inner join, inner:HashRightJoin_89, equal:[eq(Column#43, Column#35)] - │ │ │ │ ├─HashRightJoin_89 7500.00 root inner join, inner:HashRightJoin_102, equal:[eq(Column#51, Column#46)] - │ │ │ │ │ ├─HashRightJoin_102 0.03 root inner join, inner:TableReader_107, equal:[eq(Column#59, Column#53)] - │ │ │ │ │ │ ├─TableReader_107 0.01 root data:Selection_106 - │ │ │ │ │ │ │ └─Selection_106 0.01 cop[tikv] eq(Column#60, "ASIA") +Sort_29 719.02 root Column#67:asc +└─Projection_31 719.02 root Column#62, div(Column#65, Column#66) + └─HashAgg_34 719.02 root group by:Column#80, funcs:sum(Column#77), sum(Column#78), firstrow(Column#79) + └─Projection_123 563136.02 root case(eq(Column#64, "INDIA"), Column#63, 0), Column#63, Column#62, Column#62 + └─Projection_35 563136.02 root extract("YEAR", Column#38), mul(Column#22, minus(1, Column#23)), Column#56 + └─HashLeftJoin_45 563136.02 root inner join, inner:TableReader_121, equal:[eq(Column#13, Column#55)] + ├─HashLeftJoin_56 563136.02 root inner join, inner:TableReader_119, equal:[eq(Column#19, Column#10)] + │ ├─HashLeftJoin_69 563136.02 root inner join, inner:TableReader_117, equal:[eq(Column#18, Column#1)] + │ │ ├─IndexHashJoin_83 90788402.51 root inner join, inner:IndexLookUp_74, outer key:Column#34, inner key:Column#17 + │ │ │ ├─HashRightJoin_87 22413367.93 root inner join, inner:HashRightJoin_89, equal:[eq(Column#43, Column#35)] + │ │ │ │ ├─HashRightJoin_89 1500000.00 root inner join, inner:HashRightJoin_102, equal:[eq(Column#51, Column#46)] + │ │ │ │ │ ├─HashRightJoin_102 5.00 root inner join, inner:TableReader_107, equal:[eq(Column#59, Column#53)] + │ │ │ │ │ │ ├─TableReader_107 1.00 root data:Selection_106 + │ │ │ │ │ │ │ └─Selection_106 1.00 cop[tikv] eq(Column#60, "ASIA") │ │ │ │ │ │ │ └─TableScan_105 5.00 cop[tikv] table:region, range:[-inf,+inf], keep order:false │ │ │ │ │ │ └─TableReader_104 25.00 root data:TableScan_103 │ │ │ │ │ │ └─TableScan_103 25.00 cop[tikv] table:n1, range:[-inf,+inf], keep order:false │ │ │ │ │ └─TableReader_109 7500000.00 root data:TableScan_108 │ │ │ │ │ └─TableScan_108 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - │ │ │ │ └─TableReader_112 1875000.00 root data:Selection_111 - │ │ │ │ └─Selection_111 1875000.00 cop[tikv] ge(Column#38, 1995-01-01 00:00:00.000000), le(Column#38, 1996-12-31 00:00:00.000000) + │ │ │ │ └─TableReader_112 22413367.93 root data:Selection_111 + │ │ │ │ └─Selection_111 22413367.93 cop[tikv] ge(Column#38, 1995-01-01 00:00:00.000000), le(Column#38, 1996-12-31 00:00:00.000000) │ │ │ │ └─TableScan_110 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false │ │ │ └─IndexLookUp_74 4.05 root │ │ │ ├─IndexScan_72 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#17, Column#34)], keep order:false │ │ │ └─TableScan_73 4.05 cop[tikv] table:lineitem, keep order:false - │ │ └─TableReader_64 0.02 root data:Selection_63 - │ │ └─Selection_63 0.02 cop[tikv] eq(Column#5, "SMALL PLATED COPPER") - │ │ └─TableScan_62 0.02 cop[tikv] table:part, range: decided by [Column#18], keep order:true - │ └─TableReader_51 1.00 root data:TableScan_50 - │ └─TableScan_50 1.00 cop[tikv] table:supplier, range: decided by [Column#19], keep order:true + │ │ └─TableReader_117 61674.00 root data:Selection_116 + │ │ └─Selection_116 61674.00 cop[tikv] eq(Column#5, "SMALL PLATED COPPER") + │ │ └─TableScan_115 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false + │ └─TableReader_119 500000.00 root data:TableScan_118 + │ └─TableScan_118 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false └─TableReader_121 25.00 root data:TableScan_120 └─TableScan_120 25.00 cop[tikv] table:n2, range:[-inf,+inf], keep order:false /* @@ -660,23 +660,23 @@ limit 20; id count task operator info Projection_17 20.00 root Column#1, Column#2, Column#39, Column#6, Column#36, Column#3, Column#5, Column#8 └─TopN_20 20.00 root Column#39:desc, offset:0, count:20 - └─HashAgg_26 300005.81 root group by:Column#61, Column#62, Column#63, Column#64, Column#65, Column#66, Column#67, funcs:sum(Column#53), firstrow(Column#54), firstrow(Column#55), firstrow(Column#56), firstrow(Column#57), firstrow(Column#58), firstrow(Column#59), firstrow(Column#60) - └─Projection_67 300005.81 root mul(Column#23, minus(1, Column#24)), Column#1, Column#2, Column#3, Column#5, Column#6, Column#8, Column#36, Column#1, Column#2, Column#6, Column#5, Column#36, Column#3, Column#8 - └─IndexMergeJoin_39 300005.81 root inner join, inner:Projection_37, outer key:Column#9, inner key:Column#18 - ├─HashLeftJoin_44 1875000.00 root inner join, inner:TableReader_63, equal:[eq(Column#1, Column#10)] + └─HashAgg_26 3017307.69 root group by:Column#61, Column#62, Column#63, Column#64, Column#65, Column#66, Column#67, funcs:sum(Column#53), firstrow(Column#54), firstrow(Column#55), firstrow(Column#56), firstrow(Column#57), firstrow(Column#58), firstrow(Column#59), firstrow(Column#60) + └─Projection_67 12222016.17 root mul(Column#23, minus(1, Column#24)), Column#1, Column#2, Column#3, Column#5, Column#6, Column#8, Column#36, Column#1, Column#2, Column#6, Column#5, Column#36, Column#3, Column#8 + └─IndexMergeJoin_39 12222016.17 root inner join, inner:Projection_37, outer key:Column#9, inner key:Column#18 + ├─HashLeftJoin_44 3017307.69 root inner join, inner:TableReader_63, equal:[eq(Column#1, Column#10)] │ ├─HashRightJoin_56 7500000.00 root inner join, inner:TableReader_60, equal:[eq(Column#35, Column#4)] │ │ ├─TableReader_60 25.00 root data:TableScan_59 │ │ │ └─TableScan_59 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ │ └─TableReader_58 7500000.00 root data:TableScan_57 │ │ └─TableScan_57 7500000.00 cop[tikv] table:customer, range:[-inf,+inf], keep order:false - │ └─TableReader_63 1875000.00 root data:Selection_62 - │ └─Selection_62 1875000.00 cop[tikv] ge(Column#13, 1993-08-01 00:00:00.000000), lt(Column#13, 1993-11-01) + │ └─TableReader_63 3017307.69 root data:Selection_62 + │ └─Selection_62 3017307.69 cop[tikv] ge(Column#13, 1993-08-01 00:00:00.000000), lt(Column#13, 1993-11-01) │ └─TableScan_61 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false - └─Projection_37 0.00 root Column#18, Column#23, Column#24, Column#26 - └─IndexLookUp_36 0.00 root - ├─IndexScan_33 0.16 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#18, Column#9)], keep order:true - └─Selection_35 0.00 cop[tikv] eq(Column#26, "R") - └─TableScan_34 0.16 cop[tikv] table:lineitem, keep order:false + └─Projection_37 1.00 root Column#18, Column#23, Column#24, Column#26 + └─IndexLookUp_36 1.00 root + ├─IndexScan_33 4.05 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#18, Column#9)], keep order:true + └─Selection_35 1.00 cop[tikv] eq(Column#26, "R") + └─TableScan_34 4.05 cop[tikv] table:lineitem, keep order:false /* Q11 Important Stock Identification Query This query finds the most important subset of suppliers' stock in a given nation. @@ -713,15 +713,15 @@ and n_name = 'MOZAMBIQUE' order by value desc; id count task operator info -Projection_57 32620.04 root Column#1, Column#18 -└─Sort_58 32620.04 root Column#18:desc - └─Selection_60 32620.04 root gt(Column#18, NULL) - └─HashAgg_63 40775.05 root group by:Column#49, funcs:sum(Column#47), firstrow(Column#48) - └─Projection_89 40775.05 root mul(Column#4, cast(Column#3)), Column#1, Column#1 - └─HashRightJoin_67 40775.05 root inner join, inner:HashRightJoin_80, equal:[eq(Column#7, Column#2)] - ├─HashRightJoin_80 500.00 root inner join, inner:TableReader_85, equal:[eq(Column#14, Column#10)] - │ ├─TableReader_85 0.03 root data:Selection_84 - │ │ └─Selection_84 0.03 cop[tikv] eq(Column#15, "MOZAMBIQUE") +Projection_57 1304801.67 root Column#1, Column#18 +└─Sort_58 1304801.67 root Column#18:desc + └─Selection_60 1304801.67 root gt(Column#18, NULL) + └─HashAgg_63 1631002.09 root group by:Column#49, funcs:sum(Column#47), firstrow(Column#48) + └─Projection_89 1631002.09 root mul(Column#4, cast(Column#3)), Column#1, Column#1 + └─HashRightJoin_67 1631002.09 root inner join, inner:HashRightJoin_80, equal:[eq(Column#7, Column#2)] + ├─HashRightJoin_80 20000.00 root inner join, inner:TableReader_85, equal:[eq(Column#14, Column#10)] + │ ├─TableReader_85 1.00 root data:Selection_84 + │ │ └─Selection_84 1.00 cop[tikv] eq(Column#15, "MOZAMBIQUE") │ │ └─TableScan_83 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ └─TableReader_82 500000.00 root data:TableScan_81 │ └─TableScan_81 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false @@ -769,16 +769,14 @@ l_shipmode; id count task operator info Sort_9 1.00 root Column#29:asc └─Projection_11 1.00 root Column#24, Column#27, Column#28 - └─HashAgg_14 1.00 root group by:Column#43, funcs:sum(Column#40), sum(Column#41), firstrow(Column#42) - └─Projection_54 12000.23 root cast(case(or(eq(Column#6, "1-URGENT"), eq(Column#6, "2-HIGH")), 1, 0)), cast(case(and(ne(Column#6, "1-URGENT"), ne(Column#6, "2-HIGH")), 1, 0)), Column#24, Column#24 - └─IndexMergeJoin_36 12000.23 root inner join, inner:Projection_34, outer key:Column#1, inner key:Column#10 - ├─Projection_34 0.00 root Column#10, Column#20, Column#21, Column#22, Column#24 - │ └─IndexLookUp_33 0.00 root - │ ├─IndexScan_30 0.00 cop[tikv] table:lineitem, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#10, Column#1)], keep order:true - │ └─Selection_32 0.00 cop[tikv] ge(Column#22, 1997-01-01 00:00:00.000000), in(Column#24, "RAIL", "FOB"), lt(Column#20, Column#21), lt(Column#21, Column#22), lt(Column#22, 1998-01-01) - │ └─TableScan_31 0.00 cop[tikv] table:lineitem, keep order:false - └─TableReader_52 75000000.00 root data:TableScan_51 - └─TableScan_51 75000000.00 cop[tikv] table:orders, range:[-inf,+inf], keep order:false + └─HashAgg_14 1.00 root group by:Column#38, funcs:sum(Column#35), sum(Column#36), firstrow(Column#37) + └─Projection_40 10023369.01 root cast(case(or(eq(Column#6, "1-URGENT"), eq(Column#6, "2-HIGH")), 1, 0)), cast(case(and(ne(Column#6, "1-URGENT"), ne(Column#6, "2-HIGH")), 1, 0)), Column#24, Column#24 + └─IndexMergeJoin_22 10023369.01 root inner join, inner:TableReader_20, outer key:Column#10, inner key:Column#1 + ├─TableReader_36 10023369.01 root data:Selection_35 + │ └─Selection_35 10023369.01 cop[tikv] ge(Column#22, 1997-01-01 00:00:00.000000), in(Column#24, "RAIL", "FOB"), lt(Column#20, Column#21), lt(Column#21, Column#22), lt(Column#22, 1998-01-01) + │ └─TableScan_34 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false + └─TableReader_20 1.00 root data:TableScan_19 + └─TableScan_19 1.00 cop[tikv] table:orders, range: decided by [Column#10], keep order:true /* Q13 Customer Distribution Query This query seeks relationships between customers and the size of their orders. @@ -842,14 +840,14 @@ and l_shipdate >= '1996-12-01' and l_shipdate < date_add('1996-12-01', interval '1' month); id count task operator info Projection_8 1.00 root div(mul(100.00, Column#27), Column#28) -└─HashAgg_11 1.00 root funcs:sum(Column#31), sum(Column#32) - └─Projection_41 7500145.28 root case(like(Column#22, "PROMO%", 92), mul(Column#6, minus(1, Column#7)), 0), mul(Column#6, minus(1, Column#7)) - └─HashRightJoin_24 7500145.28 root inner join, inner:TableReader_27, equal:[eq(Column#2, Column#18)] - ├─TableReader_27 7500145.28 root data:Selection_26 - │ └─Selection_26 7500145.28 cop[tikv] ge(Column#11, 1996-12-01 00:00:00.000000), lt(Column#11, 1997-01-01) +└─StreamAgg_13 1.00 root funcs:sum(Column#31), sum(Column#32) + └─Projection_41 4121984.49 root case(like(Column#22, "PROMO%", 92), mul(Column#6, minus(1, Column#7)), 0), mul(Column#6, minus(1, Column#7)) + └─IndexMergeJoin_36 4121984.49 root inner join, inner:TableReader_34, outer key:Column#2, inner key:Column#18 + ├─TableReader_27 4121984.49 root data:Selection_26 + │ └─Selection_26 4121984.49 cop[tikv] ge(Column#11, 1996-12-01 00:00:00.000000), lt(Column#11, 1997-01-01) │ └─TableScan_25 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false - └─TableReader_29 10000000.00 root data:TableScan_28 - └─TableScan_28 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false + └─TableReader_34 1.00 root data:TableScan_33 + └─TableScan_33 1.00 cop[tikv] table:part, range: decided by [Column#2], keep order:true /* Q15 Top Supplier Query This query determines the top supplier so it can be rewarded, given more business, or identified for special recognition. @@ -930,19 +928,19 @@ p_brand, p_type, p_size; id count task operator info -Sort_13 137109.51 root Column#28:desc, Column#25:asc, Column#26:asc, Column#27:asc -└─Projection_15 137109.51 root Column#10, Column#11, Column#12, Column#24 - └─HashAgg_18 137109.51 root group by:Column#10, Column#11, Column#12, funcs:count(distinct Column#2), firstrow(Column#10), firstrow(Column#11), firstrow(Column#12) - └─IndexHashJoin_29 137109.51 root anti semi join, inner:TableReader_21, outer key:Column#2, inner key:Column#16 - ├─IndexMergeJoin_38 171386.89 root inner join, inner:IndexReader_36, outer key:Column#7, inner key:Column#1 - │ ├─TableReader_61 42602.67 root data:Selection_60 - │ │ └─Selection_60 42602.67 cop[tikv] in(Column#12, 48, 19, 12, 4, 41, 7, 21, 39), ne(Column#10, "Brand#34"), not(like(Column#11, "LARGE BRUSHED%", 92)) - │ │ └─TableScan_59 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false +Sort_13 3863988.24 root Column#28:desc, Column#25:asc, Column#26:asc, Column#27:asc +└─Projection_15 3863988.24 root Column#10, Column#11, Column#12, Column#24 + └─HashAgg_18 3863988.24 root group by:Column#10, Column#11, Column#12, funcs:count(distinct Column#2), firstrow(Column#10), firstrow(Column#11), firstrow(Column#12) + └─HashLeftJoin_30 3863988.24 root anti semi join, inner:TableReader_57, equal:[eq(Column#2, Column#16)] + ├─IndexMergeJoin_38 4829985.30 root inner join, inner:IndexReader_36, outer key:Column#7, inner key:Column#1 + │ ├─TableReader_50 1200618.43 root data:Selection_49 + │ │ └─Selection_49 1200618.43 cop[tikv] in(Column#12, 48, 19, 12, 4, 41, 7, 21, 39), ne(Column#10, "Brand#34"), not(like(Column#11, "LARGE BRUSHED%", 92)) + │ │ └─TableScan_48 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─IndexReader_36 4.02 root index:IndexScan_35 │ └─IndexScan_35 4.02 cop[tikv] table:partsupp, index:PS_PARTKEY, PS_SUPPKEY, range: decided by [eq(Column#1, Column#7)], keep order:true - └─TableReader_21 0.80 root data:Selection_20 - └─Selection_20 0.80 cop[tikv] like(Column#22, "%Customer%Complaints%", 92) - └─TableScan_19 1.00 cop[tikv] table:supplier, range: decided by [Column#2], keep order:false + └─TableReader_57 400000.00 root data:Selection_56 + └─Selection_56 400000.00 cop[tikv] like(Column#22, "%Customer%Complaints%", 92) + └─TableScan_55 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false /* Q17 Small-Quantity-Order Revenue Query This query determines how much average yearly revenue would be lost if orders were no longer filled for small @@ -973,12 +971,12 @@ l_partkey = p_partkey ); id count task operator info Projection_16 1.00 root div(Column#46, 7.0) -└─HashAgg_19 1.00 root funcs:sum(Column#6) - └─Projection_22 301.72 root Column#2, Column#5, Column#6, Column#18, Column#21, Column#24, mul(0.2, Column#44) - └─HashRightJoin_24 301.72 root inner join, inner:HashRightJoin_37, equal:[eq(Column#18, Column#28)], other cond:lt(Column#5, mul(0.2, Column#44)) - ├─HashRightJoin_37 301.72 root inner join, inner:TableReader_42, equal:[eq(Column#18, Column#2)] - │ ├─TableReader_42 10.00 root data:Selection_41 - │ │ └─Selection_41 10.00 cop[tikv] eq(Column#21, "Brand#44"), eq(Column#24, "WRAP PKG") +└─StreamAgg_21 1.00 root funcs:sum(Column#6) + └─Projection_51 293773.83 root Column#2, Column#5, Column#6, Column#18, Column#21, Column#24, mul(0.2, Column#44) + └─HashRightJoin_53 293773.83 root inner join, inner:HashRightJoin_37, equal:[eq(Column#18, Column#28)], other cond:lt(Column#5, mul(0.2, Column#44)) + ├─HashRightJoin_37 293773.83 root inner join, inner:TableReader_42, equal:[eq(Column#18, Column#2)] + │ ├─TableReader_42 9736.49 root data:Selection_41 + │ │ └─Selection_41 9736.49 cop[tikv] eq(Column#21, "Brand#44"), eq(Column#24, "WRAP PKG") │ │ └─TableScan_40 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─TableReader_39 300005811.00 root data:TableScan_38 │ └─TableScan_38 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false @@ -1092,15 +1090,15 @@ and l_shipmode in ('AIR', 'AIR REG') and l_shipinstruct = 'DELIVER IN PERSON' ); id count task operator info -HashAgg_11 1.00 root funcs:sum(Column#29) -└─Projection_46 45.00 root mul(Column#6, minus(1, Column#7)) - └─IndexMergeJoin_22 45.00 root inner join, inner:TableReader_20, outer key:Column#2, inner key:Column#18, other cond:or(and(and(eq(Column#21, "Brand#52"), in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(Column#5, 4), and(le(Column#5, 14), le(Column#23, 5)))), or(and(and(eq(Column#21, "Brand#11"), in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(Column#5, 18), and(le(Column#5, 28), le(Column#23, 10)))), and(and(eq(Column#21, "Brand#51"), in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(Column#5, 29), and(le(Column#5, 39), le(Column#23, 15)))))) - ├─TableReader_29 45.00 root data:Selection_28 - │ └─Selection_28 45.00 cop[tikv] eq(Column#14, "DELIVER IN PERSON"), in(Column#15, "AIR", "AIR REG"), or(and(ge(Column#5, 4), le(Column#5, 14)), or(and(ge(Column#5, 18), le(Column#5, 28)), and(ge(Column#5, 29), le(Column#5, 39)))) +StreamAgg_13 1.00 root funcs:sum(Column#29) +└─Projection_46 6286493.79 root mul(Column#6, minus(1, Column#7)) + └─IndexMergeJoin_41 6286493.79 root inner join, inner:TableReader_39, outer key:Column#2, inner key:Column#18, other cond:or(and(and(eq(Column#21, "Brand#52"), in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(Column#5, 4), and(le(Column#5, 14), le(Column#23, 5)))), or(and(and(eq(Column#21, "Brand#11"), in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(Column#5, 18), and(le(Column#5, 28), le(Column#23, 10)))), and(and(eq(Column#21, "Brand#51"), in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(Column#5, 29), and(le(Column#5, 39), le(Column#23, 15)))))) + ├─TableReader_29 6286493.79 root data:Selection_28 + │ └─Selection_28 6286493.79 cop[tikv] eq(Column#14, "DELIVER IN PERSON"), in(Column#15, "AIR", "AIR REG"), or(and(ge(Column#5, 4), le(Column#5, 14)), or(and(ge(Column#5, 18), le(Column#5, 28)), and(ge(Column#5, 29), le(Column#5, 39)))) │ └─TableScan_27 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false - └─TableReader_20 0.80 root data:Selection_19 - └─Selection_19 0.80 cop[tikv] ge(Column#23, 1), or(and(eq(Column#21, "Brand#52"), and(in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(Column#23, 5))), or(and(eq(Column#21, "Brand#11"), and(in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(Column#23, 10))), and(eq(Column#21, "Brand#51"), and(in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(Column#23, 15))))) - └─TableScan_18 1.00 cop[tikv] table:part, range: decided by [Column#2], keep order:true + └─TableReader_39 0.80 root data:Selection_38 + └─Selection_38 0.80 cop[tikv] ge(Column#23, 1), or(and(eq(Column#21, "Brand#52"), and(in(Column#24, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(Column#23, 5))), or(and(eq(Column#21, "Brand#11"), and(in(Column#24, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(Column#23, 10))), and(eq(Column#21, "Brand#51"), and(in(Column#24, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(Column#23, 15))))) + └─TableScan_37 1.00 cop[tikv] table:part, range: decided by [Column#2], keep order:true /* Q20 Potential Part Promotion Query The Potential Part Promotion Query identifies suppliers in a particular nation having selected parts that may be candidates @@ -1148,30 +1146,30 @@ and n_name = 'ALGERIA' order by s_name; id count task operator info -Sort_28 500.00 root Column#48:asc -└─Projection_30 500.00 root Column#2, Column#3 - └─HashRightJoin_32 500.00 root inner join, inner:HashRightJoin_45, equal:[eq(Column#1, Column#13)] - ├─HashRightJoin_45 500.00 root inner join, inner:TableReader_50, equal:[eq(Column#8, Column#4)] - │ ├─TableReader_50 0.03 root data:Selection_49 - │ │ └─Selection_49 0.03 cop[tikv] eq(Column#9, "ALGERIA") +Sort_28 20000.00 root Column#48:asc +└─Projection_30 20000.00 root Column#2, Column#3 + └─HashRightJoin_32 20000.00 root inner join, inner:HashRightJoin_45, equal:[eq(Column#1, Column#13)] + ├─HashRightJoin_45 20000.00 root inner join, inner:TableReader_50, equal:[eq(Column#8, Column#4)] + │ ├─TableReader_50 1.00 root data:Selection_49 + │ │ └─Selection_49 1.00 cop[tikv] eq(Column#9, "ALGERIA") │ │ └─TableScan_48 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ └─TableReader_47 500000.00 root data:TableScan_46 │ └─TableScan_46 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false - └─HashAgg_53 200000.00 root group by:Column#13, funcs:firstrow(Column#13) - └─Projection_54 200000.00 root Column#12, Column#13, Column#14, Column#18, mul(0.5, Column#45) - └─Selection_55 200000.00 root gt(cast(Column#14), mul(0.5, Column#45)) - └─HashAgg_58 250000.00 root group by:Column#12, Column#13, funcs:firstrow(Column#12), firstrow(Column#13), firstrow(Column#14), firstrow(Column#18), sum(Column#32) - └─HashLeftJoin_62 7500145.28 root left outer join, inner:IndexHashJoin_75 (REVERSED), equal:[eq(Column#12, Column#29) eq(Column#13, Column#30)] - ├─IndexHashJoin_75 1005728.63 root inner join, inner:IndexLookUp_66, outer key:Column#18, inner key:Column#12 - │ ├─TableReader_98 250000.00 root data:Selection_97 - │ │ └─Selection_97 250000.00 cop[tikv] like(Column#19, "green%", 92) - │ │ └─TableScan_96 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false + └─HashAgg_53 64006.34 root group by:Column#13, funcs:firstrow(Column#13) + └─Projection_54 64006.34 root Column#12, Column#13, Column#14, Column#18, mul(0.5, Column#45) + └─Selection_55 64006.34 root gt(cast(Column#14), mul(0.5, Column#45)) + └─HashAgg_58 80007.93 root group by:Column#12, Column#13, funcs:firstrow(Column#12), firstrow(Column#13), firstrow(Column#14), firstrow(Column#18), sum(Column#32) + └─HashLeftJoin_62 9711455.06 root left outer join, inner:IndexHashJoin_75 (REVERSED), equal:[eq(Column#12, Column#29) eq(Column#13, Column#30)] + ├─IndexHashJoin_75 321865.05 root inner join, inner:IndexLookUp_66, outer key:Column#18, inner key:Column#12 + │ ├─TableReader_87 80007.93 root data:Selection_86 + │ │ └─Selection_86 80007.93 cop[tikv] like(Column#19, "green%", 92) + │ │ └─TableScan_85 10000000.00 cop[tikv] table:part, range:[-inf,+inf], keep order:false │ └─IndexLookUp_66 4.02 root │ ├─IndexScan_64 4.02 cop[tikv] table:partsupp, index:PS_PARTKEY, PS_SUPPKEY, range: decided by [eq(Column#12, Column#18)], keep order:false │ └─TableScan_65 4.02 cop[tikv] table:partsupp, keep order:false - └─TableReader_103 7500145.28 root data:Selection_102 - └─Selection_102 7500145.28 cop[tikv] ge(Column#38, 1993-01-01 00:00:00.000000), lt(Column#38, 1994-01-01) - └─TableScan_101 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false + └─TableReader_92 44189356.65 root data:Selection_91 + └─Selection_91 44189356.65 cop[tikv] ge(Column#38, 1993-01-01 00:00:00.000000), lt(Column#38, 1994-01-01) + └─TableScan_90 300005811.00 cop[tikv] table:lineitem, range:[-inf,+inf], keep order:false /* Q21 Suppliers Who Kept Orders Waiting Query This query identifies certain suppliers who were not able to ship required parts in a timely manner. @@ -1224,22 +1222,22 @@ id count task operator info Projection_25 1.00 root Column#2, Column#104 └─TopN_28 1.00 root Column#104:desc, Column#2:asc, offset:0, count:100 └─HashAgg_34 1.00 root group by:Column#2, funcs:count(1), firstrow(Column#2) - └─IndexHashJoin_49 48000.00 root anti semi join, inner:IndexLookUp_39, outer key:Column#8, inner key:Column#71, other cond:ne(Column#73, Column#10) - ├─IndexHashJoin_88 60000.00 root semi join, inner:IndexLookUp_79, outer key:Column#8, inner key:Column#38, other cond:ne(Column#40, Column#1), ne(Column#40, Column#10) - │ ├─IndexMergeJoin_99 75000.00 root inner join, inner:TableReader_97, outer key:Column#8, inner key:Column#25 - │ │ ├─HashRightJoin_105 305818.82 root inner join, inner:HashRightJoin_118, equal:[eq(Column#1, Column#10)] - │ │ │ ├─HashRightJoin_118 500.00 root inner join, inner:TableReader_123, equal:[eq(Column#34, Column#4)] - │ │ │ │ ├─TableReader_123 0.03 root data:Selection_122 - │ │ │ │ │ └─Selection_122 0.03 cop[tikv] eq(Column#35, "EGYPT") + └─IndexHashJoin_49 7828961.66 root anti semi join, inner:IndexLookUp_39, outer key:Column#8, inner key:Column#71, other cond:ne(Column#73, Column#10) + ├─IndexHashJoin_88 9786202.08 root semi join, inner:IndexLookUp_79, outer key:Column#8, inner key:Column#38, other cond:ne(Column#40, Column#1), ne(Column#40, Column#10) + │ ├─IndexMergeJoin_99 12232752.60 root inner join, inner:TableReader_97, outer key:Column#8, inner key:Column#25 + │ │ ├─HashRightJoin_105 12232752.60 root inner join, inner:HashRightJoin_118, equal:[eq(Column#1, Column#10)] + │ │ │ ├─HashRightJoin_118 20000.00 root inner join, inner:TableReader_123, equal:[eq(Column#34, Column#4)] + │ │ │ │ ├─TableReader_123 1.00 root data:Selection_122 + │ │ │ │ │ └─Selection_122 1.00 cop[tikv] eq(Column#35, "EGYPT") │ │ │ │ │ └─TableScan_121 25.00 cop[tikv] table:nation, range:[-inf,+inf], keep order:false │ │ │ │ └─TableReader_120 500000.00 root data:TableScan_119 │ │ │ │ └─TableScan_119 500000.00 cop[tikv] table:supplier, range:[-inf,+inf], keep order:false │ │ │ └─TableReader_126 240004648.80 root data:Selection_125 │ │ │ └─Selection_125 240004648.80 cop[tikv] gt(Column#20, Column#19) │ │ │ └─TableScan_124 300005811.00 cop[tikv] table:l1, range:[-inf,+inf], keep order:false - │ │ └─TableReader_97 0.20 root data:Selection_96 - │ │ └─Selection_96 0.20 cop[tikv] eq(Column#27, "F") - │ │ └─TableScan_95 0.25 cop[tikv] table:orders, range: decided by [Column#8], keep order:true + │ │ └─TableReader_97 0.80 root data:Selection_96 + │ │ └─Selection_96 0.80 cop[tikv] eq(Column#27, "F") + │ │ └─TableScan_95 1.00 cop[tikv] table:orders, range: decided by [Column#8], keep order:true │ └─IndexLookUp_79 4.05 root │ ├─IndexScan_77 4.05 cop[tikv] table:l2, index:L_ORDERKEY, L_LINENUMBER, range: decided by [eq(Column#38, Column#8)], keep order:false │ └─TableScan_78 4.05 cop[tikv] table:l2, keep order:false diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index d954eea19b94c..596c791bc6260 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -1241,10 +1241,18 @@ func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJ } } } - if len(forcedLeftOuterJoins) != 0 && (!supportRightOuter || forceLeftOuter && !forceRightOuter) { - return forcedLeftOuterJoins, forceLeftOuter - } else if !supportRightOuter { + switch { + case p.JoinType == InnerJoin && p.Children()[0].statsInfo().Count() < p.Children()[1].statsInfo().Count(): + if len(forcedLeftOuterJoins) != 0 { + return forcedLeftOuterJoins, forceLeftOuter + } + if len(allLeftOuterJoins) != 0 { + return allLeftOuterJoins, forceLeftOuter + } + case len(forcedLeftOuterJoins) == 0 && !supportRightOuter: return allLeftOuterJoins, false + case len(forcedLeftOuterJoins) != 0 && (!supportRightOuter || forceLeftOuter && !forceRightOuter): + return forcedLeftOuterJoins, forceLeftOuter } } if supportRightOuter { @@ -1266,10 +1274,18 @@ func (p *LogicalJoin) tryToGetIndexJoin(prop *property.PhysicalProperty) (indexJ } } } - if len(forcedRightOuterJoins) != 0 && (!supportLeftOuter || forceRightOuter && !forceLeftOuter) { - return forcedRightOuterJoins, forceRightOuter - } else if !supportLeftOuter { + switch { + case p.JoinType == InnerJoin && p.Children()[0].statsInfo().Count() > p.Children()[1].statsInfo().Count(): + if len(forcedRightOuterJoins) != 0 { + return forcedRightOuterJoins, forceRightOuter + } + if len(allRightOuterJoins) != 0 { + return allRightOuterJoins, forceRightOuter + } + case len(forcedRightOuterJoins) == 0 && !supportLeftOuter: return allRightOuterJoins, false + case len(forcedRightOuterJoins) != 0 && (!supportLeftOuter || forceRightOuter && !forceLeftOuter): + return forcedRightOuterJoins, forceRightOuter } } diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 34c2172dbefa4..e231ce93ea290 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -55,7 +55,7 @@ const ( HintSMJ = "sm_join" // TiDBIndexNestedLoopJoin is hint enforce index nested loop join. TiDBIndexNestedLoopJoin = "tidb_inlj" - // HintINLJ is hint enforce index nested loop hash/sort merge join. + // HintINLJ is hint enforce index nested loop join. HintINLJ = "inl_join" // HintINLHJ is hint enforce index nested loop hash join. HintINLHJ = "inl_hash_join" @@ -408,12 +408,7 @@ func (p *LogicalJoin) setPreferredJoinType(hintInfo *tableHintInfo) { p.hintInfo = hintInfo } - // If there're multiple join types and at least one of them is not index - // join hint, then there must exist conflict of join types. - mask := preferRightAsINLJInner ^ preferLeftAsINLJInner ^ - preferRightAsINLHJInner ^ preferLeftAsINLHJInner ^ - preferRightAsINLMJInner ^ preferLeftAsINLMJInner - if onesCount := bits.OnesCount(p.preferJoinType & ^mask); onesCount > 1 || onesCount == 1 && p.preferJoinType&mask > 0 { + if containDifferentJoinTypes(p.preferJoinType) { errMsg := "Join hints are conflict, you can only specify one type of join" warning := ErrInternal.GenWithStack(errMsg) p.ctx.GetSessionVars().StmtCtx.AppendWarning(warning) @@ -3996,3 +3991,29 @@ func getInnerFromParenthesesAndUnaryPlus(expr ast.ExprNode) ast.ExprNode { } return expr } + +// containDifferentJoinTypes checks whether `preferJoinType` contains different +// join types. +func containDifferentJoinTypes(preferJoinType uint) bool { + inlMask := preferRightAsINLJInner ^ preferLeftAsINLJInner + inlhjMask := preferRightAsINLHJInner ^ preferLeftAsINLHJInner + inlmjMask := preferRightAsINLMJInner ^ preferLeftAsINLMJInner + + mask := inlMask ^ inlhjMask ^ inlmjMask + onesCount := bits.OnesCount(preferJoinType & ^mask) + if onesCount > 1 || onesCount == 1 && preferJoinType&mask > 0 { + return true + } + + cnt := 0 + if preferJoinType&inlMask > 0 { + cnt++ + } + if preferJoinType&inlhjMask > 0 { + cnt++ + } + if preferJoinType&inlmjMask > 0 { + cnt++ + } + return cnt > 1 +} diff --git a/planner/core/physical_plan_test.go b/planner/core/physical_plan_test.go index 9ebd2bf29e6ba..96fdc971c3ccb 100644 --- a/planner/core/physical_plan_test.go +++ b/planner/core/physical_plan_test.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/util/testleak" "github.com/pingcap/tidb/util/testutil" + "github.com/sirupsen/logrus" ) var _ = Suite(&testPlanSuite{}) @@ -684,6 +685,7 @@ func (s *testPlanSuite) TestHintScope(c *C) { stmt, err := s.ParseOneStmt(test, "", "") c.Assert(err, IsNil, comment) + logrus.Warning("test:------", test) p, _, err := planner.Optimize(context.Background(), se, stmt, s.is) c.Assert(err, IsNil) s.testData.OnRecord(func() { From 283632f29f4389e97224d1270498991e33442f66 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Tue, 12 Nov 2019 17:23:09 +0800 Subject: [PATCH 13/14] address comment --- planner/core/physical_plan_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/planner/core/physical_plan_test.go b/planner/core/physical_plan_test.go index 96fdc971c3ccb..9ebd2bf29e6ba 100644 --- a/planner/core/physical_plan_test.go +++ b/planner/core/physical_plan_test.go @@ -30,7 +30,6 @@ import ( "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/util/testleak" "github.com/pingcap/tidb/util/testutil" - "github.com/sirupsen/logrus" ) var _ = Suite(&testPlanSuite{}) @@ -685,7 +684,6 @@ func (s *testPlanSuite) TestHintScope(c *C) { stmt, err := s.ParseOneStmt(test, "", "") c.Assert(err, IsNil, comment) - logrus.Warning("test:------", test) p, _, err := planner.Optimize(context.Background(), se, stmt, s.is) c.Assert(err, IsNil) s.testData.OnRecord(func() { From 8a800dfe4ad33fcd95f021bbe3c8ffd5bf1a2a1d Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Wed, 13 Nov 2019 14:55:02 +0800 Subject: [PATCH 14/14] address comment --- go.sum | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/go.sum b/go.sum index d6879636a7f33..a7caa403be467 100644 --- a/go.sum +++ b/go.sum @@ -5,6 +5,7 @@ github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f h1:5ZfJxyXo8KyX8 github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -15,6 +16,7 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20171208011716-f6d7a1f6fbf3/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= @@ -50,6 +52,7 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -110,11 +113,13 @@ github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf h1:Ut4tTtPNmInWiEWJRernsWm688R0RN6PFO8sZhwI0sk= github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf/go.mod h1:4AmD/VxjWcI5SRB0n6szE2A6s2fsNHDLO0nAlMHgfLQ= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -168,6 +173,7 @@ github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKw github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8 h1:USx2/E1bX46VG32FIw034Au6seQ2fY9NEILmNh/UlQg= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4 h1:iRtOAQ6FXkY/BGvst3CDfTva4nTqh6CL8WXvanLdbu0= github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= @@ -207,6 +213,7 @@ github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -214,6 +221,7 @@ github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1/go.mod h1:daVV7q github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d h1:GoAlyOgbOEIFdaDqxJVlbOQ1DtGmZWs/Qau0hIlk+WQ= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -221,6 +229,7 @@ github.com/remyoudompheng/bigfft v0.0.0-20190512091148-babf20351dd7 h1:FUL3b97ZY github.com/remyoudompheng/bigfft v0.0.0-20190512091148-babf20351dd7/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44 h1:tB9NOR21++IjLyVx3/PCPhWMwqGNCMQEH96A6dMZ/gc= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.18.10+incompatible h1:cy84jW6EVRPa5g9HAHrlbxMSIjBhDSX0OFYyMYminYs= github.com/shirou/gopsutil v2.18.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -235,12 +244,14 @@ github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -259,7 +270,9 @@ github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1 github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo= github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.2 h1:JON3E2/GPW2iDNGoSAusl1KDf5TRQ8k8q7Tp097pZGs= github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= +github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43 h1:BasDe+IErOQKrMVXab7UayvSlIpiyGwRvuX3EKYY7UA= github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA= github.com/unrolled/render v0.0.0-20171102162132-65450fb6b2d3/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= github.com/unrolled/render v0.0.0-20180914162206-b9786414de4d h1:ggUgChAeyge4NZ4QUw6lhHsVymzwSDJOZcE0s2X8S20= @@ -331,6 +344,7 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190909082730-f460065e899a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c h1:S/FtSvpNLtFBgjTqcKsRpsa6aVsI6iztaz1bQd9BJwE= golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -348,6 +362,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191107010934-f79515f33823 h1:akkRBeitX2EZP59KdtKw310CI4WGPCNPyrLbE7WZA8Y= golang.org/x/tools v0.0.0-20191107010934-f79515f33823/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=