planner: suppress column number in plan_tree explain (#65148)
ref pingcap/tidb#63118
This commit is contained in:
@ -1073,10 +1073,11 @@ func ResetContextOfStmt(ctx sessionctx.Context, s ast.StmtNode) (err error) {
|
||||
sc.OriginalSQL = s.Text()
|
||||
if explainStmt, ok := s.(*ast.ExplainStmt); ok {
|
||||
sc.InExplainStmt = true
|
||||
sc.ExplainFormat = explainStmt.Format
|
||||
// Normalize to lowercase to avoid repeated conversions in shouldRemoveColumnNumbers and other places
|
||||
sc.ExplainFormat = strings.ToLower(explainStmt.Format)
|
||||
sc.InExplainAnalyzeStmt = explainStmt.Analyze
|
||||
sc.IgnoreExplainIDSuffix = strings.ToLower(explainStmt.Format) == types.ExplainFormatBrief || strings.ToLower(explainStmt.Format) == types.ExplainFormatPlanTree
|
||||
sc.InVerboseExplain = strings.ToLower(explainStmt.Format) == types.ExplainFormatVerbose
|
||||
sc.IgnoreExplainIDSuffix = sc.ExplainFormat == types.ExplainFormatBrief || sc.ExplainFormat == types.ExplainFormatPlanTree
|
||||
sc.InVerboseExplain = sc.ExplainFormat == types.ExplainFormatVerbose
|
||||
s = explainStmt.Stmt
|
||||
} else {
|
||||
sc.ExplainFormat = ""
|
||||
@ -1084,7 +1085,9 @@ func ResetContextOfStmt(ctx sessionctx.Context, s ast.StmtNode) (err error) {
|
||||
if explainForStmt, ok := s.(*ast.ExplainForStmt); ok {
|
||||
sc.InExplainStmt = true
|
||||
sc.InExplainAnalyzeStmt = true
|
||||
sc.InVerboseExplain = strings.ToLower(explainForStmt.Format) == types.ExplainFormatVerbose
|
||||
// Normalize to lowercase to avoid repeated conversions in shouldRemoveColumnNumbers and other places
|
||||
sc.ExplainFormat = strings.ToLower(explainForStmt.Format)
|
||||
sc.InVerboseExplain = sc.ExplainFormat == types.ExplainFormatVerbose
|
||||
}
|
||||
|
||||
// TODO: Many same bool variables here.
|
||||
@ -1246,7 +1249,7 @@ func ResetContextOfStmt(ctx sessionctx.Context, s ast.StmtNode) (err error) {
|
||||
}
|
||||
|
||||
sc.SetForcePlanCache(fixcontrol.GetBoolWithDefault(vars.OptimizerFixControl, fixcontrol.Fix49736, false))
|
||||
sc.SetAlwaysWarnSkipCache(sc.InExplainStmt && sc.ExplainFormat == "plan_cache")
|
||||
sc.SetAlwaysWarnSkipCache(sc.InExplainStmt && sc.ExplainFormat == types.ExplainFormatPlanCache)
|
||||
errCount, warnCount := vars.StmtCtx.NumErrorWarnings()
|
||||
vars.SysErrorCount = errCount
|
||||
vars.SysWarningCount = warnCount
|
||||
|
||||
@ -83,6 +83,7 @@ go_library(
|
||||
"//pkg/errno",
|
||||
"//pkg/expression/exprctx",
|
||||
"//pkg/expression/expropt",
|
||||
"//pkg/expression/sessionexpr",
|
||||
"//pkg/extension",
|
||||
"//pkg/infoschema/context",
|
||||
"//pkg/kv",
|
||||
|
||||
@ -23,6 +23,7 @@ import (
|
||||
|
||||
"github.com/pingcap/errors"
|
||||
"github.com/pingcap/tidb/pkg/expression/exprctx"
|
||||
"github.com/pingcap/tidb/pkg/expression/sessionexpr"
|
||||
"github.com/pingcap/tidb/pkg/meta/model"
|
||||
"github.com/pingcap/tidb/pkg/parser/ast"
|
||||
"github.com/pingcap/tidb/pkg/parser/charset"
|
||||
@ -448,17 +449,45 @@ func (col *Column) VecEvalVectorFloat32(ctx EvalContext, input *chunk.Chunk, res
|
||||
|
||||
const columnPrefix = "Column#"
|
||||
|
||||
// shouldRemoveColumnNumbers checks if column numbers should be removed based on the explain format.
|
||||
// This is used for plan_tree format to show "Column" instead of "Column#<number>".
|
||||
// Note: ExplainFormat is normalized to lowercase when set, but we use strings.ToLower as a defensive measure
|
||||
// in case the format wasn't normalized in some code path.
|
||||
func shouldRemoveColumnNumbers(ctx ParamValues) bool {
|
||||
if evalCtx, ok := ctx.(EvalContext); ok {
|
||||
if sessionCtx, ok := evalCtx.(*sessionexpr.EvalContext); ok {
|
||||
stmtCtx := sessionCtx.Sctx().GetSessionVars().StmtCtx
|
||||
// Only check format if we're actually in an explain statement
|
||||
if !stmtCtx.InExplainStmt {
|
||||
return false
|
||||
}
|
||||
format := stmtCtx.ExplainFormat
|
||||
// Use ToLower defensively in case format wasn't normalized in some code path
|
||||
formatLower := strings.ToLower(strings.TrimSpace(format))
|
||||
if formatLower == types.ExplainFormatPlanTree {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// StringWithCtx implements Expression interface.
|
||||
func (col *Column) StringWithCtx(_ ParamValues, redact string) string {
|
||||
return col.string(redact)
|
||||
func (col *Column) StringWithCtx(ctx ParamValues, redact string) string {
|
||||
return col.string(redact, shouldRemoveColumnNumbers(ctx))
|
||||
}
|
||||
|
||||
// StringWithCtxForExplain implements Expression interface with option to remove column numbers for plan_tree format.
|
||||
func (col *Column) StringWithCtxForExplain(_ ParamValues, redact string, removeColumnNumbers bool) string {
|
||||
return col.string(redact, removeColumnNumbers)
|
||||
}
|
||||
|
||||
// String implements Stringer interface.
|
||||
func (col *Column) String() string {
|
||||
return col.string(errors.RedactLogDisable)
|
||||
return col.string(errors.RedactLogDisable, false)
|
||||
}
|
||||
|
||||
func (col *Column) string(redact string) string {
|
||||
func (col *Column) string(redact string, removeColumnNumbers bool) string {
|
||||
if col.IsHidden && col.VirtualExpr != nil {
|
||||
// A hidden column without virtual expression indicates it's a stored type.
|
||||
// a virtual column should be able to be stringified without context.
|
||||
@ -468,7 +497,12 @@ func (col *Column) string(redact string) string {
|
||||
return col.OrigName
|
||||
}
|
||||
var builder strings.Builder
|
||||
fmt.Fprintf(&builder, "%s%d", columnPrefix, col.UniqueID)
|
||||
if removeColumnNumbers {
|
||||
// For plan_tree format, return "Column" instead of "Column#<number>"
|
||||
builder.WriteString("Column")
|
||||
} else {
|
||||
fmt.Fprintf(&builder, "%s%d", columnPrefix, col.UniqueID)
|
||||
}
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
|
||||
@ -111,7 +111,7 @@ func (col *Column) ColumnExplainInfo(ctx ParamValues, normalized bool) string {
|
||||
if normalized {
|
||||
return col.ColumnExplainInfoNormalized()
|
||||
}
|
||||
return col.StringWithCtx(ctx, errors.RedactLogDisable)
|
||||
return col.StringWithCtxForExplain(ctx, errors.RedactLogDisable, shouldRemoveColumnNumbers(ctx))
|
||||
}
|
||||
|
||||
// ColumnExplainInfoNormalized returns the normalized explained info for column.
|
||||
@ -187,24 +187,37 @@ func (expr *Constant) format(dt types.Datum) string {
|
||||
// ExplainExpressionList generates explain information for a list of expressions.
|
||||
func ExplainExpressionList(ctx EvalContext, exprs []Expression, schema *Schema, redactMode string) string {
|
||||
builder := &strings.Builder{}
|
||||
// Check explain format once at the start - it doesn't change during a single explain output
|
||||
removeColNums := shouldRemoveColumnNumbers(ctx)
|
||||
for i, expr := range exprs {
|
||||
switch expr := expr.(type) {
|
||||
case *Column, *CorrelatedColumn:
|
||||
builder.WriteString(expr.StringWithCtx(ctx, redactMode))
|
||||
if expr.StringWithCtx(ctx, redactMode) != schema.Columns[i].StringWithCtx(ctx, redactMode) {
|
||||
// Both Column and CorrelatedColumn use the same StringWithCtxForExplain method
|
||||
// (CorrelatedColumn embeds Column), so they can share the same logic
|
||||
var col *Column
|
||||
switch c := expr.(type) {
|
||||
case *Column:
|
||||
col = c
|
||||
case *CorrelatedColumn:
|
||||
col = &c.Column
|
||||
}
|
||||
exprStr := col.StringWithCtxForExplain(ctx, redactMode, removeColNums)
|
||||
schemaColStr := schema.Columns[i].StringWithCtxForExplain(ctx, redactMode, removeColNums)
|
||||
builder.WriteString(exprStr)
|
||||
if exprStr != schemaColStr {
|
||||
// simple col projected again with another uniqueID without origin name.
|
||||
builder.WriteString("->")
|
||||
builder.WriteString(schema.Columns[i].StringWithCtx(ctx, redactMode))
|
||||
builder.WriteString(schemaColStr)
|
||||
}
|
||||
case *Constant:
|
||||
v := expr.StringWithCtx(ctx, errors.RedactLogDisable)
|
||||
redact.WriteRedact(builder, v, redactMode)
|
||||
builder.WriteString("->")
|
||||
builder.WriteString(schema.Columns[i].StringWithCtx(ctx, redactMode))
|
||||
builder.WriteString(schema.Columns[i].StringWithCtxForExplain(ctx, redactMode, removeColNums))
|
||||
default:
|
||||
builder.WriteString(expr.StringWithCtx(ctx, redactMode))
|
||||
builder.WriteString("->")
|
||||
builder.WriteString(schema.Columns[i].StringWithCtx(ctx, redactMode))
|
||||
builder.WriteString(schema.Columns[i].StringWithCtxForExplain(ctx, redactMode, removeColNums))
|
||||
}
|
||||
if i+1 < len(exprs) {
|
||||
builder.WriteString(", ")
|
||||
|
||||
@ -49,8 +49,8 @@ func TestConstantPropagation(t *testing.T) {
|
||||
col_36 binary(117) NOT NULL DEFAULT 'k#Vf)%G$9T6)'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci`)
|
||||
tk.MustQuery(`explain format='plan_tree' select /*+ NO_HASH_JOIN( t373b8b5b , tafab9ab4 */ tafab9ab4.col_32 as r0 , substring_index( tafab9ab4.col_36 , ',' , 2 ) as r1 , tafab9ab4.col_32 as r2 from t373b8b5b join tafab9ab4 on t373b8b5b.col_53 = tafab9ab4.col_35 where tafab9ab4.col_35 in ( 78 ,177 ) and t373b8b5b.col_53 between 0 and 1 order by r0,r1,r2`).Check(testkit.Rows(
|
||||
`Sort root test.tafab9ab4.col_32, Column#7`,
|
||||
`└─Projection root test.tafab9ab4.col_32, substring_index(test.tafab9ab4.col_36, ,, 2)->Column#7, test.tafab9ab4.col_32`,
|
||||
`Sort root test.tafab9ab4.col_32, Column`,
|
||||
`└─Projection root test.tafab9ab4.col_32, substring_index(test.tafab9ab4.col_36, ,, 2)->Column, test.tafab9ab4.col_32`,
|
||||
` └─HashJoin root inner join, equal:[eq(test.t373b8b5b.col_53, test.tafab9ab4.col_35)]`,
|
||||
` ├─TableReader(Build) root data:Selection`,
|
||||
` │ └─Selection cop[tikv] ge(test.t373b8b5b.col_53, 0), in(test.t373b8b5b.col_53, 78, 177), le(test.t373b8b5b.col_53, 1)`,
|
||||
|
||||
@ -162,10 +162,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column#9)->Column#5, funcs:sum(Column#10)->Column#6",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column#9, cast(test.t.a, decimal(10,0) BINARY)->Column#10",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column)->Column, funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column, cast(test.t.a, decimal(10,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -173,10 +173,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column#9)->Column#5, funcs:sum(Column#10)->Column#6",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column#9, cast(test.t.a, decimal(10,0) BINARY)->Column#10",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column)->Column, funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column, cast(test.t.a, decimal(10,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -184,10 +184,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ sum(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#7)->Column#6",
|
||||
" └─Projection batchCop[tiflash] cast(test.t.a, decimal(10,0) BINARY)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(test.t.a, decimal(10,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -195,10 +195,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ sum(a+1) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#7)->Column#6",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.a, 1), decimal(20,0) BINARY)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.a, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -206,10 +206,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ sum(isnull(a)) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#7)->Column#6",
|
||||
" └─Projection batchCop[tiflash] cast(isnull(test.t.a), decimal(20,0) BINARY)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(isnull(test.t.a), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -597,8 +597,8 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v2, v2.@sel_2), hash_agg(@qb_v2) */ * from v2;",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column#19)]",
|
||||
"├─HashAgg(Build) root group by:test.t2.a, funcs:count(1)->Column#19",
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column)]",
|
||||
"├─HashAgg(Build) root group by:test.t2.a, funcs:count(1)->Column",
|
||||
"│ └─HashJoin root inner join, equal:[eq(test.t.a, test.t1.a)]",
|
||||
"│ ├─IndexReader(Build) root index:IndexFullScan",
|
||||
"│ │ └─IndexFullScan cop[tikv] table:t1, index:idx_a(a) keep order:false, stats:pseudo",
|
||||
@ -626,8 +626,8 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v2, v2.@sel_2), stream_agg(@qb_v2) */ * from v2;",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column#19)]",
|
||||
"├─StreamAgg(Build) root group by:test.t2.a, funcs:count(1)->Column#19",
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column)]",
|
||||
"├─StreamAgg(Build) root group by:test.t2.a, funcs:count(1)->Column",
|
||||
"│ └─Sort root test.t2.a",
|
||||
"│ └─HashJoin root inner join, equal:[eq(test.t.a, test.t1.a)]",
|
||||
"│ ├─IndexReader(Build) root index:IndexFullScan",
|
||||
@ -763,13 +763,13 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v6, v6.@sel_2), NO_DECORRELATE(@qb_v6) */ * from v6;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.a, test.t1.b",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#7)",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─TableReader(Build) root data:TableFullScan",
|
||||
" │ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo",
|
||||
" └─MaxOneRow(Probe) root ",
|
||||
" └─StreamAgg root funcs:sum(Column#9)->Column#7",
|
||||
" └─StreamAgg root funcs:sum(Column)->Column",
|
||||
" └─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(test.t2.a)->Column#9",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(test.t2.a)->Column",
|
||||
" └─Selection cop[tikv] eq(test.t2.b, test.t1.b)",
|
||||
" └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo"
|
||||
],
|
||||
@ -780,11 +780,11 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#14, Column#15",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#14, Column#15, funcs:firstrow(Column#14)->Column#14, funcs:firstrow(Column#15)->Column#15",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: Column#14, collate: binary], [name: Column#15, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#14, Column#15, ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: Column, collate: binary], [name: Column, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, Column, ",
|
||||
" └─Union mpp[tiflash] ",
|
||||
" ├─Selection mpp[tiflash] lt(test.t.a, 18), lt(test.t.a, 60)",
|
||||
" │ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
@ -796,7 +796,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v8, v8), merge(@qb_v8) */ * from v8;",
|
||||
"Plan": [
|
||||
"HashAgg root group by:Column#21, funcs:firstrow(Column#21)->Column#21",
|
||||
"HashAgg root group by:Column, funcs:firstrow(Column)->Column",
|
||||
"└─Union root ",
|
||||
" ├─HashJoin root CARTESIAN inner join",
|
||||
" │ ├─TableReader(Build) root data:TableFullScan",
|
||||
@ -820,9 +820,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v9, v9), AGG_TO_COP(@qb_v9) */ * from v9;",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#5)->Column#4",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:sum(test.t.a)->Column#5",
|
||||
" └─HashAgg cop[tikv] funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:idx_a(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -843,10 +843,10 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column#4",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#6, funcs:sum(Column#5)->Column#4, funcs:firstrow(Column#6)->test.t.a",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column#5, test.t.a->Column#6",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column",
|
||||
" └─Projection mpp[tiflash] Column, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t.a",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column, test.t.a->Column",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -858,13 +858,13 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column#4",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t.a, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.t.a)->test.t.a",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column",
|
||||
" └─Projection mpp[tiflash] Column, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t.a, funcs:sum(Column)->Column, funcs:firstrow(test.t.a)->test.t.a",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#10, funcs:sum(Column#9)->Column#7",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column#9, test.t.a->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, funcs:sum(Column)->Column",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column, test.t.a->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1559,10 +1559,10 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ leading(t2@sel_2) merge_join(t) */ * from t join t1 on t.a = t1.a where t1.a < (select sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column#36)->Column#10, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column)->Column, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
" │ └─TableReader root data:HashAgg",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column#36",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column",
|
||||
" │ └─Selection cop[tikv] not(isnull(test.t2.b))",
|
||||
" │ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo",
|
||||
" └─MergeJoin(Probe) root inner join, left key:test.t1.a, right key:test.t.a",
|
||||
@ -1582,10 +1582,10 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ leading(t1), inl_join(t1) */ * from t join t1 on t.a = t1.a where t1.a < (select sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column#33)->Column#10, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column)->Column, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
" │ └─TableReader root data:HashAgg",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column#33",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column",
|
||||
" │ └─Selection cop[tikv] not(isnull(test.t2.b))",
|
||||
" │ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo",
|
||||
" └─IndexJoin(Probe) root inner join, inner:IndexLookUp, outer key:test.t.a, inner key:test.t1.a, equal cond:eq(test.t.a, test.t1.a)",
|
||||
@ -1602,7 +1602,7 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+leading(t2@sel_2) merge_join(t) */ * from t join t1 on t.a = t1.a where t1.a < (select /*+ NO_DECORRELATE() */ sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─MergeJoin(Build) root inner join, left key:test.t.a, right key:test.t1.a",
|
||||
" │ ├─Sort(Build) root test.t1.a",
|
||||
" │ │ └─TableReader root data:TableFullScan",
|
||||
@ -1611,8 +1611,8 @@
|
||||
" │ └─TableReader root data:TableFullScan",
|
||||
" │ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo",
|
||||
" └─MaxOneRow(Probe) root ",
|
||||
" └─StreamAgg root funcs:sum(Column#25)->Column#10",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column#25",
|
||||
" └─StreamAgg root funcs:sum(Column)->Column",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column",
|
||||
" └─IndexLookUp root ",
|
||||
" ├─IndexRangeScan(Build) cop[tikv] table:t2, index:idx_b(b) range: decided by [eq(test.t2.b, test.t1.b)], keep order:false, stats:pseudo",
|
||||
" └─TableRowIDScan(Probe) cop[tikv] table:t2 keep order:false, stats:pseudo"
|
||||
@ -1625,7 +1625,7 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ leading(t1), inl_join(t1) */ * from t join t1 on t.a = t1.a where t1.a < (select /*+ NO_DECORRELATE() */ sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─Projection(Build) root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
" │ └─IndexJoin root inner join, inner:IndexLookUp, outer key:test.t.a, inner key:test.t1.a, equal cond:eq(test.t.a, test.t1.a)",
|
||||
" │ ├─TableReader(Build) root data:TableFullScan",
|
||||
@ -1634,8 +1634,8 @@
|
||||
" │ ├─IndexRangeScan(Build) cop[tikv] table:t1, index:idx_a(a) range: decided by [eq(test.t1.a, test.t.a)], keep order:false, stats:pseudo",
|
||||
" │ └─TableRowIDScan(Probe) cop[tikv] table:t1 keep order:false, stats:pseudo",
|
||||
" └─MaxOneRow(Probe) root ",
|
||||
" └─StreamAgg root funcs:sum(Column#23)->Column#10",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column#23",
|
||||
" └─StreamAgg root funcs:sum(Column)->Column",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column",
|
||||
" └─IndexLookUp root ",
|
||||
" ├─IndexRangeScan(Build) cop[tikv] table:t2, index:idx_b(b) range: decided by [eq(test.t2.b, test.t1.b)], keep order:false, stats:pseudo",
|
||||
" └─TableRowIDScan(Probe) cop[tikv] table:t2 keep order:false, stats:pseudo"
|
||||
@ -1767,9 +1767,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tikv[t], tiflash[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column#5, funcs:sum(test.t.a)->Column#6",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column, funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": [
|
||||
@ -1779,9 +1779,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tikv[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column#5, funcs:sum(test.t.a)->Column#6",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column, funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1789,9 +1789,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column#5, funcs:sum(test.t.a)->Column#6",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column, funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": [
|
||||
@ -1855,10 +1855,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ use_index(t, idx_vec)*/ a from t order by VEC_COSINE_DISTANCE(`vec`, '[1, 2, 3]') limit 1;",
|
||||
"Plan": [
|
||||
"TopN root Column#5, offset:0, count:1",
|
||||
"TopN root Column, offset:0, count:1",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#5, offset:0, count:1",
|
||||
" └─TopN mpp[tiflash] Column, offset:0, count:1",
|
||||
" └─TableFullScan mpp[tiflash] table:t, index:idx_vec(vec) keep order:false, stats:pseudo, annIndex:COSINE(vec..[1,2,3], limit:1)->Column#5"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1866,10 +1866,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ use_index(t, idx_v)*/ a from t order by VEC_COSINE_DISTANCE(`vec`, '[1, 2, 3]') limit 1;",
|
||||
"Plan": [
|
||||
"TopN root Column#5, offset:0, count:1",
|
||||
"TopN root Column, offset:0, count:1",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#5, offset:0, count:1",
|
||||
" └─TopN mpp[tiflash] Column, offset:0, count:1",
|
||||
" └─TableFullScan mpp[tiflash] table:t, index:idx_vec(vec) keep order:false, stats:pseudo, annIndex:COSINE(vec..[1,2,3], limit:1)->Column#5"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1877,11 +1877,11 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ ignore_index(t, idx_vec)*/ a from t order by VEC_COSINE_DISTANCE(`vec`, '[1, 2, 3]') limit 1;",
|
||||
"Plan": [
|
||||
"TopN root Column#4, offset:0, count:1",
|
||||
"TopN root Column, offset:0, count:1",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#4, offset:0, count:1",
|
||||
" └─Projection mpp[tiflash] test.t.a, vec_cosine_distance(test.t.vec, [1,2,3])->Column#4",
|
||||
" └─TopN mpp[tiflash] Column, offset:0, count:1",
|
||||
" └─Projection mpp[tiflash] test.t.a, vec_cosine_distance(test.t.vec, [1,2,3])->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
|
||||
@ -162,10 +162,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column#9)->Column#5, funcs:sum(Column#10)->Column#6",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column#9, cast(test.t.a, decimal(10,0) BINARY)->Column#10",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column)->Column, funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column, cast(test.t.a, decimal(10,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -173,10 +173,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column#9)->Column#5, funcs:sum(Column#10)->Column#6",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column#9, cast(test.t.a, decimal(10,0) BINARY)->Column#10",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column)->Column, funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] test.t.a->Column, cast(test.t.a, decimal(10,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -184,10 +184,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ sum(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#7)->Column#6",
|
||||
" └─Projection batchCop[tiflash] cast(test.t.a, decimal(10,0) BINARY)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(test.t.a, decimal(10,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -195,10 +195,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ sum(a+1) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#7)->Column#6",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.a, 1), decimal(20,0) BINARY)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.a, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -206,10 +206,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ sum(isnull(a)) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#7)->Column#6",
|
||||
" └─Projection batchCop[tiflash] cast(isnull(test.t.a), decimal(20,0) BINARY)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(isnull(test.t.a), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -597,8 +597,8 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v2, v2.@sel_2), hash_agg(@qb_v2) */ * from v2;",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column#19)]",
|
||||
"├─HashAgg(Build) root group by:test.t2.a, funcs:count(1)->Column#19",
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column)]",
|
||||
"├─HashAgg(Build) root group by:test.t2.a, funcs:count(1)->Column",
|
||||
"│ └─HashJoin root inner join, equal:[eq(test.t.a, test.t1.a)]",
|
||||
"│ ├─IndexReader(Build) root index:IndexFullScan",
|
||||
"│ │ └─IndexFullScan cop[tikv] table:t1, index:idx_a(a) keep order:false, stats:pseudo",
|
||||
@ -626,8 +626,8 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v2, v2.@sel_2), stream_agg(@qb_v2) */ * from v2;",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column#19)]",
|
||||
"├─StreamAgg(Build) root group by:test.t2.a, funcs:count(1)->Column#19",
|
||||
"HashJoin root inner join, equal:[eq(test.t.a, Column)]",
|
||||
"├─StreamAgg(Build) root group by:test.t2.a, funcs:count(1)->Column",
|
||||
"│ └─Sort root test.t2.a",
|
||||
"│ └─HashJoin root inner join, equal:[eq(test.t.a, test.t1.a)]",
|
||||
"│ ├─IndexReader(Build) root index:IndexFullScan",
|
||||
@ -763,13 +763,13 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v6, v6.@sel_2), NO_DECORRELATE(@qb_v6) */ * from v6;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.a, test.t1.b",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#7)",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─TableReader(Build) root data:TableFullScan",
|
||||
" │ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo",
|
||||
" └─MaxOneRow(Probe) root ",
|
||||
" └─StreamAgg root funcs:sum(Column#9)->Column#7",
|
||||
" └─StreamAgg root funcs:sum(Column)->Column",
|
||||
" └─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(test.t2.a)->Column#9",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(test.t2.a)->Column",
|
||||
" └─Selection cop[tikv] eq(test.t2.b, test.t1.b)",
|
||||
" └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo"
|
||||
],
|
||||
@ -780,11 +780,11 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#14, Column#15",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#14, Column#15, funcs:firstrow(Column#14)->Column#14, funcs:firstrow(Column#15)->Column#15",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: Column#14, collate: binary], [name: Column#15, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#14, Column#15, ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: Column, collate: binary], [name: Column, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, Column, ",
|
||||
" └─Union mpp[tiflash] ",
|
||||
" ├─Selection mpp[tiflash] lt(test.t.a, 18), lt(test.t.a, 60)",
|
||||
" │ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
@ -796,7 +796,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v8, v8), merge(@qb_v8) */ * from v8;",
|
||||
"Plan": [
|
||||
"HashAgg root group by:Column#21, funcs:firstrow(Column#21)->Column#21",
|
||||
"HashAgg root group by:Column, funcs:firstrow(Column)->Column",
|
||||
"└─Union root ",
|
||||
" ├─HashJoin root CARTESIAN inner join",
|
||||
" │ ├─TableReader(Build) root data:TableFullScan",
|
||||
@ -820,9 +820,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ qb_name(qb_v9, v9), AGG_TO_COP(@qb_v9) */ * from v9;",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#5)->Column#4",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:sum(test.t.a)->Column#5",
|
||||
" └─HashAgg cop[tikv] funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:idx_a(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -843,10 +843,10 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column#4",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#6, funcs:sum(Column#5)->Column#4, funcs:firstrow(Column#6)->test.t.a",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column#5, test.t.a->Column#6",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column",
|
||||
" └─Projection mpp[tiflash] Column, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t.a",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column, test.t.a->Column",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -858,13 +858,13 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column#4",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t.a, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.t.a)->test.t.a",
|
||||
" └─Projection mpp[tiflash] test.t.a, Column",
|
||||
" └─Projection mpp[tiflash] Column, test.t.a",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t.a, funcs:sum(Column)->Column, funcs:firstrow(test.t.a)->test.t.a",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#10, funcs:sum(Column#9)->Column#7",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column#9, test.t.a->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, funcs:sum(Column)->Column",
|
||||
" └─Projection mpp[tiflash] cast(test.t.b, decimal(10,0) BINARY)->Column, test.t.a->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1559,10 +1559,10 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ leading(t2@sel_2) merge_join(t) */ * from t join t1 on t.a = t1.a where t1.a < (select sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column#36)->Column#10, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column)->Column, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
" │ └─TableReader root data:HashAgg",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column#36",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column",
|
||||
" │ └─Selection cop[tikv] not(isnull(test.t2.b))",
|
||||
" │ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo",
|
||||
" └─MergeJoin(Probe) root inner join, left key:test.t1.a, right key:test.t.a",
|
||||
@ -1582,10 +1582,10 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ leading(t1), inl_join(t1) */ * from t join t1 on t.a = t1.a where t1.a < (select sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column#33)->Column#10, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
"└─HashJoin root inner join, equal:[eq(test.t1.b, test.t2.b)], other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─HashAgg(Build) root group by:test.t2.b, funcs:sum(Column)->Column, funcs:firstrow(test.t2.b)->test.t2.b",
|
||||
" │ └─TableReader root data:HashAgg",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column#33",
|
||||
" │ └─HashAgg cop[tikv] group by:test.t2.b, funcs:sum(test.t2.a)->Column",
|
||||
" │ └─Selection cop[tikv] not(isnull(test.t2.b))",
|
||||
" │ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo",
|
||||
" └─IndexJoin(Probe) root inner join, inner:IndexLookUp, outer key:test.t.a, inner key:test.t1.a, equal cond:eq(test.t.a, test.t1.a)",
|
||||
@ -1602,7 +1602,7 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+leading(t2@sel_2) merge_join(t) */ * from t join t1 on t.a = t1.a where t1.a < (select /*+ NO_DECORRELATE() */ sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─MergeJoin(Build) root inner join, left key:test.t.a, right key:test.t1.a",
|
||||
" │ ├─Sort(Build) root test.t1.a",
|
||||
" │ │ └─TableReader root data:TableFullScan",
|
||||
@ -1611,8 +1611,8 @@
|
||||
" │ └─TableReader root data:TableFullScan",
|
||||
" │ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo",
|
||||
" └─MaxOneRow(Probe) root ",
|
||||
" └─StreamAgg root funcs:sum(Column#25)->Column#10",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column#25",
|
||||
" └─StreamAgg root funcs:sum(Column)->Column",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column",
|
||||
" └─IndexLookUp root ",
|
||||
" ├─IndexRangeScan(Build) cop[tikv] table:t2, index:idx_b(b) range: decided by [eq(test.t2.b, test.t1.b)], keep order:false, stats:pseudo",
|
||||
" └─TableRowIDScan(Probe) cop[tikv] table:t2 keep order:false, stats:pseudo"
|
||||
@ -1625,7 +1625,7 @@
|
||||
"SQL": "explain format = 'plan_tree' select /*+ leading(t1), inl_join(t1) */ * from t join t1 on t.a = t1.a where t1.a < (select /*+ NO_DECORRELATE() */ sum(t2.a) from t2 where t2.b = t1.b);",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column#10)",
|
||||
"└─Apply root CARTESIAN inner join, other cond:lt(cast(test.t1.a, decimal(10,0) BINARY), Column)",
|
||||
" ├─Projection(Build) root test.t.a, test.t.b, test.t1.a, test.t1.b",
|
||||
" │ └─IndexJoin root inner join, inner:IndexLookUp, outer key:test.t.a, inner key:test.t1.a, equal cond:eq(test.t.a, test.t1.a)",
|
||||
" │ ├─TableReader(Build) root data:TableFullScan",
|
||||
@ -1634,8 +1634,8 @@
|
||||
" │ ├─IndexRangeScan(Build) cop[tikv] table:t1, index:idx_a(a) range: decided by [eq(test.t1.a, test.t.a)], keep order:false, stats:pseudo",
|
||||
" │ └─TableRowIDScan(Probe) cop[tikv] table:t1 keep order:false, stats:pseudo",
|
||||
" └─MaxOneRow(Probe) root ",
|
||||
" └─StreamAgg root funcs:sum(Column#23)->Column#10",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column#23",
|
||||
" └─StreamAgg root funcs:sum(Column)->Column",
|
||||
" └─Projection root cast(test.t2.a, decimal(10,0) BINARY)->Column",
|
||||
" └─IndexLookUp root ",
|
||||
" ├─IndexRangeScan(Build) cop[tikv] table:t2, index:idx_b(b) range: decided by [eq(test.t2.b, test.t1.b)], keep order:false, stats:pseudo",
|
||||
" └─TableRowIDScan(Probe) cop[tikv] table:t2 keep order:false, stats:pseudo"
|
||||
@ -1767,9 +1767,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tikv[t], tiflash[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column#5, funcs:sum(test.t.a)->Column#6",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column, funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": [
|
||||
@ -1779,9 +1779,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tikv[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column#5, funcs:sum(test.t.a)->Column#6",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column, funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1789,9 +1789,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ read_from_storage(tiflash[t]) */ avg(a) from t",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:avg(Column#5, Column#6)->Column#4",
|
||||
"HashAgg root funcs:avg(Column, Column)->Column",
|
||||
"└─IndexReader root index:HashAgg",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column#5, funcs:sum(test.t.a)->Column#6",
|
||||
" └─HashAgg cop[tikv] funcs:count(test.t.a)->Column, funcs:sum(test.t.a)->Column",
|
||||
" └─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": [
|
||||
@ -1855,10 +1855,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ use_index(t, idx_vec)*/ a from t order by VEC_COSINE_DISTANCE(`vec`, '[1, 2, 3]') limit 1;",
|
||||
"Plan": [
|
||||
"TopN root Column#5, offset:0, count:1",
|
||||
"TopN root Column, offset:0, count:1",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#5, offset:0, count:1",
|
||||
" └─TopN mpp[tiflash] Column, offset:0, count:1",
|
||||
" └─TableFullScan mpp[tiflash] table:t, index:idx_vec(vec) keep order:false, stats:pseudo, annIndex:COSINE(vec..[1,2,3], limit:1)->Column#5"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1866,10 +1866,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ use_index(t, idx_v)*/ a from t order by VEC_COSINE_DISTANCE(`vec`, '[1, 2, 3]') limit 1;",
|
||||
"Plan": [
|
||||
"TopN root Column#5, offset:0, count:1",
|
||||
"TopN root Column, offset:0, count:1",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#5, offset:0, count:1",
|
||||
" └─TopN mpp[tiflash] Column, offset:0, count:1",
|
||||
" └─TableFullScan mpp[tiflash] table:t, index:idx_vec(vec) keep order:false, stats:pseudo, annIndex:COSINE(vec..[1,2,3], limit:1)->Column#5"
|
||||
],
|
||||
"Warn": null
|
||||
@ -1877,11 +1877,11 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select /*+ ignore_index(t, idx_vec)*/ a from t order by VEC_COSINE_DISTANCE(`vec`, '[1, 2, 3]') limit 1;",
|
||||
"Plan": [
|
||||
"TopN root Column#4, offset:0, count:1",
|
||||
"TopN root Column, offset:0, count:1",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#4, offset:0, count:1",
|
||||
" └─Projection mpp[tiflash] test.t.a, vec_cosine_distance(test.t.vec, [1,2,3])->Column#4",
|
||||
" └─TopN mpp[tiflash] Column, offset:0, count:1",
|
||||
" └─Projection mpp[tiflash] test.t.a, vec_cosine_distance(test.t.vec, [1,2,3])->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
],
|
||||
"Warn": null
|
||||
|
||||
@ -535,7 +535,7 @@ func TestIssue63290(t *testing.T) {
|
||||
|
||||
// Cartesian Join t1 and t3 first, then join t2.
|
||||
tk.MustQuery(`explain format='plan_tree' select /*+ set_var(tidb_opt_cartesian_join_order_threshold=100) */ 1 from t1, t2, t3 where t1.a = t2.a and t2.b = t3.b`).Check(testkit.Rows(
|
||||
`Projection root 1->Column#13`,
|
||||
`Projection root 1->Column`,
|
||||
`└─IndexHashJoin root inner join, inner:IndexLookUp, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t3.b, test.t2.b)`,
|
||||
` ├─HashJoin(Build) root CARTESIAN inner join`,
|
||||
` │ ├─IndexReader(Build) root index:IndexFullScan`,
|
||||
|
||||
@ -171,7 +171,7 @@ func TestKeepingJoinKeys(t *testing.T) {
|
||||
|
||||
// join keys are kept
|
||||
tk.MustQuery(`explain format='plan_tree' select 1 from t1 left join t2 on t1.a=t2.a where t1.a=1`).Check(testkit.Rows(
|
||||
`Projection root 1->Column#9`,
|
||||
`Projection root 1->Column`,
|
||||
`└─HashJoin root left outer join, left side:TableReader, equal:[eq(test.t1.a, test.t2.a)]`,
|
||||
` ├─TableReader(Build) root data:Selection`,
|
||||
` │ └─Selection cop[tikv] eq(test.t2.a, 1)`,
|
||||
@ -180,7 +180,7 @@ func TestKeepingJoinKeys(t *testing.T) {
|
||||
` └─Selection cop[tikv] eq(test.t1.a, 1)`,
|
||||
` └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo`))
|
||||
tk.MustQuery(`explain format='plan_tree' select 1 from t1 left join t2 on t1.a=t2.a where t2.a=1`).Check(testkit.Rows(
|
||||
`Projection root 1->Column#9`,
|
||||
`Projection root 1->Column`,
|
||||
`└─HashJoin root inner join, equal:[eq(test.t1.a, test.t2.a)]`,
|
||||
` ├─TableReader(Build) root data:Selection`,
|
||||
` │ └─Selection cop[tikv] eq(test.t2.a, 1)`,
|
||||
@ -189,7 +189,7 @@ func TestKeepingJoinKeys(t *testing.T) {
|
||||
` └─Selection cop[tikv] eq(test.t1.a, 1)`,
|
||||
` └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo`))
|
||||
tk.MustQuery(`explain format='plan_tree' select 1 from t1, t2 where t1.a=1 and t1.a=t2.a`).Check(testkit.Rows(
|
||||
`Projection root 1->Column#9`,
|
||||
`Projection root 1->Column`,
|
||||
`└─HashJoin root inner join, equal:[eq(test.t1.a, test.t2.a)]`,
|
||||
` ├─TableReader(Build) root data:Selection`,
|
||||
` │ └─Selection cop[tikv] eq(test.t2.a, 1)`,
|
||||
@ -231,7 +231,7 @@ func TestIssue60076And63314(t *testing.T) {
|
||||
|
||||
tk.MustQuery(`explain format='plan_tree' select /*+ leading(t1, t3) */ 1 from
|
||||
t1 left join t2 on t1.a=t2.a join t3 on t1.b=t3.b where t1.a=1`).Check(testkit.Rows(
|
||||
`Projection root 1->Column#13`,
|
||||
`Projection root 1->Column`,
|
||||
`└─HashJoin root left outer join, left side:HashJoin, equal:[eq(test.t1.a, test.t2.a)]`,
|
||||
` ├─TableReader(Build) root data:Selection`,
|
||||
` │ └─Selection cop[tikv] eq(test.t2.a, 1)`,
|
||||
|
||||
@ -1655,12 +1655,12 @@ func TestSemiJoinRewriter(t *testing.T) {
|
||||
tk.MustExec(`create table t2(a varchar(10));`)
|
||||
tk.MustExec(`create table t3(a int);`)
|
||||
tk.MustQuery(`explain format = 'plan_tree' select * from t1 where exists(select 1 from t2 where t1.a=t2.a);`).Check(testkit.Rows(
|
||||
`HashJoin root inner join, equal:[eq(Column#6, Column#7)]`,
|
||||
`├─HashAgg(Build) root group by:Column#7, funcs:firstrow(Column#7)->Column#7`,
|
||||
`│ └─Projection root cast(test.t2.a, double BINARY)->Column#7`,
|
||||
`HashJoin root inner join, equal:[eq(Column, Column)]`,
|
||||
`├─HashAgg(Build) root group by:Column, funcs:firstrow(Column)->Column`,
|
||||
`│ └─Projection root cast(test.t2.a, double BINARY)->Column`,
|
||||
`│ └─TableReader root data:TableFullScan`,
|
||||
`│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo`,
|
||||
`└─Projection(Probe) root test.t1.a, cast(test.t1.a, double BINARY)->Column#6`,
|
||||
`└─Projection(Probe) root test.t1.a, cast(test.t1.a, double BINARY)->Column`,
|
||||
` └─TableReader root data:TableFullScan`,
|
||||
` └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo`))
|
||||
})
|
||||
|
||||
@ -5,8 +5,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, SUM(t1.id3) FROM t1, t2 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─Projection root cast(test.t1.id3, decimal(32,0) BINARY)->Column#11, test.t1.id1, test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root cast(test.t1.id3, decimal(32,0) BINARY)->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t2.id1) eq(test.t1.id2, test.t2.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -18,9 +18,9 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, SUM(t1.id3) FROM t1, t4 WHERE t1.id1=t4.id1 AND t1.id2=t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─HashAgg root group by:Column#16, Column#17, funcs:sum(Column#15)->Column#11, funcs:firstrow(Column#16)->test.t1.id1, funcs:firstrow(Column#17)->test.t1.id2",
|
||||
" └─Projection root cast(test.t1.id3, decimal(10,0) BINARY)->Column#15, test.t1.id1->Column#16, test.t1.id2->Column#17",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.id1, funcs:firstrow(Column)->test.t1.id2",
|
||||
" └─Projection root cast(test.t1.id3, decimal(10,0) BINARY)->Column, test.t1.id1->Column, test.t1.id2->Column",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t4.id1) eq(test.t1.id2, test.t4.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -32,8 +32,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#11, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t2.id1)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -45,8 +45,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2, t3 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 AND t2.id1=t3.id1 AND t2.id2=t3.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─Projection root 1->Column#16, test.t1.id1, test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root 1->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id1, test.t3.id1) eq(test.t2.id2, test.t3.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t3, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -61,8 +61,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2, t4 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 AND t2.id1=t4.id1 AND t2.id2=t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#16, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id1, test.t4.id1) eq(test.t2.id2, test.t4.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -77,8 +77,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2, t3, t4 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 AND t2.id1=t3.id1 AND t2.id2=t3.id2 AND t3.id1=t4.id1 AND t3.id2=t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#21",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#21, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─MergeJoin root inner join, left key:test.t3.id1, test.t3.id2, right key:test.t4.id1, test.t4.id2",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:true, stats:pseudo",
|
||||
@ -97,10 +97,10 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2 WHERE ABS(t1.id1) = t2.id1 AND t1.id2 = t2.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─Projection root 1->Column#11, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id2, test.t1.id2) eq(test.t2.id1, Column#12)]",
|
||||
" ├─Projection(Build) root test.t1.id1, test.t1.id2, abs(test.t1.id1)->Column#12",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root 1->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id2, test.t1.id2) eq(test.t2.id1, Column)]",
|
||||
" ├─Projection(Build) root test.t1.id1, test.t1.id2, abs(test.t1.id1)->Column",
|
||||
" │ └─TableReader root data:TableFullScan",
|
||||
" │ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo",
|
||||
" └─IndexReader(Probe) root index:IndexFullScan",
|
||||
@ -111,10 +111,10 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2 WHERE t1.id1 = ABS(t2.id1) AND t1.id2 = t2.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#11, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id2, test.t2.id2) eq(test.t1.id1, Column#12)]",
|
||||
" ├─Projection(Build) root test.t2.id2, abs(test.t2.id1)->Column#12",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id2, test.t2.id2) eq(test.t1.id1, Column)]",
|
||||
" ├─Projection(Build) root test.t2.id2, abs(test.t2.id1)->Column",
|
||||
" │ └─IndexReader root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
" └─TableReader(Probe) root data:TableFullScan",
|
||||
@ -125,7 +125,7 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, SUM(t1.id3) FROM t1 WHERE EXISTS ( SELECT 1 FROM t2 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 ) GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, cast(test.t1.id3, decimal(32,0) BINARY)->Column#12",
|
||||
"Projection root test.t1.id1, test.t1.id2, cast(test.t1.id3, decimal(32,0) BINARY)->Column",
|
||||
"└─HashJoin root semi join, left side:TableReader, equal:[eq(test.t1.id1, test.t2.id1) eq(test.t1.id2, test.t2.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -137,8 +137,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1 left join t2 on t1.id1 = t2.id1 and t1.id2 = t2.id2 inner join t3 on t1.id1 = t3.id1 and t1.id2 = t3.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─Projection root 1->Column#16, test.t1.id1, test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root 1->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t3.id1) eq(test.t1.id2, test.t3.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t3, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -153,8 +153,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1 left join t2 on t1.id1 = t2.id1 and t1.id2 = t2.id2 inner join t4 on t1.id1 = t4.id1 and t1.id2 = t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#16, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t4.id1) eq(test.t1.id2, test.t4.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -174,7 +174,7 @@
|
||||
{
|
||||
"SQL": "select /*+ read_from_storage(tiflash[t1]) */ /*+ use_index(t1) */ /*+ agg_to_cop() hash_agg() */ bit_and(t1.col_2) as r0, bit_xor(t1.col_2) as r1 , substring(t1.col_2 ,4) as r2 from t1 where t1.col_1 in ('04:00:09.00' ,'21:06:18.00' ,'18:43:53.00') group by t1.col_1,t1.col_2 having not(t1.col_1 <> '06:32:23.00');",
|
||||
"Plan": [
|
||||
"Projection root ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 18446744073709551615)->Column#7, ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 0)->Column#8, substring(cast(test.t1.col_2, var_string(20)), 4)->Column#9",
|
||||
"Projection root ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 18446744073709551615)->Column, ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 0)->Column, substring(cast(test.t1.col_2, var_string(20)), 4)->Column",
|
||||
"└─TableDual root rows:0"
|
||||
],
|
||||
"Warn": [
|
||||
|
||||
@ -5,8 +5,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, SUM(t1.id3) FROM t1, t2 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─Projection root cast(test.t1.id3, decimal(32,0) BINARY)->Column#11, test.t1.id1, test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root cast(test.t1.id3, decimal(32,0) BINARY)->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t2.id1) eq(test.t1.id2, test.t2.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -18,9 +18,9 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, SUM(t1.id3) FROM t1, t4 WHERE t1.id1=t4.id1 AND t1.id2=t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─HashAgg root group by:Column#16, Column#17, funcs:sum(Column#15)->Column#11, funcs:firstrow(Column#16)->test.t1.id1, funcs:firstrow(Column#17)->test.t1.id2",
|
||||
" └─Projection root cast(test.t1.id3, decimal(10,0) BINARY)->Column#15, test.t1.id1->Column#16, test.t1.id2->Column#17",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.id1, funcs:firstrow(Column)->test.t1.id2",
|
||||
" └─Projection root cast(test.t1.id3, decimal(10,0) BINARY)->Column, test.t1.id1->Column, test.t1.id2->Column",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t4.id1) eq(test.t1.id2, test.t4.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -32,8 +32,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#11, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t2.id1)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -45,8 +45,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2, t3 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 AND t2.id1=t3.id1 AND t2.id2=t3.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─Projection root 1->Column#16, test.t1.id1, test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root 1->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id1, test.t3.id1) eq(test.t2.id2, test.t3.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t3, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -61,8 +61,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2, t4 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 AND t2.id1=t4.id1 AND t2.id2=t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#16, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id1, test.t4.id1) eq(test.t2.id2, test.t4.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -77,8 +77,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2, t3, t4 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 AND t2.id1=t3.id1 AND t2.id2=t3.id2 AND t3.id1=t4.id1 AND t3.id2=t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#21",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#21, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─MergeJoin root inner join, left key:test.t3.id1, test.t3.id2, right key:test.t4.id1, test.t4.id2",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:true, stats:pseudo",
|
||||
@ -97,10 +97,10 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2 WHERE ABS(t1.id1) = t2.id1 AND t1.id2 = t2.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─Projection root 1->Column#11, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id2, test.t1.id2) eq(test.t2.id1, Column#12)]",
|
||||
" ├─Projection(Build) root test.t1.id1, test.t1.id2, abs(test.t1.id1)->Column#12",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root 1->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t2.id2, test.t1.id2) eq(test.t2.id1, Column)]",
|
||||
" ├─Projection(Build) root test.t1.id1, test.t1.id2, abs(test.t1.id1)->Column",
|
||||
" │ └─TableReader root data:TableFullScan",
|
||||
" │ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo",
|
||||
" └─IndexReader(Probe) root index:IndexFullScan",
|
||||
@ -111,10 +111,10 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1, t2 WHERE t1.id1 = ABS(t2.id1) AND t1.id2 = t2.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#11",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#11, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id2, test.t2.id2) eq(test.t1.id1, Column#12)]",
|
||||
" ├─Projection(Build) root test.t2.id2, abs(test.t2.id1)->Column#12",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id2, test.t2.id2) eq(test.t1.id1, Column)]",
|
||||
" ├─Projection(Build) root test.t2.id2, abs(test.t2.id1)->Column",
|
||||
" │ └─IndexReader root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
" └─TableReader(Probe) root data:TableFullScan",
|
||||
@ -125,7 +125,7 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, SUM(t1.id3) FROM t1 WHERE EXISTS ( SELECT 1 FROM t2 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2 ) GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, cast(test.t1.id3, decimal(32,0) BINARY)->Column#12",
|
||||
"Projection root test.t1.id1, test.t1.id2, cast(test.t1.id3, decimal(32,0) BINARY)->Column",
|
||||
"└─HashJoin root semi join, left side:TableReader, equal:[eq(test.t1.id1, test.t2.id1) eq(test.t1.id2, test.t2.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t2, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -137,8 +137,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1 left join t2 on t1.id1 = t2.id1 and t1.id2 = t2.id2 inner join t3 on t1.id1 = t3.id1 and t1.id2 = t3.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─Projection root 1->Column#16, test.t1.id1, test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─Projection root 1->Column, test.t1.id1, test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t3.id1) eq(test.t1.id2, test.t3.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t3, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -153,8 +153,8 @@
|
||||
{
|
||||
"SQL": "SELECT t1.id1, t1.id2, COUNT(t1.id3) FROM t1 left join t2 on t1.id1 = t2.id1 and t1.id2 = t2.id2 inner join t4 on t1.id1 = t4.id1 and t1.id2 = t4.id2 GROUP BY t1.id1, t1.id2;",
|
||||
"Plan": [
|
||||
"Projection root test.t1.id1, test.t1.id2, Column#16",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column#16, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
"Projection root test.t1.id1, test.t1.id2, Column",
|
||||
"└─HashAgg root group by:test.t1.id1, test.t1.id2, funcs:count(test.t1.id3)->Column, funcs:firstrow(test.t1.id1)->test.t1.id1, funcs:firstrow(test.t1.id2)->test.t1.id2",
|
||||
" └─HashJoin root inner join, equal:[eq(test.t1.id1, test.t4.id1) eq(test.t1.id2, test.t4.id2)]",
|
||||
" ├─IndexReader(Build) root index:IndexFullScan",
|
||||
" │ └─IndexFullScan cop[tikv] table:t4, index:UK_id1_id2(id1, id2) keep order:false, stats:pseudo",
|
||||
@ -174,7 +174,7 @@
|
||||
{
|
||||
"SQL": "select /*+ read_from_storage(tiflash[t1]) */ /*+ use_index(t1) */ /*+ agg_to_cop() hash_agg() */ bit_and(t1.col_2) as r0, bit_xor(t1.col_2) as r1 , substring(t1.col_2 ,4) as r2 from t1 where t1.col_1 in ('04:00:09.00' ,'21:06:18.00' ,'18:43:53.00') group by t1.col_1,t1.col_2 having not(t1.col_1 <> '06:32:23.00');",
|
||||
"Plan": [
|
||||
"Projection root ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 18446744073709551615)->Column#7, ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 0)->Column#8, substring(cast(test.t1.col_2, var_string(20)), 4)->Column#9",
|
||||
"Projection root ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 18446744073709551615)->Column, ifnull(cast(test.t1.col_2, bigint(21) UNSIGNED BINARY), 0)->Column, substring(cast(test.t1.col_2, var_string(20)), 4)->Column",
|
||||
"└─TableDual root rows:0"
|
||||
],
|
||||
"Warn": [
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select max(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:max(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:max(test.t.a)->Column",
|
||||
"└─TopN root test.t.a:desc, offset:0, count:1",
|
||||
" └─TableReader root data:TopN",
|
||||
" └─TopN batchCop[tiflash] test.t.a:desc, offset:0, count:1",
|
||||
@ -15,7 +15,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select min(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:min(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:min(test.t.a)->Column",
|
||||
"└─Limit root offset:0, count:1",
|
||||
" └─TableReader root data:Limit",
|
||||
" └─Limit cop[tiflash] offset:0, count:1",
|
||||
@ -30,7 +30,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select max(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:max(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:max(test.t.a)->Column",
|
||||
"└─TopN root test.t.a:desc, offset:0, count:1",
|
||||
" └─TableReader root data:TopN",
|
||||
" └─TopN batchCop[tiflash] test.t.a:desc, offset:0, count:1",
|
||||
@ -40,7 +40,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select min(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:min(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:min(test.t.a)->Column",
|
||||
"└─TopN root test.t.a, offset:0, count:1",
|
||||
" └─TableReader root data:TopN",
|
||||
" └─TopN batchCop[tiflash] test.t.a, offset:0, count:1",
|
||||
@ -57,7 +57,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] mul(test.t.i, 2)->Column#13",
|
||||
" └─Projection mpp[tiflash] mul(test.t.i, 2)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
@ -66,14 +66,14 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] date_format(test.t.t, %Y-%m-%d %H)->Column#13",
|
||||
" └─Projection mpp[tiflash] date_format(test.t.t, %Y-%m-%d %H)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select md5(s) from t; -- we do generate mpp plan, while the cost-cmp failed",
|
||||
"Plan": [
|
||||
"Projection root md5(test.t.s)->Column#13",
|
||||
"Projection root md5(test.t.s)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -92,59 +92,59 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#17)->Column#14",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(Column#19)->Column#17",
|
||||
" └─Projection mpp[tiflash] plus(test.t.id, 1)->Column#19",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(Column)->Column",
|
||||
" └─Projection mpp[tiflash] plus(test.t.id, 1)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(*) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#16)->Column#14",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(test.t._tidb_rowid)->Column#16",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(test.t._tidb_rowid)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ sum(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#17)->Column#14",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(Column#19)->Column#17",
|
||||
" └─Projection mpp[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#19",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection mpp[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#16)->Column#14",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:count(plus(test.t.id, 1))->Column#16",
|
||||
" └─StreamAgg cop[tikv] funcs:count(plus(test.t.id, 1))->Column",
|
||||
" └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(*) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#15)->Column#14",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:count(1)->Column#15",
|
||||
" └─StreamAgg cop[tikv] funcs:count(1)->Column",
|
||||
" └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ sum(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#16)->Column#14",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(plus(test.t.id, 1))->Column#16",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(plus(test.t.id, 1))->Column",
|
||||
" └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
@ -153,13 +153,13 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column#13, Column#26)]",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column, Column)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: Broadcast, Compression: FAST",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#13",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" │ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" │ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column#26",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -167,10 +167,10 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column#25)]",
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column)]",
|
||||
"├─TableReader(Build) root MppVersion: 3, data:ExchangeSender",
|
||||
"│ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#25",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
"│ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
@ -182,10 +182,10 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t left join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column#25)]",
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─TableReader(Build) root MppVersion: 3, data:ExchangeSender",
|
||||
"│ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#25",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
"│ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
@ -196,10 +196,10 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t right join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column#25)]",
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─TableReader(Build) root MppVersion: 3, data:ExchangeSender",
|
||||
"│ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#25",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
"│ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
@ -212,14 +212,14 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#26, Column#13",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column#13, Column#26)]",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column, Column)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: Broadcast, Compression: FAST",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#13",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" │ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" │ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column#26",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -255,7 +255,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column#13",
|
||||
" └─Projection mpp[tiflash] from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
}
|
||||
@ -267,70 +267,70 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#8)->Column#6",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column#9)->Column#8",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column#9",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(*) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#7)->Column#6",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column#7",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ sum(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#8)->Column#6",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:sum(Column#9)->Column#8",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#9",
|
||||
" └─HashAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#8)->Column#6",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(Column#10)->Column#8",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column#10",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(*) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#7)->Column#6",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ sum(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#8)->Column#6",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#10)->Column#8",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#10",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(Column#5, Column#10)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#10",
|
||||
"HashJoin root inner join, equal:[eq(Column, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:Selection",
|
||||
"│ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─Projection(Probe) root minus(test.t.id, 2)->Column#5",
|
||||
"└─Projection(Probe) root minus(test.t.id, 2)->Column",
|
||||
" └─TableReader root data:Selection",
|
||||
" └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -339,8 +339,8 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column#9)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#9",
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:Selection",
|
||||
"│ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
@ -352,8 +352,8 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t left join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column#9)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#9",
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:Selection",
|
||||
"│ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
@ -364,8 +364,8 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t right join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column#9)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#9",
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:TableFullScan",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root data:Selection",
|
||||
@ -376,13 +376,13 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select A.b, B.b from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b",
|
||||
"Plan": [
|
||||
"Projection root Column#10, Column#5",
|
||||
"└─HashJoin root inner join, equal:[eq(Column#5, Column#10)]",
|
||||
" ├─Projection(Build) root minus(test.t.id, 2)->Column#10",
|
||||
"Projection root Column, Column",
|
||||
"└─HashJoin root inner join, equal:[eq(Column, Column)]",
|
||||
" ├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
" │ └─TableReader root data:Selection",
|
||||
" │ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" │ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
" └─Projection(Probe) root minus(test.t.id, 2)->Column#5",
|
||||
" └─Projection(Probe) root minus(test.t.id, 2)->Column",
|
||||
" └─TableReader root data:Selection",
|
||||
" └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -413,7 +413,7 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' SELECT FROM_UNIXTIME(name,'%Y-%m-%d') FROM t;",
|
||||
"Plan": [
|
||||
"Projection root from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column#5",
|
||||
"Projection root from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column",
|
||||
"└─TableReader root data:TableFullScan",
|
||||
" └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -443,12 +443,12 @@
|
||||
"SQL": "explain format = 'plan_tree' select * from t where b > 'a' order by convert(b, unsigned) limit 2",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b",
|
||||
"└─TopN root Column#4, offset:0, count:2",
|
||||
" └─Projection root test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column#4",
|
||||
"└─TopN root Column, offset:0, count:2",
|
||||
" └─Projection root test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column",
|
||||
" └─TableReader root data:Projection",
|
||||
" └─Projection batchCop[tiflash] test.t.a, test.t.b",
|
||||
" └─TopN batchCop[tiflash] Column#3, offset:0, count:2",
|
||||
" └─Projection batchCop[tiflash] test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column#3",
|
||||
" └─TopN batchCop[tiflash] Column, offset:0, count:2",
|
||||
" └─Projection batchCop[tiflash] test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column",
|
||||
" └─Selection batchCop[tiflash] gt(test.t.b, \"a\")",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select max(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:max(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:max(test.t.a)->Column",
|
||||
"└─TopN root test.t.a:desc, offset:0, count:1",
|
||||
" └─TableReader root data:TopN",
|
||||
" └─TopN batchCop[tiflash] test.t.a:desc, offset:0, count:1",
|
||||
@ -15,7 +15,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select min(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:min(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:min(test.t.a)->Column",
|
||||
"└─Limit root offset:0, count:1",
|
||||
" └─TableReader root data:Limit",
|
||||
" └─Limit cop[tiflash] offset:0, count:1",
|
||||
@ -30,7 +30,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select max(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:max(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:max(test.t.a)->Column",
|
||||
"└─TopN root test.t.a:desc, offset:0, count:1",
|
||||
" └─TableReader root data:TopN",
|
||||
" └─TopN batchCop[tiflash] test.t.a:desc, offset:0, count:1",
|
||||
@ -40,7 +40,7 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select min(a) from t",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:min(test.t.a)->Column#3",
|
||||
"StreamAgg root funcs:min(test.t.a)->Column",
|
||||
"└─TopN root test.t.a, offset:0, count:1",
|
||||
" └─TableReader root data:TopN",
|
||||
" └─TopN batchCop[tiflash] test.t.a, offset:0, count:1",
|
||||
@ -57,7 +57,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] mul(test.t.i, 2)->Column#13",
|
||||
" └─Projection mpp[tiflash] mul(test.t.i, 2)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
@ -66,14 +66,14 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] date_format(test.t.t, %Y-%m-%d %H)->Column#13",
|
||||
" └─Projection mpp[tiflash] date_format(test.t.t, %Y-%m-%d %H)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select md5(s) from t; -- we do generate mpp plan, while the cost-cmp failed",
|
||||
"Plan": [
|
||||
"Projection root md5(test.t.s)->Column#13",
|
||||
"Projection root md5(test.t.s)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -92,59 +92,59 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#17)->Column#14",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(Column#19)->Column#17",
|
||||
" └─Projection mpp[tiflash] plus(test.t.id, 1)->Column#19",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(Column)->Column",
|
||||
" └─Projection mpp[tiflash] plus(test.t.id, 1)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(*) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#16)->Column#14",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(test.t._tidb_rowid)->Column#16",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(test.t._tidb_rowid)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ sum(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#17)->Column#14",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(Column#19)->Column#17",
|
||||
" └─Projection mpp[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#19",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection mpp[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#16)->Column#14",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:count(plus(test.t.id, 1))->Column#16",
|
||||
" └─StreamAgg cop[tikv] funcs:count(plus(test.t.id, 1))->Column",
|
||||
" └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(*) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#15)->Column#14",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:count(1)->Column#15",
|
||||
" └─StreamAgg cop[tikv] funcs:count(1)->Column",
|
||||
" └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ sum(b) from (select id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#16)->Column#14",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(plus(test.t.id, 1))->Column#16",
|
||||
" └─StreamAgg cop[tikv] funcs:sum(plus(test.t.id, 1))->Column",
|
||||
" └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
@ -153,13 +153,13 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column#13, Column#26)]",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column, Column)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: Broadcast, Compression: FAST",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#13",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" │ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" │ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column#26",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -167,10 +167,10 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column#25)]",
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column)]",
|
||||
"├─TableReader(Build) root MppVersion: 3, data:ExchangeSender",
|
||||
"│ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#25",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
"│ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
@ -182,10 +182,10 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t left join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column#25)]",
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─TableReader(Build) root MppVersion: 3, data:ExchangeSender",
|
||||
"│ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#25",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
"│ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
@ -196,10 +196,10 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t right join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column#25)]",
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─TableReader(Build) root MppVersion: 3, data:ExchangeSender",
|
||||
"│ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#25",
|
||||
"│ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
"│ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
@ -212,14 +212,14 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#26, Column#13",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column#13, Column#26)]",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(Column, Column)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: Broadcast, Compression: FAST",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column#13",
|
||||
" │ └─Projection mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" │ └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" │ └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column#26",
|
||||
" └─Projection(Probe) mpp[tiflash] minus(test.t.id, 2)->Column",
|
||||
" └─Selection mpp[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -255,7 +255,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column#13",
|
||||
" └─Projection mpp[tiflash] from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column",
|
||||
" └─TableFullScan mpp[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
}
|
||||
@ -267,70 +267,70 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#8)->Column#6",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column#9)->Column#8",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column#9",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ count(*) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#7)->Column#6",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column#7",
|
||||
" └─HashAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ hash_agg()*/ sum(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#8)->Column#6",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:HashAgg",
|
||||
" └─HashAgg batchCop[tiflash] funcs:sum(Column#9)->Column#8",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#9",
|
||||
" └─HashAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#8)->Column#6",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(Column#10)->Column#8",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column#10",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] plus(test.t.id, 1)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ count(*) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#7)->Column#6",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column#7",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select /*+ stream_agg()*/ sum(b) from (select /*+ read_from_storage(tiflash[t]) */ id + 1 as b from t)A",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:sum(Column#8)->Column#6",
|
||||
"StreamAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column#10)->Column#8",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#10",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:sum(Column)->Column",
|
||||
" └─Projection batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(Column#5, Column#10)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#10",
|
||||
"HashJoin root inner join, equal:[eq(Column, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:Selection",
|
||||
"│ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─Projection(Probe) root minus(test.t.id, 2)->Column#5",
|
||||
"└─Projection(Probe) root minus(test.t.id, 2)->Column",
|
||||
" └─TableReader root data:Selection",
|
||||
" └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -339,8 +339,8 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column#9)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#9",
|
||||
"HashJoin root inner join, equal:[eq(test.t.id, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:Selection",
|
||||
"│ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
@ -352,8 +352,8 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t left join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column#9)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#9",
|
||||
"HashJoin root left outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:Selection",
|
||||
"│ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
@ -364,8 +364,8 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select * from t right join (select id-2 as b from t) A on A.b=t.id",
|
||||
"Plan": [
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column#9)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column#9",
|
||||
"HashJoin root right outer join, left side:TableReader, equal:[eq(test.t.id, Column)]",
|
||||
"├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
"│ └─TableReader root data:TableFullScan",
|
||||
"│ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
"└─TableReader(Probe) root data:Selection",
|
||||
@ -376,13 +376,13 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' select A.b, B.b from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b",
|
||||
"Plan": [
|
||||
"Projection root Column#10, Column#5",
|
||||
"└─HashJoin root inner join, equal:[eq(Column#5, Column#10)]",
|
||||
" ├─Projection(Build) root minus(test.t.id, 2)->Column#10",
|
||||
"Projection root Column, Column",
|
||||
"└─HashJoin root inner join, equal:[eq(Column, Column)]",
|
||||
" ├─Projection(Build) root minus(test.t.id, 2)->Column",
|
||||
" │ └─TableReader root data:Selection",
|
||||
" │ └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" │ └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo",
|
||||
" └─Projection(Probe) root minus(test.t.id, 2)->Column#5",
|
||||
" └─Projection(Probe) root minus(test.t.id, 2)->Column",
|
||||
" └─TableReader root data:Selection",
|
||||
" └─Selection cop[tiflash] not(isnull(minus(test.t.id, 2)))",
|
||||
" └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
@ -413,7 +413,7 @@
|
||||
{
|
||||
"SQL": "desc format = 'plan_tree' SELECT FROM_UNIXTIME(name,'%Y-%m-%d') FROM t;",
|
||||
"Plan": [
|
||||
"Projection root from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column#5",
|
||||
"Projection root from_unixtime(cast(test.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column",
|
||||
"└─TableReader root data:TableFullScan",
|
||||
" └─TableFullScan cop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -443,12 +443,12 @@
|
||||
"SQL": "explain format = 'plan_tree' select * from t where b > 'a' order by convert(b, unsigned) limit 2",
|
||||
"Plan": [
|
||||
"Projection root test.t.a, test.t.b",
|
||||
"└─TopN root Column#4, offset:0, count:2",
|
||||
" └─Projection root test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column#4",
|
||||
"└─TopN root Column, offset:0, count:2",
|
||||
" └─Projection root test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column",
|
||||
" └─TableReader root data:Projection",
|
||||
" └─Projection batchCop[tiflash] test.t.a, test.t.b",
|
||||
" └─TopN batchCop[tiflash] Column#3, offset:0, count:2",
|
||||
" └─Projection batchCop[tiflash] test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column#3",
|
||||
" └─TopN batchCop[tiflash] Column, offset:0, count:2",
|
||||
" └─Projection batchCop[tiflash] test.t.a, test.t.b, cast(test.t.b, bigint(22) UNSIGNED BINARY)->Column",
|
||||
" └─Selection batchCop[tiflash] gt(test.t.b, \"a\")",
|
||||
" └─TableFullScan batchCop[tiflash] table:t keep order:false, stats:pseudo"
|
||||
]
|
||||
|
||||
@ -105,16 +105,16 @@ from t
|
||||
)
|
||||
select 'ok' from dual
|
||||
where ('1',1) in (select name, id from tmp);`).Check(testkit.Rows(
|
||||
`Projection root ok->Column#13`,
|
||||
`Projection root ok->Column`,
|
||||
`└─HashJoin root CARTESIAN inner join`,
|
||||
` ├─TableDual(Build) root rows:1`,
|
||||
` └─HashAgg(Probe) root group by:Column#11, Column#12, funcs:firstrow(1)->Column#18`,
|
||||
` └─Selection root eq(Column#11, "1"), eq(Column#12, 1)`,
|
||||
` └─HashAgg(Probe) root group by:Column, Column, funcs:firstrow(1)->Column`,
|
||||
` └─Selection root eq(Column, "1"), eq(Column, 1)`,
|
||||
` └─Window root row_number()->Column#12 over(rows between current row and current row)`,
|
||||
` └─Apply root CARTESIAN left outer join, left side:TableReader`,
|
||||
` ├─TableReader(Build) root data:TableFullScan`,
|
||||
` │ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo`,
|
||||
` └─Projection(Probe) root 1->Column#11`,
|
||||
` └─Projection(Probe) root 1->Column`,
|
||||
` └─Selection root eq(test.t.id, 2)`,
|
||||
` └─TableDual root rows:1`))
|
||||
// https://github.com/pingcap/tidb/issues/61327
|
||||
@ -131,14 +131,14 @@ FROM t0
|
||||
INNER JOIN t3 ON (((((CASE 1
|
||||
WHEN subQuery1.col_2 THEN t3.c0
|
||||
ELSE NULL END)) AND (((t0.c0))))) < 1);`).
|
||||
Check(testkit.Rows(`Projection root test.t0.c0, Column#5, test.t3.c0`,
|
||||
`└─HashJoin root CARTESIAN inner join, other cond:lt(and(case(eq(1, cast(Column#5, double BINARY)), test.t3.c0, NULL), test.t0.c0), 1)`,
|
||||
Check(testkit.Rows(`Projection root test.t0.c0, Column, test.t3.c0`,
|
||||
`└─HashJoin root CARTESIAN inner join, other cond:lt(and(case(eq(1, cast(Column, double BINARY)), test.t3.c0, NULL), test.t0.c0), 1)`,
|
||||
` ├─TableReader(Build) root data:TableFullScan`,
|
||||
` │ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo`,
|
||||
` └─HashJoin(Probe) root CARTESIAN left outer join, left side:TableReader`,
|
||||
` ├─TableReader(Build) root data:TableFullScan`,
|
||||
` │ └─TableFullScan cop[tikv] table:t0 keep order:false, stats:pseudo`,
|
||||
` └─Projection(Probe) root <nil>->Column#5`,
|
||||
` └─Projection(Probe) root <nil>->Column`,
|
||||
` └─TableReader root data:TableFullScan`,
|
||||
` └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo`))
|
||||
tk.MustQuery(`SELECT *
|
||||
@ -160,9 +160,9 @@ FROM t0
|
||||
tk.MustQuery(`explain format='plan_tree' select 1 from chqin where '2008-05-28' NOT IN
|
||||
(select a1.f1 from chqin a1 NATURAL RIGHT JOIN chqin2 a2 WHERE a2.f1 >='1990-11-27' union select f1 from chqin where id=5);`).
|
||||
Check(testkit.Rows(
|
||||
`Projection root 1->Column#14`,
|
||||
`└─HashJoin root Null-aware anti semi join, left side:Projection, equal:[eq(Column#16, Column#13)]`,
|
||||
` ├─HashAgg(Build) root group by:Column#13, funcs:firstrow(Column#13)->Column#13`,
|
||||
`Projection root 1->Column`,
|
||||
`└─HashJoin root Null-aware anti semi join, left side:Projection, equal:[eq(Column, Column)]`,
|
||||
` ├─HashAgg(Build) root group by:Column, funcs:firstrow(Column)->Column`,
|
||||
` │ └─Union root `,
|
||||
` │ ├─HashJoin root right outer join, left side:TableReader, equal:[eq(test.chqin.id, test.chqin2.id) eq(test.chqin.f1, test.chqin2.f1)]`,
|
||||
` │ │ ├─TableReader(Build) root data:Selection`,
|
||||
@ -172,10 +172,10 @@ FROM t0
|
||||
` │ │ └─Selection cop[tikv] ge(test.chqin2.f1, 1990-11-27 00:00:00.000000)`,
|
||||
` │ │ └─TableFullScan cop[tikv] table:a2 keep order:false, stats:pseudo`,
|
||||
` │ └─TableReader root data:Projection`,
|
||||
` │ └─Projection cop[tikv] test.chqin.f1->Column#13`,
|
||||
` │ └─Projection cop[tikv] test.chqin.f1->Column`,
|
||||
` │ └─Selection cop[tikv] eq(test.chqin.id, 5)`,
|
||||
` │ └─TableFullScan cop[tikv] table:chqin keep order:false, stats:pseudo`,
|
||||
` └─Projection(Probe) root 2008-05-28 00:00:00.000000->Column#16`,
|
||||
` └─Projection(Probe) root 2008-05-28 00:00:00.000000->Column`,
|
||||
` └─TableReader root data:TableFullScan`,
|
||||
` └─TableFullScan cop[tikv] table:chqin keep order:false, stats:pseudo`))
|
||||
tk.MustQuery(`select 1 from chqin where '2008-05-28' NOT IN
|
||||
|
||||
@ -5,9 +5,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from t31240;",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column#6",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t31240 keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
@ -18,9 +18,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from t31240;",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column#6",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t31240 keep order:false, stats:pseudo"
|
||||
]
|
||||
}
|
||||
@ -246,13 +246,13 @@
|
||||
"SQL": "explain format = 'plan_tree' SELECT table2 . `col_char_64` AS field1 FROM `ts` AS table2 INNER JOIN (SELECT DISTINCT SUBQUERY3_t1 . * FROM `ts` AS SUBQUERY3_t1 LEFT OUTER JOIN `ts` AS SUBQUERY3_t2 ON SUBQUERY3_t2 . `col_varchar_64_not_null` = SUBQUERY3_t1 . `col_varchar_key`) AS table3 ON (table3 . `col_varchar_key` = table2 . `col_varchar_64`) WHERE table3 . `col_char_64_not_null` >= SOME (SELECT SUBQUERY4_t1 . `col_varchar_64` AS SUBQUERY4_field1 FROM `ts` AS SUBQUERY4_t1) GROUP BY field1 ;",
|
||||
"Plan": [
|
||||
"HashAgg root group by:test.ts.col_char_64, funcs:firstrow(test.ts.col_char_64)->test.ts.col_char_64",
|
||||
"└─HashJoin root CARTESIAN inner join, other cond:or(ge(test.ts.col_char_64_not_null, Column#25), if(ne(Column#26, 0), NULL, 0))",
|
||||
" ├─Selection(Build) root ne(Column#27, 0)",
|
||||
" │ └─HashAgg root funcs:min(Column#36)->Column#25, funcs:sum(Column#37)->Column#26, funcs:count(Column#38)->Column#27",
|
||||
"└─HashJoin root CARTESIAN inner join, other cond:or(ge(test.ts.col_char_64_not_null, Column), if(ne(Column, 0), NULL, 0))",
|
||||
" ├─Selection(Build) root ne(Column, 0)",
|
||||
" │ └─HashAgg root funcs:min(Column)->Column, funcs:sum(Column)->Column, funcs:count(Column)->Column",
|
||||
" │ └─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" │ └─HashAgg mpp[tiflash] funcs:min(Column#42)->Column#36, funcs:sum(Column#43)->Column#37, funcs:count(1)->Column#38",
|
||||
" │ └─Projection mpp[tiflash] test.ts.col_varchar_64->Column#42, cast(isnull(test.ts.col_varchar_64), decimal(20,0) BINARY)->Column#43",
|
||||
" │ └─HashAgg mpp[tiflash] funcs:min(Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column",
|
||||
" │ └─Projection mpp[tiflash] test.ts.col_varchar_64->Column, cast(isnull(test.ts.col_varchar_64), decimal(20,0) BINARY)->Column",
|
||||
" │ └─TableFullScan mpp[tiflash] table:SUBQUERY4_t1 keep order:false, stats:pseudo",
|
||||
" └─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
@ -997,10 +997,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select sum(ps_supplycost) from partsupp, supplier where ps_suppkey = s_suppkey;",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#15)->Column#14",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(test.partsupp.ps_supplycost)->Column#15",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(test.partsupp.ps_supplycost)->Column",
|
||||
" └─Projection mpp[tiflash] test.partsupp.ps_supplycost",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(test.supplier.s_suppkey, test.partsupp.ps_suppkey)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
@ -1035,10 +1035,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from rp_t where a = 1 or a = 20",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#4)->Column#3",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root partition:p0,p3 MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column#4",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column",
|
||||
" └─Selection mpp[tiflash] or(eq(test.rp_t.a, 1), eq(test.rp_t.a, 20))",
|
||||
" └─TableFullScan mpp[tiflash] table:rp_t keep order:false, stats:pseudo, PartitionTableScan:true"
|
||||
]
|
||||
@ -1046,10 +1046,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from hp_t where a = 1 or a = 20",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#4)->Column#3",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root partition:p0,p1 MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column#4",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column",
|
||||
" └─Selection mpp[tiflash] or(eq(test.hp_t.a, 1), eq(test.hp_t.a, 20))",
|
||||
" └─TableFullScan mpp[tiflash] table:hp_t keep order:false, stats:pseudo, PartitionTableScan:true"
|
||||
]
|
||||
@ -1064,7 +1064,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1074,7 +1074,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1087,7 +1087,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#7->Column#8, Column#6->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1101,7 +1101,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#7->Column#8, Column#6->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1116,11 +1116,11 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select row_number() over w1, rank() over w2 from t1 window w1 as (partition by c1 order by c1), w2 as (partition by c2) order by 1, 2 limit 10;",
|
||||
"Plan": [
|
||||
"Projection root Column#7->Column#8, Column#6->Column#9",
|
||||
"└─TopN root Column#7, Column#6, offset:0, count:10",
|
||||
"Projection root Column, Column",
|
||||
"└─TopN root Column, Column, offset:0, count:10",
|
||||
" └─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#7, Column#6, offset:0, count:10",
|
||||
" └─TopN mpp[tiflash] Column, Column, offset:0, count:10",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1132,11 +1132,11 @@
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"Projection root Column#7->Column#8, Column#6->Column#9",
|
||||
"└─TopN root Column#7, Column#6, offset:?, count:?",
|
||||
"Projection root Column, Column",
|
||||
"└─TopN root Column, Column, offset:?, count:?",
|
||||
" └─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#7, Column#6, offset:?, count:?",
|
||||
" └─TopN mpp[tiflash] Column, Column, offset:?, count:?",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1153,32 +1153,32 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c2 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c2, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, 10)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c2 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c2, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, ?)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -1188,32 +1188,32 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column#9, funcs:firstrow(test.t1.c1)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column, funcs:firstrow(test.t1.c1)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c2, 10)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column#9, funcs:firstrow(test.t1.c1)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column, funcs:firstrow(test.t1.c1)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c2, ?)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -1223,7 +1223,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#8->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#8 over(partition by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1240,7 +1240,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#8->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#8 over(partition by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1260,7 +1260,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1271,7 +1271,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1298,7 +1298,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6",
|
||||
" └─Projection mpp[tiflash] Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(order by test.t1.c1 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
@ -1308,7 +1308,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6",
|
||||
" └─Projection mpp[tiflash] Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(order by test.t1.c1 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
@ -1321,28 +1321,28 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column#11)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#11",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, 10)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column#11)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#11",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, ?)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -1370,10 +1370,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from t1 ta, t1 tb where ta.c1 * ta.c1 > ta.c2 + 10;",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#8)->Column#7",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column#8",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column",
|
||||
" └─Projection mpp[tiflash] test.t1.c1",
|
||||
" └─HashJoin mpp[tiflash] CARTESIAN inner join",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
|
||||
@ -5,9 +5,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from t31240;",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column#6",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t31240 keep order:false, stats:pseudo"
|
||||
]
|
||||
},
|
||||
@ -18,9 +18,9 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from t31240;",
|
||||
"Plan": [
|
||||
"StreamAgg root funcs:count(Column#6)->Column#4",
|
||||
"StreamAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root data:StreamAgg",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column#6",
|
||||
" └─StreamAgg batchCop[tiflash] funcs:count(test.t31240._tidb_rowid)->Column",
|
||||
" └─TableFullScan batchCop[tiflash] table:t31240 keep order:false, stats:pseudo"
|
||||
]
|
||||
}
|
||||
@ -246,13 +246,13 @@
|
||||
"SQL": "explain format = 'plan_tree' SELECT table2 . `col_char_64` AS field1 FROM `ts` AS table2 INNER JOIN (SELECT DISTINCT SUBQUERY3_t1 . * FROM `ts` AS SUBQUERY3_t1 LEFT OUTER JOIN `ts` AS SUBQUERY3_t2 ON SUBQUERY3_t2 . `col_varchar_64_not_null` = SUBQUERY3_t1 . `col_varchar_key`) AS table3 ON (table3 . `col_varchar_key` = table2 . `col_varchar_64`) WHERE table3 . `col_char_64_not_null` >= SOME (SELECT SUBQUERY4_t1 . `col_varchar_64` AS SUBQUERY4_field1 FROM `ts` AS SUBQUERY4_t1) GROUP BY field1 ;",
|
||||
"Plan": [
|
||||
"HashAgg root group by:test.ts.col_char_64, funcs:firstrow(test.ts.col_char_64)->test.ts.col_char_64",
|
||||
"└─HashJoin root CARTESIAN inner join, other cond:or(ge(test.ts.col_char_64_not_null, Column#25), if(ne(Column#26, 0), NULL, 0))",
|
||||
" ├─Selection(Build) root ne(Column#27, 0)",
|
||||
" │ └─HashAgg root funcs:min(Column#36)->Column#25, funcs:sum(Column#37)->Column#26, funcs:count(Column#38)->Column#27",
|
||||
"└─HashJoin root CARTESIAN inner join, other cond:or(ge(test.ts.col_char_64_not_null, Column), if(ne(Column, 0), NULL, 0))",
|
||||
" ├─Selection(Build) root ne(Column, 0)",
|
||||
" │ └─HashAgg root funcs:min(Column)->Column, funcs:sum(Column)->Column, funcs:count(Column)->Column",
|
||||
" │ └─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" │ └─HashAgg mpp[tiflash] funcs:min(Column#42)->Column#36, funcs:sum(Column#43)->Column#37, funcs:count(1)->Column#38",
|
||||
" │ └─Projection mpp[tiflash] test.ts.col_varchar_64->Column#42, cast(isnull(test.ts.col_varchar_64), decimal(20,0) BINARY)->Column#43",
|
||||
" │ └─HashAgg mpp[tiflash] funcs:min(Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column",
|
||||
" │ └─Projection mpp[tiflash] test.ts.col_varchar_64->Column, cast(isnull(test.ts.col_varchar_64), decimal(20,0) BINARY)->Column",
|
||||
" │ └─TableFullScan mpp[tiflash] table:SUBQUERY4_t1 keep order:false, stats:pseudo",
|
||||
" └─TableReader(Probe) root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
@ -997,10 +997,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select sum(ps_supplycost) from partsupp, supplier where ps_suppkey = s_suppkey;",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:sum(Column#15)->Column#14",
|
||||
"HashAgg root funcs:sum(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(test.partsupp.ps_supplycost)->Column#15",
|
||||
" └─HashAgg mpp[tiflash] funcs:sum(test.partsupp.ps_supplycost)->Column",
|
||||
" └─Projection mpp[tiflash] test.partsupp.ps_supplycost",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(test.supplier.s_suppkey, test.partsupp.ps_suppkey)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
@ -1035,10 +1035,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from rp_t where a = 1 or a = 20",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#4)->Column#3",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root partition:p0,p3 MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column#4",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column",
|
||||
" └─Selection mpp[tiflash] or(eq(test.rp_t.a, 1), eq(test.rp_t.a, 20))",
|
||||
" └─TableFullScan mpp[tiflash] table:rp_t keep order:false, stats:pseudo, PartitionTableScan:true"
|
||||
]
|
||||
@ -1046,10 +1046,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from hp_t where a = 1 or a = 20",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#4)->Column#3",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root partition:p0,p1 MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column#4",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column",
|
||||
" └─Selection mpp[tiflash] or(eq(test.hp_t.a, 1), eq(test.hp_t.a, 20))",
|
||||
" └─TableFullScan mpp[tiflash] table:hp_t keep order:false, stats:pseudo, PartitionTableScan:true"
|
||||
]
|
||||
@ -1064,7 +1064,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1074,7 +1074,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1087,7 +1087,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#7->Column#8, Column#6->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1101,7 +1101,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#7->Column#8, Column#6->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1116,11 +1116,11 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select row_number() over w1, rank() over w2 from t1 window w1 as (partition by c1 order by c1), w2 as (partition by c2) order by 1, 2 limit 10;",
|
||||
"Plan": [
|
||||
"Projection root Column#7->Column#8, Column#6->Column#9",
|
||||
"└─TopN root Column#7, Column#6, offset:0, count:10",
|
||||
"Projection root Column, Column",
|
||||
"└─TopN root Column, Column, offset:0, count:10",
|
||||
" └─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#7, Column#6, offset:0, count:10",
|
||||
" └─TopN mpp[tiflash] Column, Column, offset:0, count:10",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1132,11 +1132,11 @@
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"Projection root Column#7->Column#8, Column#6->Column#9",
|
||||
"└─TopN root Column#7, Column#6, offset:?, count:?",
|
||||
"Projection root Column, Column",
|
||||
"└─TopN root Column, Column, offset:?, count:?",
|
||||
" └─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─TopN mpp[tiflash] Column#7, Column#6, offset:?, count:?",
|
||||
" └─TopN mpp[tiflash] Column, Column, offset:?, count:?",
|
||||
" └─Window mpp[tiflash] row_number()->Column#7 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1153,32 +1153,32 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c2 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c2, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, 10)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c2 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c2, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, ?)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -1188,32 +1188,32 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column#9, funcs:firstrow(test.t1.c1)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column, funcs:firstrow(test.t1.c1)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c2, 10)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary], stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column#9)->Column#4, funcs:firstrow(Column#10)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:sum(Column)->Column, funcs:firstrow(Column)->test.t1.c1, funcs:firstrow(test.t1.c2)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c2, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column#9, funcs:firstrow(test.t1.c1)->Column#10",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c2, funcs:count(test.t1.c1)->Column, funcs:firstrow(test.t1.c1)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c2, ?)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -1223,7 +1223,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#8->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#8 over(partition by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1240,7 +1240,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#8->Column#9, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#8 over(partition by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1260,7 +1260,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1271,7 +1271,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6, stream_count: 8",
|
||||
" └─Projection mpp[tiflash] Column, stream_count: 8",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(partition by test.t1.c1 order by test.t1.c1 rows between current row and current row), stream_count: 8",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c1, stream_count: 8",
|
||||
" └─ExchangeReceiver mpp[tiflash] stream_count: 8",
|
||||
@ -1298,7 +1298,7 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6",
|
||||
" └─Projection mpp[tiflash] Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(order by test.t1.c1 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
@ -1308,7 +1308,7 @@
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#5->Column#6",
|
||||
" └─Projection mpp[tiflash] Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#5 over(order by test.t1.c1 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
@ -1321,28 +1321,28 @@
|
||||
"Plan": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column#11)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#11",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, 10)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
],
|
||||
"Redact": [
|
||||
"TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
"└─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] Column#6->Column#7, Column#4->Column#8",
|
||||
" └─Projection mpp[tiflash] Column, Column",
|
||||
" └─Window mpp[tiflash] row_number()->Column#6 over(partition by test.t1.c1 order by test.t1.c2 rows between current row and current row)",
|
||||
" └─Sort mpp[tiflash] test.t1.c1, test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column#4, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column#9)->Column#4, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column#11)->test.t1.c2",
|
||||
" └─Projection mpp[tiflash] Column, test.t1.c1, test.t1.c2",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:sum(Column)->Column, funcs:firstrow(test.t1.c1)->test.t1.c1, funcs:firstrow(Column)->test.t1.c2",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.c1, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column#9, funcs:firstrow(test.t1.c2)->Column#11",
|
||||
" └─HashAgg mpp[tiflash] group by:test.t1.c1, funcs:count(test.t1.c2)->Column, funcs:firstrow(test.t1.c2)->Column",
|
||||
" └─Selection mpp[tiflash] gt(test.t1.c1, ?)",
|
||||
" └─TableFullScan mpp[tiflash] table:t1 keep order:false, stats:pseudo"
|
||||
]
|
||||
@ -1370,10 +1370,10 @@
|
||||
{
|
||||
"SQL": "explain format = 'plan_tree' select count(*) from t1 ta, t1 tb where ta.c1 * ta.c1 > ta.c2 + 10;",
|
||||
"Plan": [
|
||||
"HashAgg root funcs:count(Column#8)->Column#7",
|
||||
"HashAgg root funcs:count(Column)->Column",
|
||||
"└─TableReader root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column#8",
|
||||
" └─HashAgg mpp[tiflash] funcs:count(1)->Column",
|
||||
" └─Projection mpp[tiflash] test.t1.c1",
|
||||
" └─HashJoin mpp[tiflash] CARTESIAN inner join",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
|
||||
@ -105,7 +105,7 @@
|
||||
"estRows": "12487.50",
|
||||
"actRows": "0",
|
||||
"taskType": "root",
|
||||
"executeInfo": "time:71.8µs, open:41.1µs, close:3.29µs, loops:1",
|
||||
"executeInfo": "time:96.1µs, open:24.8µs, close:2.58µs, loops:1",
|
||||
"operatorInfo": "inner join, left key:test.t1.id, right key:test.t2.id",
|
||||
"memoryInfo": "760 Bytes",
|
||||
"diskInfo": "0 Bytes",
|
||||
@ -115,9 +115,9 @@
|
||||
"estRows": "9990.00",
|
||||
"actRows": "0",
|
||||
"taskType": "root",
|
||||
"executeInfo": "time:25.2µs, open:12.4µs, close:209ns, loops:1, cop_task: {num: 1, max: 14.6µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 500ns, max_distsql_concurrency: 1}, fetch_resp_duration: 8.33µs, rpc_info:{Cop:{num_rpc:1, total_time:12.3µs}}",
|
||||
"executeInfo": "time:29µs, open:5µs, close:209ns, loops:1, cop_task: {num: 1, max: 27.1µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 625ns, max_distsql_concurrency: 1}, fetch_resp_duration: 13.2µs, rpc_info:{Cop:{num_rpc:1, total_time:24µs}}",
|
||||
"operatorInfo": "index:IndexFullScan_27",
|
||||
"memoryInfo": "181 Bytes",
|
||||
"memoryInfo": "182 Bytes",
|
||||
"diskInfo": "N/A",
|
||||
"subOperators": [
|
||||
{
|
||||
@ -126,7 +126,7 @@
|
||||
"actRows": "0",
|
||||
"taskType": "cop[tikv]",
|
||||
"accessObject": "table:t2, index:id(id)",
|
||||
"executeInfo": "tikv_task:{time:9.21µs, loops:0}",
|
||||
"executeInfo": "tikv_task:{time:19.9µs, loops:0}",
|
||||
"operatorInfo": "keep order:true, stats:pseudo",
|
||||
"memoryInfo": "N/A",
|
||||
"diskInfo": "N/A"
|
||||
@ -138,7 +138,7 @@
|
||||
"estRows": "9990.00",
|
||||
"actRows": "0",
|
||||
"taskType": "root",
|
||||
"executeInfo": "time:18.8µs, open:4.63µs, close:959ns, loops:1, cop_task: {num: 1, max: 9.67µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 792ns, max_distsql_concurrency: 1}, fetch_resp_duration: 11.8µs, rpc_info:{Cop:{num_rpc:1, total_time:8.08µs}}",
|
||||
"executeInfo": "time:28.5µs, open:10µs, close:1.25µs, loops:1, cop_task: {num: 1, max: 10.6µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 1.29µs, max_distsql_concurrency: 1}, fetch_resp_duration: 12.6µs, rpc_info:{Cop:{num_rpc:1, total_time:9.08µs}}",
|
||||
"operatorInfo": "index:IndexFullScan_25",
|
||||
"memoryInfo": "181 Bytes",
|
||||
"diskInfo": "N/A",
|
||||
@ -149,7 +149,7 @@
|
||||
"actRows": "0",
|
||||
"taskType": "cop[tikv]",
|
||||
"accessObject": "table:t1, index:id(id)",
|
||||
"executeInfo": "tikv_task:{time:5.83µs, loops:0}",
|
||||
"executeInfo": "tikv_task:{time:6.92µs, loops:0}",
|
||||
"operatorInfo": "keep order:true, stats:pseudo",
|
||||
"memoryInfo": "N/A",
|
||||
"diskInfo": "N/A"
|
||||
|
||||
@ -105,7 +105,7 @@
|
||||
"estRows": "12487.50",
|
||||
"actRows": "0",
|
||||
"taskType": "root",
|
||||
"executeInfo": "time:218.1µs, open:21.8µs, close:2.71µs, loops:1",
|
||||
"executeInfo": "time:92.9µs, open:16.8µs, close:3.83µs, loops:1",
|
||||
"operatorInfo": "inner join, left key:test.t1.id, right key:test.t2.id",
|
||||
"memoryInfo": "760 Bytes",
|
||||
"diskInfo": "0 Bytes",
|
||||
@ -115,7 +115,7 @@
|
||||
"estRows": "9990.00",
|
||||
"actRows": "0",
|
||||
"taskType": "root",
|
||||
"executeInfo": "time:130.6µs, open:5.29µs, close:167ns, loops:1, cop_task: {num: 1, max: 106.6µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 333ns, max_distsql_concurrency: 1}, fetch_resp_duration: 121.3µs, rpc_info:{Cop:{num_rpc:1, total_time:93µs}}",
|
||||
"executeInfo": "time:48µs, open:6.54µs, close:291ns, loops:1, cop_task: {num: 1, max: 25.6µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 583ns, max_distsql_concurrency: 1}, fetch_resp_duration: 38µs, rpc_info:{Cop:{num_rpc:1, total_time:22.4µs}}",
|
||||
"operatorInfo": "index:IndexFullScan_27",
|
||||
"memoryInfo": "182 Bytes",
|
||||
"diskInfo": "N/A",
|
||||
@ -126,7 +126,7 @@
|
||||
"actRows": "0",
|
||||
"taskType": "cop[tikv]",
|
||||
"accessObject": "table:t2, index:id(id)",
|
||||
"executeInfo": "tikv_task:{time:88µs, loops:0}",
|
||||
"executeInfo": "tikv_task:{time:18.7µs, loops:0}",
|
||||
"operatorInfo": "keep order:true, stats:pseudo",
|
||||
"memoryInfo": "N/A",
|
||||
"diskInfo": "N/A"
|
||||
@ -138,7 +138,7 @@
|
||||
"estRows": "9990.00",
|
||||
"actRows": "0",
|
||||
"taskType": "root",
|
||||
"executeInfo": "time:76.1µs, open:9.13µs, close:958ns, loops:1, cop_task: {num: 1, max: 62.5µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 1.5µs, max_distsql_concurrency: 1}, fetch_resp_duration: 64.7µs, rpc_info:{Cop:{num_rpc:1, total_time:12.3µs}}",
|
||||
"executeInfo": "time:35.2µs, open:5.58µs, close:1.29µs, loops:1, cop_task: {num: 1, max: 24.1µs, proc_keys: 0, copr_cache_hit_ratio: 0.00, build_task_duration: 1.08µs, max_distsql_concurrency: 1}, fetch_resp_duration: 26.7µs, rpc_info:{Cop:{num_rpc:1, total_time:16.1µs}}",
|
||||
"operatorInfo": "index:IndexFullScan_25",
|
||||
"memoryInfo": "181 Bytes",
|
||||
"diskInfo": "N/A",
|
||||
@ -149,7 +149,7 @@
|
||||
"actRows": "0",
|
||||
"taskType": "cop[tikv]",
|
||||
"accessObject": "table:t1, index:id(id)",
|
||||
"executeInfo": "tikv_task:{time:10.1µs, loops:0}",
|
||||
"executeInfo": "tikv_task:{time:8.46µs, loops:0}",
|
||||
"operatorInfo": "keep order:true, stats:pseudo",
|
||||
"memoryInfo": "N/A",
|
||||
"diskInfo": "N/A"
|
||||
|
||||
@ -5,23 +5,23 @@
|
||||
{
|
||||
"SQL": "explain format='plan_tree' with cs_ui as (select cs_item_sk,sum(cs_ext_list_price) as sale,sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit) as refund from catalog_sales,catalog_returns where cs_item_sk = cr_item_sk and cs_order_number = cr_order_number group by cs_item_sk having sum(cs_ext_list_price)>2*sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit)), cross_sales as (select i_product_name product_name,i_item_sk item_sk,s_store_name store_name,s_zip store_zip,ad1.ca_street_number b_street_number,ad1.ca_street_name b_street_name,ad1.ca_city b_city,ad1.ca_zip b_zip,ad2.ca_street_number c_street_number,ad2.ca_street_name c_street_name,ad2.ca_city c_city,ad2.ca_zip c_zip,d1.d_year as syear,d2.d_year as fsyear,d3.d_year s2year,count(*) cnt,sum(ss_wholesale_cost) s1,sum(ss_list_price) s2,sum(ss_coupon_amt) s3 FROM store_sales,store_returns,cs_ui,date_dim d1,date_dim d2,date_dim d3,store,customer,customer_demographics cd1,customer_demographics cd2,promotion,household_demographics hd1,household_demographics hd2,customer_address ad1,customer_address ad2,income_band ib1,income_band ib2,item WHERE ss_store_sk = s_store_sk AND ss_sold_date_sk = d1.d_date_sk AND ss_customer_sk = c_customer_sk AND ss_cdemo_sk= cd1.cd_demo_sk AND ss_hdemo_sk = hd1.hd_demo_sk AND ss_addr_sk = ad1.ca_address_sk and ss_item_sk = i_item_sk and ss_item_sk = sr_item_sk and ss_ticket_number = sr_ticket_number and ss_item_sk = cs_ui.cs_item_sk and c_current_cdemo_sk = cd2.cd_demo_sk AND c_current_hdemo_sk = hd2.hd_demo_sk AND c_current_addr_sk = ad2.ca_address_sk and c_first_sales_date_sk = d2.d_date_sk and c_first_shipto_date_sk = d3.d_date_sk and ss_promo_sk = p_promo_sk and hd1.hd_income_band_sk = ib1.ib_income_band_sk and hd2.hd_income_band_sk = ib2.ib_income_band_sk and cd1.cd_marital_status <> cd2.cd_marital_status and i_color in ('maroon','burnished','dim','steel','navajo','chocolate') and i_current_price between 35 and 35 + 10 and i_current_price between 35 + 1 and 35 + 15 group by i_product_name,i_item_sk,s_store_name,s_zip,ad1.ca_street_number,ad1.ca_street_name,ad1.ca_city,ad1.ca_zip,ad2.ca_street_number,ad2.ca_street_name,ad2.ca_city,ad2.ca_zip,d1.d_year,d2.d_year,d3.d_year) select cs1.product_name,cs1.store_name,cs1.store_zip,cs1.b_street_number,cs1.b_street_name,cs1.b_city,cs1.b_zip,cs1.c_street_number,cs1.c_street_name,cs1.c_city,cs1.c_zip,cs1.syear,cs1.cnt,cs1.s1 as s11,cs1.s2 as s21,cs1.s3 as s31,cs2.s1 as s12,cs2.s2 as s22,cs2.s3 as s32,cs2.syear,cs2.cnt from cross_sales cs1,cross_sales cs2 where cs1.item_sk=cs2.item_sk and cs1.syear = 2000 and cs2.syear = 2000 + 1 and cs2.cnt <= cs1.cnt and cs1.store_name = cs2.store_name and cs1.store_zip = cs2.store_zip order by cs1.product_name,cs1.store_name,cs2.cnt,cs1.s1,cs2.s1;",
|
||||
"Result": [
|
||||
"Sort root tpcds.item.i_product_name, tpcds.store.s_store_name, Column#455, Column#437, Column#456",
|
||||
"└─Projection root tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, Column#436, Column#437, Column#438, Column#439, Column#456, Column#457, Column#458, tpcds.date_dim.d_year, Column#455",
|
||||
" └─HashJoin root inner join, equal:[eq(tpcds.item.i_item_sk, tpcds.item.i_item_sk) eq(tpcds.store.s_store_name, tpcds.store.s_store_name) eq(tpcds.store.s_zip, tpcds.store.s_zip)], other cond:le(Column#455, Column#436)",
|
||||
" ├─Selection(Build) root eq(tpcds.date_dim.d_year, 2001), not(isnull(Column#455)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
"Sort root tpcds.item.i_product_name, tpcds.store.s_store_name, Column, Column, Column",
|
||||
"└─Projection root tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, Column, Column, Column, Column, Column, Column, Column, tpcds.date_dim.d_year, Column",
|
||||
" └─HashJoin root inner join, equal:[eq(tpcds.item.i_item_sk, tpcds.item.i_item_sk) eq(tpcds.store.s_store_name, tpcds.store.s_store_name) eq(tpcds.store.s_zip, tpcds.store.s_zip)], other cond:le(Column, Column)",
|
||||
" ├─Selection(Build) root eq(tpcds.date_dim.d_year, 2001), not(isnull(Column)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
" │ └─CTEFullScan root CTE:cross_sales AS cs2 data:CTE_1",
|
||||
" └─Selection(Probe) root eq(tpcds.date_dim.d_year, 2000), not(isnull(Column#436)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
" └─Selection(Probe) root eq(tpcds.date_dim.d_year, 2000), not(isnull(Column)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
" └─CTEFullScan root CTE:cross_sales AS cs1 data:CTE_1",
|
||||
"CTE_1 root Non-Recursive CTE",
|
||||
"└─TableReader(Seed Part) root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] tpcds.item.i_product_name, tpcds.item.i_item_sk, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, Column#417, Column#418, Column#419, Column#420",
|
||||
" └─Projection mpp[tiflash] tpcds.item.i_product_name, tpcds.item.i_item_sk, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, Column, Column, Column, Column",
|
||||
" └─Selection mpp[tiflash] or(and(eq(tpcds.date_dim.d_year, 2000), and(not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip)))), and(eq(tpcds.date_dim.d_year, 2001), and(not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip)))))",
|
||||
" └─Projection mpp[tiflash] Column#417, Column#418, Column#419, Column#420, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.item.i_item_sk, tpcds.item.i_product_name",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:sum(Column#522)->Column#417, funcs:sum(Column#523)->Column#418, funcs:sum(Column#524)->Column#419, funcs:sum(Column#525)->Column#420, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.store.s_store_name)->tpcds.store.s_store_name, funcs:firstrow(tpcds.store.s_zip)->tpcds.store.s_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.item.i_item_sk)->tpcds.item.i_item_sk, funcs:firstrow(tpcds.item.i_product_name)->tpcds.item.i_product_name",
|
||||
" └─Projection mpp[tiflash] Column, Column, Column, Column, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.item.i_item_sk, tpcds.item.i_product_name",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.store.s_store_name)->tpcds.store.s_store_name, funcs:firstrow(tpcds.store.s_zip)->tpcds.store.s_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.item.i_item_sk)->tpcds.item.i_item_sk, funcs:firstrow(tpcds.item.i_product_name)->tpcds.item.i_product_name",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: tpcds.item.i_product_name, collate: utf8mb4_bin], [name: tpcds.item.i_item_sk, collate: binary], [name: tpcds.store.s_store_name, collate: utf8mb4_bin], [name: tpcds.store.s_zip, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_number, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_name, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_city, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_zip, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_number, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_name, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_city, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_zip, collate: utf8mb4_bin], [name: tpcds.date_dim.d_year, collate: binary], [name: tpcds.date_dim.d_year, collate: binary], [name: tpcds.date_dim.d_year, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:count(1)->Column#522, funcs:sum(tpcds.store_sales.ss_wholesale_cost)->Column#523, funcs:sum(tpcds.store_sales.ss_list_price)->Column#524, funcs:sum(tpcds.store_sales.ss_coupon_amt)->Column#525",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:count(1)->Column, funcs:sum(tpcds.store_sales.ss_wholesale_cost)->Column, funcs:sum(tpcds.store_sales.ss_list_price)->Column, funcs:sum(tpcds.store_sales.ss_coupon_amt)->Column",
|
||||
" └─Projection mpp[tiflash] tpcds.store_sales.ss_wholesale_cost, tpcds.store_sales.ss_list_price, tpcds.store_sales.ss_coupon_amt, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.item.i_item_sk, tpcds.item.i_product_name",
|
||||
" └─Projection mpp[tiflash] tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.item.i_item_sk, tpcds.store_sales.ss_wholesale_cost, tpcds.store_sales.ss_list_price, tpcds.store_sales.ss_coupon_amt, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(tpcds.store_sales.ss_item_sk, tpcds.catalog_sales.cs_item_sk)]",
|
||||
@ -148,10 +148,10 @@
|
||||
" │ └─ExchangeReceiver(Probe) mpp[tiflash] ",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: tpcds.income_band.ib_income_band_sk, collate: binary]",
|
||||
" │ └─TableFullScan mpp[tiflash] table:ib2 keep order:false, stats:pseudo",
|
||||
" └─Selection(Probe) mpp[tiflash] gt(Column#180, mul(2, Column#181))",
|
||||
" └─Projection mpp[tiflash] Column#180, Column#181, tpcds.catalog_sales.cs_item_sk",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#543, funcs:sum(Column#541)->Column#180, funcs:sum(Column#542)->Column#181, funcs:firstrow(Column#543)->tpcds.catalog_sales.cs_item_sk",
|
||||
" └─Projection mpp[tiflash] tpcds.catalog_sales.cs_ext_list_price->Column#541, plus(plus(tpcds.catalog_returns.cr_refunded_cash, tpcds.catalog_returns.cr_reversed_charge), tpcds.catalog_returns.cr_store_credit)->Column#542, tpcds.catalog_sales.cs_item_sk->Column#543",
|
||||
" └─Selection(Probe) mpp[tiflash] gt(Column, mul(2, Column))",
|
||||
" └─Projection mpp[tiflash] Column, Column, tpcds.catalog_sales.cs_item_sk",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpcds.catalog_sales.cs_item_sk",
|
||||
" └─Projection mpp[tiflash] tpcds.catalog_sales.cs_ext_list_price->Column, plus(plus(tpcds.catalog_returns.cr_refunded_cash, tpcds.catalog_returns.cr_reversed_charge), tpcds.catalog_returns.cr_store_credit)->Column, tpcds.catalog_sales.cs_item_sk->Column",
|
||||
" └─Projection mpp[tiflash] tpcds.catalog_sales.cs_item_sk, tpcds.catalog_sales.cs_ext_list_price, tpcds.catalog_returns.cr_refunded_cash, tpcds.catalog_returns.cr_reversed_charge, tpcds.catalog_returns.cr_store_credit, tpcds.catalog_returns.cr_item_sk",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(tpcds.catalog_sales.cs_item_sk, tpcds.catalog_returns.cr_item_sk) eq(tpcds.catalog_sales.cs_order_number, tpcds.catalog_returns.cr_order_number)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
|
||||
@ -5,23 +5,23 @@
|
||||
{
|
||||
"SQL": "explain format='plan_tree' with cs_ui as (select cs_item_sk,sum(cs_ext_list_price) as sale,sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit) as refund from catalog_sales,catalog_returns where cs_item_sk = cr_item_sk and cs_order_number = cr_order_number group by cs_item_sk having sum(cs_ext_list_price)>2*sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit)), cross_sales as (select i_product_name product_name,i_item_sk item_sk,s_store_name store_name,s_zip store_zip,ad1.ca_street_number b_street_number,ad1.ca_street_name b_street_name,ad1.ca_city b_city,ad1.ca_zip b_zip,ad2.ca_street_number c_street_number,ad2.ca_street_name c_street_name,ad2.ca_city c_city,ad2.ca_zip c_zip,d1.d_year as syear,d2.d_year as fsyear,d3.d_year s2year,count(*) cnt,sum(ss_wholesale_cost) s1,sum(ss_list_price) s2,sum(ss_coupon_amt) s3 FROM store_sales,store_returns,cs_ui,date_dim d1,date_dim d2,date_dim d3,store,customer,customer_demographics cd1,customer_demographics cd2,promotion,household_demographics hd1,household_demographics hd2,customer_address ad1,customer_address ad2,income_band ib1,income_band ib2,item WHERE ss_store_sk = s_store_sk AND ss_sold_date_sk = d1.d_date_sk AND ss_customer_sk = c_customer_sk AND ss_cdemo_sk= cd1.cd_demo_sk AND ss_hdemo_sk = hd1.hd_demo_sk AND ss_addr_sk = ad1.ca_address_sk and ss_item_sk = i_item_sk and ss_item_sk = sr_item_sk and ss_ticket_number = sr_ticket_number and ss_item_sk = cs_ui.cs_item_sk and c_current_cdemo_sk = cd2.cd_demo_sk AND c_current_hdemo_sk = hd2.hd_demo_sk AND c_current_addr_sk = ad2.ca_address_sk and c_first_sales_date_sk = d2.d_date_sk and c_first_shipto_date_sk = d3.d_date_sk and ss_promo_sk = p_promo_sk and hd1.hd_income_band_sk = ib1.ib_income_band_sk and hd2.hd_income_band_sk = ib2.ib_income_band_sk and cd1.cd_marital_status <> cd2.cd_marital_status and i_color in ('maroon','burnished','dim','steel','navajo','chocolate') and i_current_price between 35 and 35 + 10 and i_current_price between 35 + 1 and 35 + 15 group by i_product_name,i_item_sk,s_store_name,s_zip,ad1.ca_street_number,ad1.ca_street_name,ad1.ca_city,ad1.ca_zip,ad2.ca_street_number,ad2.ca_street_name,ad2.ca_city,ad2.ca_zip,d1.d_year,d2.d_year,d3.d_year) select cs1.product_name,cs1.store_name,cs1.store_zip,cs1.b_street_number,cs1.b_street_name,cs1.b_city,cs1.b_zip,cs1.c_street_number,cs1.c_street_name,cs1.c_city,cs1.c_zip,cs1.syear,cs1.cnt,cs1.s1 as s11,cs1.s2 as s21,cs1.s3 as s31,cs2.s1 as s12,cs2.s2 as s22,cs2.s3 as s32,cs2.syear,cs2.cnt from cross_sales cs1,cross_sales cs2 where cs1.item_sk=cs2.item_sk and cs1.syear = 2000 and cs2.syear = 2000 + 1 and cs2.cnt <= cs1.cnt and cs1.store_name = cs2.store_name and cs1.store_zip = cs2.store_zip order by cs1.product_name,cs1.store_name,cs2.cnt,cs1.s1,cs2.s1;",
|
||||
"Result": [
|
||||
"Sort root tpcds.item.i_product_name, tpcds.store.s_store_name, Column#455, Column#437, Column#456",
|
||||
"└─Projection root tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, Column#436, Column#437, Column#438, Column#439, Column#456, Column#457, Column#458, tpcds.date_dim.d_year, Column#455",
|
||||
" └─HashJoin root inner join, equal:[eq(tpcds.item.i_item_sk, tpcds.item.i_item_sk) eq(tpcds.store.s_store_name, tpcds.store.s_store_name) eq(tpcds.store.s_zip, tpcds.store.s_zip)], other cond:le(Column#455, Column#436)",
|
||||
" ├─Selection(Build) root eq(tpcds.date_dim.d_year, 2001), not(isnull(Column#455)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
"Sort root tpcds.item.i_product_name, tpcds.store.s_store_name, Column, Column, Column",
|
||||
"└─Projection root tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, Column, Column, Column, Column, Column, Column, Column, tpcds.date_dim.d_year, Column",
|
||||
" └─HashJoin root inner join, equal:[eq(tpcds.item.i_item_sk, tpcds.item.i_item_sk) eq(tpcds.store.s_store_name, tpcds.store.s_store_name) eq(tpcds.store.s_zip, tpcds.store.s_zip)], other cond:le(Column, Column)",
|
||||
" ├─Selection(Build) root eq(tpcds.date_dim.d_year, 2001), not(isnull(Column)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
" │ └─CTEFullScan root CTE:cross_sales AS cs2 data:CTE_1",
|
||||
" └─Selection(Probe) root eq(tpcds.date_dim.d_year, 2000), not(isnull(Column#436)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
" └─Selection(Probe) root eq(tpcds.date_dim.d_year, 2000), not(isnull(Column)), not(isnull(tpcds.item.i_item_sk)), not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip))",
|
||||
" └─CTEFullScan root CTE:cross_sales AS cs1 data:CTE_1",
|
||||
"CTE_1 root Non-Recursive CTE",
|
||||
"└─TableReader(Seed Part) root MppVersion: 3, data:ExchangeSender",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: PassThrough",
|
||||
" └─Projection mpp[tiflash] tpcds.item.i_product_name, tpcds.item.i_item_sk, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, Column#417, Column#418, Column#419, Column#420",
|
||||
" └─Projection mpp[tiflash] tpcds.item.i_product_name, tpcds.item.i_item_sk, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, Column, Column, Column, Column",
|
||||
" └─Selection mpp[tiflash] or(and(eq(tpcds.date_dim.d_year, 2000), and(not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip)))), and(eq(tpcds.date_dim.d_year, 2001), and(not(isnull(tpcds.store.s_store_name)), not(isnull(tpcds.store.s_zip)))))",
|
||||
" └─Projection mpp[tiflash] Column#417, Column#418, Column#419, Column#420, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.item.i_item_sk, tpcds.item.i_product_name",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:sum(Column#522)->Column#417, funcs:sum(Column#523)->Column#418, funcs:sum(Column#524)->Column#419, funcs:sum(Column#525)->Column#420, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.store.s_store_name)->tpcds.store.s_store_name, funcs:firstrow(tpcds.store.s_zip)->tpcds.store.s_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.item.i_item_sk)->tpcds.item.i_item_sk, funcs:firstrow(tpcds.item.i_product_name)->tpcds.item.i_product_name",
|
||||
" └─Projection mpp[tiflash] Column, Column, Column, Column, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.item.i_item_sk, tpcds.item.i_product_name",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.date_dim.d_year)->tpcds.date_dim.d_year, funcs:firstrow(tpcds.store.s_store_name)->tpcds.store.s_store_name, funcs:firstrow(tpcds.store.s_zip)->tpcds.store.s_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.customer_address.ca_street_number)->tpcds.customer_address.ca_street_number, funcs:firstrow(tpcds.customer_address.ca_street_name)->tpcds.customer_address.ca_street_name, funcs:firstrow(tpcds.customer_address.ca_city)->tpcds.customer_address.ca_city, funcs:firstrow(tpcds.customer_address.ca_zip)->tpcds.customer_address.ca_zip, funcs:firstrow(tpcds.item.i_item_sk)->tpcds.item.i_item_sk, funcs:firstrow(tpcds.item.i_product_name)->tpcds.item.i_product_name",
|
||||
" └─ExchangeReceiver mpp[tiflash] ",
|
||||
" └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: tpcds.item.i_product_name, collate: utf8mb4_bin], [name: tpcds.item.i_item_sk, collate: binary], [name: tpcds.store.s_store_name, collate: utf8mb4_bin], [name: tpcds.store.s_zip, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_number, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_name, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_city, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_zip, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_number, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_street_name, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_city, collate: utf8mb4_bin], [name: tpcds.customer_address.ca_zip, collate: utf8mb4_bin], [name: tpcds.date_dim.d_year, collate: binary], [name: tpcds.date_dim.d_year, collate: binary], [name: tpcds.date_dim.d_year, collate: binary]",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:count(1)->Column#522, funcs:sum(tpcds.store_sales.ss_wholesale_cost)->Column#523, funcs:sum(tpcds.store_sales.ss_list_price)->Column#524, funcs:sum(tpcds.store_sales.ss_coupon_amt)->Column#525",
|
||||
" └─HashAgg mpp[tiflash] group by:tpcds.customer_address.ca_city, tpcds.customer_address.ca_city, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.store.s_store_name, tpcds.store.s_zip, funcs:count(1)->Column, funcs:sum(tpcds.store_sales.ss_wholesale_cost)->Column, funcs:sum(tpcds.store_sales.ss_list_price)->Column, funcs:sum(tpcds.store_sales.ss_coupon_amt)->Column",
|
||||
" └─Projection mpp[tiflash] tpcds.store_sales.ss_wholesale_cost, tpcds.store_sales.ss_list_price, tpcds.store_sales.ss_coupon_amt, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.item.i_item_sk, tpcds.item.i_product_name",
|
||||
" └─Projection mpp[tiflash] tpcds.item.i_item_sk, tpcds.item.i_product_name, tpcds.item.i_item_sk, tpcds.store_sales.ss_wholesale_cost, tpcds.store_sales.ss_list_price, tpcds.store_sales.ss_coupon_amt, tpcds.date_dim.d_year, tpcds.store.s_store_name, tpcds.store.s_zip, tpcds.date_dim.d_year, tpcds.date_dim.d_year, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip, tpcds.customer_address.ca_street_number, tpcds.customer_address.ca_street_name, tpcds.customer_address.ca_city, tpcds.customer_address.ca_zip",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(tpcds.store_sales.ss_item_sk, tpcds.catalog_sales.cs_item_sk)]",
|
||||
@ -148,10 +148,10 @@
|
||||
" │ └─ExchangeReceiver(Probe) mpp[tiflash] ",
|
||||
" │ └─ExchangeSender mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: tpcds.income_band.ib_income_band_sk, collate: binary]",
|
||||
" │ └─TableFullScan mpp[tiflash] table:ib2 keep order:false, stats:pseudo",
|
||||
" └─Selection(Probe) mpp[tiflash] gt(Column#180, mul(2, Column#181))",
|
||||
" └─Projection mpp[tiflash] Column#180, Column#181, tpcds.catalog_sales.cs_item_sk",
|
||||
" └─HashAgg mpp[tiflash] group by:Column#543, funcs:sum(Column#541)->Column#180, funcs:sum(Column#542)->Column#181, funcs:firstrow(Column#543)->tpcds.catalog_sales.cs_item_sk",
|
||||
" └─Projection mpp[tiflash] tpcds.catalog_sales.cs_ext_list_price->Column#541, plus(plus(tpcds.catalog_returns.cr_refunded_cash, tpcds.catalog_returns.cr_reversed_charge), tpcds.catalog_returns.cr_store_credit)->Column#542, tpcds.catalog_sales.cs_item_sk->Column#543",
|
||||
" └─Selection(Probe) mpp[tiflash] gt(Column, mul(2, Column))",
|
||||
" └─Projection mpp[tiflash] Column, Column, tpcds.catalog_sales.cs_item_sk",
|
||||
" └─HashAgg mpp[tiflash] group by:Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpcds.catalog_sales.cs_item_sk",
|
||||
" └─Projection mpp[tiflash] tpcds.catalog_sales.cs_ext_list_price->Column, plus(plus(tpcds.catalog_returns.cr_refunded_cash, tpcds.catalog_returns.cr_reversed_charge), tpcds.catalog_returns.cr_store_credit)->Column, tpcds.catalog_sales.cs_item_sk->Column",
|
||||
" └─Projection mpp[tiflash] tpcds.catalog_sales.cs_item_sk, tpcds.catalog_sales.cs_ext_list_price, tpcds.catalog_returns.cr_refunded_cash, tpcds.catalog_returns.cr_reversed_charge, tpcds.catalog_returns.cr_store_credit, tpcds.catalog_returns.cr_item_sk",
|
||||
" └─HashJoin mpp[tiflash] inner join, equal:[eq(tpcds.catalog_sales.cs_item_sk, tpcds.catalog_returns.cr_item_sk) eq(tpcds.catalog_sales.cs_order_number, tpcds.catalog_returns.cr_order_number)]",
|
||||
" ├─ExchangeReceiver(Build) mpp[tiflash] ",
|
||||
|
||||
@ -693,6 +693,19 @@ func (e *Explain) prepareSchema() error {
|
||||
format = types.ExplainFormatROW
|
||||
e.Format = types.ExplainFormatROW
|
||||
}
|
||||
// Ensure StmtCtx.ExplainFormat is set early so shouldRemoveColumnNumbers can access it
|
||||
// This needs to be set before any ExplainInfo() calls are made
|
||||
// ResetContextOfStmt already set ExplainFormat to the original format (normalized to lowercase),
|
||||
// so we preserve that value instead of overwriting it with the converted format
|
||||
if e.SCtx() != nil {
|
||||
stmtCtx := e.SCtx().GetSessionVars().StmtCtx
|
||||
stmtCtx.InExplainStmt = true
|
||||
// Only set ExplainFormat if it's not already set (it should be set in ResetContextOfStmt)
|
||||
// This preserves the original format value for test compatibility
|
||||
if stmtCtx.ExplainFormat == "" {
|
||||
stmtCtx.ExplainFormat = format
|
||||
}
|
||||
}
|
||||
switch {
|
||||
case (format == types.ExplainFormatROW || format == types.ExplainFormatBrief || format == types.ExplainFormatPlanCache) && (!e.Analyze && e.RuntimeStatsColl == nil):
|
||||
fieldNames = []string{"id", "estRows", "task", "access object", "operator info"}
|
||||
@ -842,6 +855,13 @@ func (e *Explain) RenderResult() error {
|
||||
e.Rows = rows
|
||||
return nil
|
||||
}
|
||||
// Ensure StmtCtx.ExplainFormat is set to match e.Format so shouldRemoveColumnNumbers can access it
|
||||
// e.Format is already normalized to lowercase in planbuilder.go and may have been converted from Traditional to ROW in prepareSchema()
|
||||
// prepareSchema() already set ExplainFormat (preserving the original from ResetContextOfStmt), so we just ensure InExplainStmt is set
|
||||
if e.SCtx() != nil {
|
||||
e.SCtx().GetSessionVars().StmtCtx.InExplainStmt = true
|
||||
// ExplainFormat should already be set correctly in prepareSchema() or ResetContextOfStmt
|
||||
}
|
||||
switch strings.ToLower(e.Format) {
|
||||
case types.ExplainFormatROW, types.ExplainFormatBrief, types.ExplainFormatVerbose, types.ExplainFormatTrueCardCost, types.ExplainFormatCostTrace, types.ExplainFormatPlanCache, types.ExplainFormatPlanTree:
|
||||
if e.Rows == nil || e.Analyze {
|
||||
@ -1086,6 +1106,13 @@ func getOperatorInfo(p base.Plan, format string) (estRows, estCost, costFormula,
|
||||
estCost = "N/A"
|
||||
costFormula = "N/A"
|
||||
sctx := p.SCtx()
|
||||
// Ensure StmtCtx.ExplainFormat is set before calling ExplainInfo() so shouldRemoveColumnNumbers can access it
|
||||
// format is already normalized to lowercase when passed from ExplainFlatPlanInRowFormat (which uses e.Format)
|
||||
if sctx != nil {
|
||||
stmtCtx := sctx.GetSessionVars().StmtCtx
|
||||
stmtCtx.InExplainStmt = true
|
||||
stmtCtx.ExplainFormat = format
|
||||
}
|
||||
if isPhysicalPlan {
|
||||
if format != types.ExplainFormatPlanTree {
|
||||
estRows = strconv.FormatFloat(pp.GetEstRowCountForDisplay(), 'f', 2, 64)
|
||||
@ -1113,6 +1140,8 @@ func getOperatorInfo(p base.Plan, format string) (estRows, estCost, costFormula,
|
||||
}
|
||||
operatorInfo = p.ExplainInfo()
|
||||
}
|
||||
|
||||
// Column numbers are now removed in column.ExplainInfo() when format is plan_tree
|
||||
return estRows, estCost, costFormula, accessObject, operatorInfo
|
||||
}
|
||||
|
||||
|
||||
@ -32,14 +32,14 @@ Projection root access_path_selection.access_path_selection.a, access_path_sele
|
||||
└─TableFullScan cop[tikv] table:access_path_selection keep order:true, stats:pseudo
|
||||
explain format = 'plan_tree' select max(_tidb_rowid) from access_path_selection;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(access_path_selection.access_path_selection._tidb_rowid)->Column#4
|
||||
StreamAgg root funcs:max(access_path_selection.access_path_selection._tidb_rowid)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─TableReader root data:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
└─TableFullScan cop[tikv] table:access_path_selection keep order:true, desc, stats:pseudo
|
||||
explain format = 'plan_tree' select count(1) from access_path_selection;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#18)->Column#4
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#18
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:access_path_selection keep order:false, stats:pseudo
|
||||
|
||||
@ -25,12 +25,12 @@ a b avgc
|
||||
explain format='plan_tree' select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
(a > 1) and (a > 2) and 1 and (b > 2) and (avg(c) > 3) order by a, b, avgc;
|
||||
id task access object operator info
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5->Column#8
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5
|
||||
└─Selection root gt(Column#5, 3)
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column#9, Column#10)->Column#5, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Selection root gt(Column, 3)
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column, Column)->Column, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column#9, funcs:sum(agg_predicate_pushdown.t.c)->Column#10
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column, funcs:sum(agg_predicate_pushdown.t.c)->Column
|
||||
└─Selection cop[tikv] gt(agg_predicate_pushdown.t.a, 1), gt(agg_predicate_pushdown.t.a, 2), gt(agg_predicate_pushdown.t.b, 2)
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
@ -41,12 +41,12 @@ a b avgc
|
||||
explain format='plan_tree' select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
(a > 1 or b > 2) and (a > 2 or b < 1) and 1 and (b > 2) and (avg(c) > 3) order by a, b, avgc;
|
||||
id task access object operator info
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5->Column#8
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5
|
||||
└─Selection root gt(Column#5, 3)
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column#9, Column#10)->Column#5, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Selection root gt(Column, 3)
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column, Column)->Column, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column#9, funcs:sum(agg_predicate_pushdown.t.c)->Column#10
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column, funcs:sum(agg_predicate_pushdown.t.c)->Column
|
||||
└─Selection cop[tikv] gt(agg_predicate_pushdown.t.b, 2), or(gt(agg_predicate_pushdown.t.a, 1), gt(agg_predicate_pushdown.t.b, 2)), or(gt(agg_predicate_pushdown.t.a, 2), lt(agg_predicate_pushdown.t.b, 1))
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
@ -58,12 +58,12 @@ a b avgc
|
||||
explain format='plan_tree' select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
(a > 1 and b > 2) or (a > 2 and b < 1) or (b > 2 and avg(c) > 3) order by a, b, avgc;
|
||||
id task access object operator info
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5->Column#8
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5
|
||||
└─Selection root or(and(gt(agg_predicate_pushdown.t.a, 1), gt(agg_predicate_pushdown.t.b, 2)), or(and(gt(agg_predicate_pushdown.t.a, 2), lt(agg_predicate_pushdown.t.b, 1)), and(gt(agg_predicate_pushdown.t.b, 2), gt(Column#5, 3))))
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column#9, Column#10)->Column#5, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Selection root or(and(gt(agg_predicate_pushdown.t.a, 1), gt(agg_predicate_pushdown.t.b, 2)), or(and(gt(agg_predicate_pushdown.t.a, 2), lt(agg_predicate_pushdown.t.b, 1)), and(gt(agg_predicate_pushdown.t.b, 2), gt(Column, 3))))
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column, Column)->Column, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column#9, funcs:sum(agg_predicate_pushdown.t.c)->Column#10
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column, funcs:sum(agg_predicate_pushdown.t.c)->Column
|
||||
└─Selection cop[tikv] or(and(gt(agg_predicate_pushdown.t.a, 1), gt(agg_predicate_pushdown.t.b, 2)), or(and(gt(agg_predicate_pushdown.t.a, 2), lt(agg_predicate_pushdown.t.b, 1)), gt(agg_predicate_pushdown.t.b, 2)))
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
@ -78,12 +78,12 @@ a b avgc
|
||||
explain format='plan_tree' select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
(a > 1 or avg(c) > 1) and (a < 3) order by a, b, avgc;
|
||||
id task access object operator info
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5->Column#8
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5
|
||||
└─Selection root or(gt(agg_predicate_pushdown.t.a, 1), gt(Column#5, 1))
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column#9, Column#10)->Column#5, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Selection root or(gt(agg_predicate_pushdown.t.a, 1), gt(Column, 1))
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column, Column)->Column, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column#9, funcs:sum(agg_predicate_pushdown.t.c)->Column#10
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column, funcs:sum(agg_predicate_pushdown.t.c)->Column
|
||||
└─Selection cop[tikv] lt(agg_predicate_pushdown.t.a, 3)
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
@ -106,12 +106,12 @@ a b avgc
|
||||
explain format='plan_tree' select a, b, avg(c) as avgc from t group by a, b, c having
|
||||
(a > 1 and avg(c) > 1) or (a < 3) order by a, b, avgc;
|
||||
id task access object operator info
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5->Column#8
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column#5
|
||||
└─Selection root or(and(gt(agg_predicate_pushdown.t.a, 1), gt(Column#5, 1)), lt(agg_predicate_pushdown.t.a, 3))
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column#9, Column#10)->Column#5, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
Projection root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Sort root agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, Column
|
||||
└─Selection root or(and(gt(agg_predicate_pushdown.t.a, 1), gt(Column, 1)), lt(agg_predicate_pushdown.t.a, 3))
|
||||
└─HashAgg root group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:avg(Column, Column)->Column, funcs:firstrow(agg_predicate_pushdown.t.a)->agg_predicate_pushdown.t.a, funcs:firstrow(agg_predicate_pushdown.t.b)->agg_predicate_pushdown.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column#9, funcs:sum(agg_predicate_pushdown.t.c)->Column#10
|
||||
└─HashAgg cop[tikv] group by:agg_predicate_pushdown.t.a, agg_predicate_pushdown.t.b, agg_predicate_pushdown.t.c, funcs:count(agg_predicate_pushdown.t.c)->Column, funcs:sum(agg_predicate_pushdown.t.c)->Column
|
||||
└─Selection cop[tikv] or(gt(agg_predicate_pushdown.t.a, 1), lt(agg_predicate_pushdown.t.a, 3))
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
drop table t;
|
||||
|
||||
@ -100,7 +100,7 @@ drop global binding for SELECT * from t1,t2 where t1.id = t2.id;
|
||||
create index index_id on t1(id);
|
||||
explain format='plan_tree' SELECT * from t1 union SELECT * from t1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─IndexReader root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:index_id(id) keep order:false, stats:pseudo
|
||||
@ -108,7 +108,7 @@ HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
└─IndexFullScan cop[tikv] table:t1, index:index_id(id) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' SELECT * from t1 use index(index_id) union SELECT * from t1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─IndexReader root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:index_id(id) keep order:false, stats:pseudo
|
||||
@ -117,7 +117,7 @@ HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
create global binding for SELECT * from t1 union SELECT * from t1 using SELECT * from t1 use index(index_id) union SELECT * from t1;
|
||||
explain format='plan_tree' SELECT * from t1 union SELECT * from t1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─IndexReader root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:index_id(id) keep order:false, stats:pseudo
|
||||
@ -210,7 +210,7 @@ HashJoin root left outer semi join, left side:TableReader, equal:[eq(bindinfo__
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select exists (select /*+ no_decorrelate() */ t2.b from t2 where t2.a = t1.b limit 2) from t1;
|
||||
id task access object operator info
|
||||
Projection root Column#10
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -225,7 +225,7 @@ using
|
||||
select exists (select /*+ no_decorrelate() */ t2.b from t2 where t2.a = t1.b limit 2) from t1;
|
||||
explain format='plan_tree' select exists (select t2.b from t2 where t2.a = t1.b limit 2) from t1;
|
||||
id task access object operator info
|
||||
Projection root Column#10
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
|
||||
@ -57,27 +57,27 @@ insert into mysql.expr_pushdown_blacklist(name) values('enum');
|
||||
admin reload expr_pushdown_blacklist;
|
||||
explain format='plan_tree' select /*+ HASH_AGG() */ max(a) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:max(black_list.t.a)->Column#5
|
||||
HashAgg root funcs:max(black_list.t.a)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ STREAM_AGG() */ max(a) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(black_list.t.a)->Column#5
|
||||
StreamAgg root funcs:max(black_list.t.a)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(b, a) keep order:false, stats:pseudo
|
||||
delete from mysql.expr_pushdown_blacklist;
|
||||
admin reload expr_pushdown_blacklist;
|
||||
explain format='plan_tree' select /*+ HASH_AGG() */ max(a) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:max(Column#7)->Column#5
|
||||
HashAgg root funcs:max(Column)->Column
|
||||
└─IndexReader root index:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:max(black_list.t.a)->Column#7
|
||||
└─HashAgg cop[tikv] funcs:max(black_list.t.a)->Column
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ STREAM_AGG() */ max(a) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#7)->Column#5
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:max(black_list.t.a)->Column#7
|
||||
└─StreamAgg cop[tikv] funcs:max(black_list.t.a)->Column
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(b, a) keep order:false, stats:pseudo
|
||||
insert into mysql.expr_pushdown_blacklist(name) values('enum');
|
||||
admin reload expr_pushdown_blacklist;
|
||||
|
||||
@ -15,27 +15,27 @@ load stats 's/wout_cluster_index_tbl_0.json';
|
||||
load stats 's/wout_cluster_index_tbl_2.json';
|
||||
explain format='plan_tree' select count(*) from with_cluster_index.tbl_0 where col_0 < 5429 ;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#7)->Column#6
|
||||
HashAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column#7
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,5429), keep order:false
|
||||
explain format='plan_tree' select count(*) from wout_cluster_index.tbl_0 where col_0 < 5429 ;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#8)->Column#7
|
||||
HashAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column#8
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,5429), keep order:false
|
||||
explain format='plan_tree' select count(*) from with_cluster_index.tbl_0 where col_0 < 41 ;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#8)->Column#6
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,41), keep order:false
|
||||
explain format='plan_tree' select count(*) from wout_cluster_index.tbl_0 where col_0 < 41 ;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#9)->Column#7
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#9
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,41), keep order:false
|
||||
explain format='plan_tree' select col_14 from with_cluster_index.tbl_2 where col_11 <> '2013-11-01' ;
|
||||
id task access object operator info
|
||||
@ -50,15 +50,15 @@ TableReader root data:Projection
|
||||
└─TableFullScan cop[tikv] table:tbl_2 keep order:false
|
||||
explain format='plan_tree' select sum( col_4 ) from with_cluster_index.tbl_0 where col_3 != '1993-12-02' ;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#7)->Column#6
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(with_cluster_index.tbl_0.col_4)->Column#7
|
||||
└─HashAgg cop[tikv] funcs:sum(with_cluster_index.tbl_0.col_4)->Column
|
||||
└─TableRangeScan cop[tikv] table:tbl_0 range:[-inf,1993-12-02 00:00:00), (1993-12-02 00:00:00,+inf], keep order:false
|
||||
explain format='plan_tree' select sum( col_4 ) from wout_cluster_index.tbl_0 where col_3 != '1993-12-02' ;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#8)->Column#7
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(wout_cluster_index.tbl_0.col_4)->Column#8
|
||||
└─HashAgg cop[tikv] funcs:sum(wout_cluster_index.tbl_0.col_4)->Column
|
||||
└─Selection cop[tikv] ne(wout_cluster_index.tbl_0.col_3, 1993-12-02 00:00:00.000000)
|
||||
└─TableFullScan cop[tikv] table:tbl_0 keep order:false
|
||||
explain format='plan_tree' select col_0 from with_cluster_index.tbl_0 where col_0 <= 0 ;
|
||||
@ -94,26 +94,26 @@ HashJoin root right outer join, left side:TableReader, equal:[eq(wout_cluster_i
|
||||
└─TableFullScan cop[tikv] table:tbl_2 keep order:false
|
||||
explain format='plan_tree' select count(*) from with_cluster_index.tbl_0 where col_0 <= 0 ;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#8)->Column#6
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,0], keep order:false
|
||||
explain format='plan_tree' select count(*) from wout_cluster_index.tbl_0 where col_0 <= 0 ;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#9)->Column#7
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#9
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,0], keep order:false
|
||||
explain format='plan_tree' select count(*) from with_cluster_index.tbl_0 where col_0 >= 803163 ;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#8)->Column#6
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[803163,+inf], keep order:false
|
||||
explain format='plan_tree' select count(*) from wout_cluster_index.tbl_0 where col_0 >= 803163 ;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#9)->Column#7
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#9
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:tbl_0, index:idx_3(col_0) range:[803163,+inf], keep order:false
|
||||
set @@tidb_enable_outer_join_reorder=false;
|
||||
|
||||
@ -3,7 +3,7 @@ create table t(id int, value varchar(20) charset utf8mb4 collate utf8mb4_general
|
||||
insert into t values (1, 'abc', 'abc '),(4, 'Abc', 'abc'),(3,'def', 'def '), (5, 'abc', 'ABC');
|
||||
explain format='plan_tree' select group_concat(value order by 1) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column#5
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select group_concat(value order by 1) from t;
|
||||
@ -11,7 +11,7 @@ group_concat(value order by 1)
|
||||
Abc,abc,abc,def
|
||||
explain format='plan_tree' select group_concat(value) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value separator ",")->Column#5
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select group_concat(value) from t;
|
||||
@ -19,8 +19,8 @@ group_concat(value)
|
||||
abc,Abc,def,abc
|
||||
explain format='plan_tree' select group_concat(value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:group_concat(Column#6 separator ",")->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
HashAgg root funcs:group_concat(Column separator ",")->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select group_concat(value collate utf8mb4_bin) from t;
|
||||
@ -28,7 +28,7 @@ group_concat(value collate utf8mb4_bin)
|
||||
abc,Abc,def,abc
|
||||
explain format='plan_tree' select group_concat(distinct value order by 1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column#5
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value order by 1)) from t;
|
||||
@ -36,8 +36,8 @@ upper(group_concat(distinct value order by 1))
|
||||
ABC,ABC,DEF
|
||||
explain format='plan_tree' select group_concat(distinct value collate utf8mb4_bin order by 1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct Column#6 order by Column#6 separator ",")->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
StreamAgg root funcs:group_concat(distinct Column order by Column separator ",")->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value collate utf8mb4_bin order by 1)) from t;
|
||||
@ -45,7 +45,7 @@ upper(group_concat(distinct value collate utf8mb4_bin order by 1))
|
||||
ABC,ABC,DEF
|
||||
explain format='plan_tree' select group_concat(distinct value) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value separator ",")->Column#5
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value)) from t;
|
||||
@ -53,8 +53,8 @@ upper(group_concat(distinct value))
|
||||
ABC,ABC,DEF
|
||||
explain format='plan_tree' select group_concat(distinct value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct Column#6 separator ",")->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
StreamAgg root funcs:group_concat(distinct Column separator ",")->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value collate utf8mb4_bin)) from t;
|
||||
@ -62,7 +62,7 @@ upper(group_concat(distinct value collate utf8mb4_bin))
|
||||
ABC,ABC,DEF
|
||||
explain format='plan_tree' select count(distinct value) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value)->Column#5
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value) from t;
|
||||
@ -70,8 +70,8 @@ count(distinct value)
|
||||
3
|
||||
explain format='plan_tree' select count(distinct value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct Column#8)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:count(distinct Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value collate utf8mb4_bin) from t;
|
||||
@ -79,7 +79,7 @@ count(distinct value collate utf8mb4_bin)
|
||||
3
|
||||
explain format='plan_tree' select count(distinct value, value1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value, collation_agg_func.t.value1)->Column#5
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value, collation_agg_func.t.value1)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value, value1) from t;
|
||||
@ -87,8 +87,8 @@ count(distinct value, value1)
|
||||
4
|
||||
explain format='plan_tree' select count(distinct value collate utf8mb4_bin, value1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct Column#8, Column#9)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8, collation_agg_func.t.value1->Column#9
|
||||
StreamAgg root funcs:count(distinct Column, Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column, collation_agg_func.t.value1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value collate utf8mb4_bin, value1) from t;
|
||||
@ -96,7 +96,7 @@ count(distinct value collate utf8mb4_bin, value1)
|
||||
4
|
||||
explain format='plan_tree' select approx_count_distinct(value) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value)->Column#5
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value) from t;
|
||||
@ -104,8 +104,8 @@ approx_count_distinct(value)
|
||||
3
|
||||
explain format='plan_tree' select approx_count_distinct(value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(Column#6)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
HashAgg root funcs:approx_count_distinct(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value collate utf8mb4_bin) from t;
|
||||
@ -113,7 +113,7 @@ approx_count_distinct(value collate utf8mb4_bin)
|
||||
3
|
||||
explain format='plan_tree' select approx_count_distinct(value, value1) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value, collation_agg_func.t.value1)->Column#5
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value, collation_agg_func.t.value1)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value, value1) from t;
|
||||
@ -121,8 +121,8 @@ approx_count_distinct(value, value1)
|
||||
4
|
||||
explain format='plan_tree' select approx_count_distinct(value collate utf8mb4_bin, value1) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(Column#6, Column#7)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6, collation_agg_func.t.value1->Column#7
|
||||
HashAgg root funcs:approx_count_distinct(Column, Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column, collation_agg_func.t.value1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value collate utf8mb4_bin, value1) from t;
|
||||
@ -140,7 +140,7 @@ TOTAL_SPLIT_REGION SCATTER_FINISH_RATIO
|
||||
6 1
|
||||
explain format='plan_tree' select min(a) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.a)->Column#6
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.a)->Column
|
||||
└─TopN root collation_agg_func.tt.a, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.a, offset:0, count:1
|
||||
@ -148,8 +148,8 @@ StreamAgg root funcs:min(collation_agg_func.tt.a)->Column#6
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select lower(min(a)) from tt;
|
||||
id task access object operator info
|
||||
Projection root lower(Column#6)->Column#7
|
||||
└─StreamAgg root funcs:min(collation_agg_func.tt.a)->Column#6
|
||||
Projection root lower(Column)->Column
|
||||
└─StreamAgg root funcs:min(collation_agg_func.tt.a)->Column
|
||||
└─TopN root collation_agg_func.tt.a, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.a, offset:0, count:1
|
||||
@ -160,11 +160,11 @@ lower(min(a))
|
||||
b
|
||||
explain format='plan_tree' select min(a collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:min(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.a
|
||||
└─TopN root Column#7, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin), offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
@ -174,7 +174,7 @@ min(a collate utf8mb4_bin)
|
||||
B
|
||||
explain format='plan_tree' select max(a) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.a)->Column#6
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.a)->Column
|
||||
└─TopN root collation_agg_func.tt.a:desc, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.a:desc, offset:0, count:1
|
||||
@ -185,11 +185,11 @@ max(a)
|
||||
c
|
||||
explain format='plan_tree' select max(a collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.a
|
||||
└─TopN root Column#7:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin):desc, offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
@ -199,9 +199,9 @@ max(a collate utf8mb4_bin)
|
||||
c
|
||||
explain format='plan_tree' select min(b) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#6
|
||||
StreamAgg root funcs:min(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:min(collation_agg_func.tt.b)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:min(collation_agg_func.tt.b)->Column
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select min(b) from tt;
|
||||
min(b)
|
||||
@ -212,9 +212,9 @@ select min(b collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select max(b) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#8)->Column#6
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:max(collation_agg_func.tt.b)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:max(collation_agg_func.tt.b)->Column
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select max(b) from tt;
|
||||
max(b)
|
||||
@ -225,7 +225,7 @@ select max(b collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select min(c) from tt;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:min(collation_agg_func.tt.c)->Column#6
|
||||
HashAgg root funcs:min(collation_agg_func.tt.c)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select min(c) from tt;
|
||||
@ -237,7 +237,7 @@ select min(c collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select max(c) from tt;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:max(collation_agg_func.tt.c)->Column#6
|
||||
HashAgg root funcs:max(collation_agg_func.tt.c)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select max(c) from tt;
|
||||
@ -249,7 +249,7 @@ select max(c collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select min(d) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.d)->Column#6
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.d)->Column
|
||||
└─TopN root collation_agg_func.tt.d, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.d, offset:0, count:1
|
||||
@ -260,11 +260,11 @@ min(d)
|
||||
{"B": "B"}
|
||||
explain format='plan_tree' select min(d collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:min(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.d
|
||||
└─TopN root Column#7, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin), offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
@ -274,7 +274,7 @@ min(d collate utf8mb4_bin)
|
||||
{"B": "B"}
|
||||
explain format='plan_tree' select max(d) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.d)->Column#6
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.d)->Column
|
||||
└─TopN root collation_agg_func.tt.d:desc, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.d:desc, offset:0, count:1
|
||||
@ -285,11 +285,11 @@ max(d)
|
||||
{"c": "c"}
|
||||
explain format='plan_tree' select max(d collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.d
|
||||
└─TopN root Column#7:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin):desc, offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
|
||||
@ -3,7 +3,7 @@ create table t(id int, value varchar(20) charset utf8mb4 collate utf8mb4_general
|
||||
insert into t values (1, 'abc', 'abc '),(4, 'Abc', 'abc'),(3,'def', 'def '), (5, 'abc', 'ABC');
|
||||
explain format='plan_tree' select group_concat(value order by 1) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column#5
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select group_concat(value order by 1) from t;
|
||||
@ -11,7 +11,7 @@ group_concat(value order by 1)
|
||||
Abc,abc,abc,def
|
||||
explain format='plan_tree' select group_concat(value) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value separator ",")->Column#5
|
||||
HashAgg root funcs:group_concat(collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select group_concat(value) from t;
|
||||
@ -19,8 +19,8 @@ group_concat(value)
|
||||
abc,Abc,def,abc
|
||||
explain format='plan_tree' select group_concat(value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:group_concat(Column#6 separator ",")->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
HashAgg root funcs:group_concat(Column separator ",")->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select group_concat(value collate utf8mb4_bin) from t;
|
||||
@ -28,7 +28,7 @@ group_concat(value collate utf8mb4_bin)
|
||||
abc,Abc,def,abc
|
||||
explain format='plan_tree' select group_concat(distinct value order by 1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column#5
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value order by collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value order by 1)) from t;
|
||||
@ -36,8 +36,8 @@ upper(group_concat(distinct value order by 1))
|
||||
ABC,DEF
|
||||
explain format='plan_tree' select group_concat(distinct value collate utf8mb4_bin order by 1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct Column#6 order by Column#6 separator ",")->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
StreamAgg root funcs:group_concat(distinct Column order by Column separator ",")->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value collate utf8mb4_bin order by 1)) from t;
|
||||
@ -45,7 +45,7 @@ upper(group_concat(distinct value collate utf8mb4_bin order by 1))
|
||||
ABC,ABC,DEF
|
||||
explain format='plan_tree' select group_concat(distinct value) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value separator ",")->Column#5
|
||||
StreamAgg root funcs:group_concat(distinct collation_agg_func.t.value separator ",")->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value)) from t;
|
||||
@ -53,8 +53,8 @@ upper(group_concat(distinct value))
|
||||
ABC,DEF
|
||||
explain format='plan_tree' select group_concat(distinct value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:group_concat(distinct Column#6 separator ",")->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
StreamAgg root funcs:group_concat(distinct Column separator ",")->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select upper(group_concat(distinct value collate utf8mb4_bin)) from t;
|
||||
@ -62,7 +62,7 @@ upper(group_concat(distinct value collate utf8mb4_bin))
|
||||
ABC,ABC,DEF
|
||||
explain format='plan_tree' select count(distinct value) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value)->Column#5
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value) from t;
|
||||
@ -70,8 +70,8 @@ count(distinct value)
|
||||
2
|
||||
explain format='plan_tree' select count(distinct value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct Column#8)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:count(distinct Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value collate utf8mb4_bin) from t;
|
||||
@ -79,7 +79,7 @@ count(distinct value collate utf8mb4_bin)
|
||||
3
|
||||
explain format='plan_tree' select count(distinct value, value1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value, collation_agg_func.t.value1)->Column#5
|
||||
StreamAgg root funcs:count(distinct collation_agg_func.t.value, collation_agg_func.t.value1)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value, value1) from t;
|
||||
@ -87,8 +87,8 @@ count(distinct value, value1)
|
||||
3
|
||||
explain format='plan_tree' select count(distinct value collate utf8mb4_bin, value1) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct Column#8, Column#9)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8, collation_agg_func.t.value1->Column#9
|
||||
StreamAgg root funcs:count(distinct Column, Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column, collation_agg_func.t.value1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct value collate utf8mb4_bin, value1) from t;
|
||||
@ -96,7 +96,7 @@ count(distinct value collate utf8mb4_bin, value1)
|
||||
4
|
||||
explain format='plan_tree' select approx_count_distinct(value) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value)->Column#5
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value) from t;
|
||||
@ -104,8 +104,8 @@ approx_count_distinct(value)
|
||||
2
|
||||
explain format='plan_tree' select approx_count_distinct(value collate utf8mb4_bin) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(Column#6)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6
|
||||
HashAgg root funcs:approx_count_distinct(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value collate utf8mb4_bin) from t;
|
||||
@ -113,7 +113,7 @@ approx_count_distinct(value collate utf8mb4_bin)
|
||||
3
|
||||
explain format='plan_tree' select approx_count_distinct(value, value1) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value, collation_agg_func.t.value1)->Column#5
|
||||
HashAgg root funcs:approx_count_distinct(collation_agg_func.t.value, collation_agg_func.t.value1)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value, value1) from t;
|
||||
@ -121,8 +121,8 @@ approx_count_distinct(value, value1)
|
||||
3
|
||||
explain format='plan_tree' select approx_count_distinct(value collate utf8mb4_bin, value1) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(Column#6, Column#7)->Column#5
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6, collation_agg_func.t.value1->Column#7
|
||||
HashAgg root funcs:approx_count_distinct(Column, Column)->Column
|
||||
└─Projection root cast(collation_agg_func.t.value, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column, collation_agg_func.t.value1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(value collate utf8mb4_bin, value1) from t;
|
||||
@ -140,7 +140,7 @@ TOTAL_SPLIT_REGION SCATTER_FINISH_RATIO
|
||||
6 1
|
||||
explain format='plan_tree' select min(a) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.a)->Column#6
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.a)->Column
|
||||
└─TopN root collation_agg_func.tt.a, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.a, offset:0, count:1
|
||||
@ -148,8 +148,8 @@ StreamAgg root funcs:min(collation_agg_func.tt.a)->Column#6
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select lower(min(a)) from tt;
|
||||
id task access object operator info
|
||||
Projection root lower(Column#6)->Column#7
|
||||
└─StreamAgg root funcs:min(collation_agg_func.tt.a)->Column#6
|
||||
Projection root lower(Column)->Column
|
||||
└─StreamAgg root funcs:min(collation_agg_func.tt.a)->Column
|
||||
└─TopN root collation_agg_func.tt.a, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.a, offset:0, count:1
|
||||
@ -160,11 +160,11 @@ lower(min(a))
|
||||
a
|
||||
explain format='plan_tree' select min(a collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:min(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.a
|
||||
└─TopN root Column#7, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin), offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
@ -174,7 +174,7 @@ min(a collate utf8mb4_bin)
|
||||
A
|
||||
explain format='plan_tree' select max(a) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.a)->Column#6
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.a)->Column
|
||||
└─TopN root collation_agg_func.tt.a:desc, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.a:desc, offset:0, count:1
|
||||
@ -185,11 +185,11 @@ max(a)
|
||||
c
|
||||
explain format='plan_tree' select max(a collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.a
|
||||
└─TopN root Column#7:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.a, cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin):desc, offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.a, char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
@ -199,9 +199,9 @@ max(a collate utf8mb4_bin)
|
||||
c
|
||||
explain format='plan_tree' select min(b) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#6
|
||||
StreamAgg root funcs:min(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:min(collation_agg_func.tt.b)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:min(collation_agg_func.tt.b)->Column
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select min(b) from tt;
|
||||
min(b)
|
||||
@ -212,9 +212,9 @@ select min(b collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select max(b) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#8)->Column#6
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:max(collation_agg_func.tt.b)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:max(collation_agg_func.tt.b)->Column
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select max(b) from tt;
|
||||
max(b)
|
||||
@ -225,7 +225,7 @@ select max(b collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select min(c) from tt;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:min(collation_agg_func.tt.c)->Column#6
|
||||
HashAgg root funcs:min(collation_agg_func.tt.c)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select min(c) from tt;
|
||||
@ -237,7 +237,7 @@ select min(c collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select max(c) from tt;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:max(collation_agg_func.tt.c)->Column#6
|
||||
HashAgg root funcs:max(collation_agg_func.tt.c)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
select max(c) from tt;
|
||||
@ -249,7 +249,7 @@ select max(c collate utf8mb4_bin) from tt;
|
||||
Error 1235 (42000): This version of TiDB doesn't yet support 'use collate clause for enum or set'
|
||||
explain format='plan_tree' select min(d) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.d)->Column#6
|
||||
StreamAgg root funcs:min(collation_agg_func.tt.d)->Column
|
||||
└─TopN root collation_agg_func.tt.d, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.d, offset:0, count:1
|
||||
@ -260,11 +260,11 @@ min(d)
|
||||
{"A": "A"}
|
||||
explain format='plan_tree' select min(d collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:min(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.d
|
||||
└─TopN root Column#7, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin), offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
@ -274,7 +274,7 @@ min(d collate utf8mb4_bin)
|
||||
{"A": "A"}
|
||||
explain format='plan_tree' select max(d) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.d)->Column#6
|
||||
StreamAgg root funcs:max(collation_agg_func.tt.d)->Column
|
||||
└─TopN root collation_agg_func.tt.d:desc, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] collation_agg_func.tt.d:desc, offset:0, count:1
|
||||
@ -285,11 +285,11 @@ max(d)
|
||||
{"c": "c"}
|
||||
explain format='plan_tree' select max(d collate utf8mb4_bin) from tt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#8)->Column#6
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─Projection root cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Projection root collation_agg_func.tt.d
|
||||
└─TopN root Column#7:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#7
|
||||
└─TopN root Column:desc, offset:0, count:1
|
||||
└─Projection root collation_agg_func.tt.d, cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin):desc, offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(cast(collation_agg_func.tt.d, longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)))
|
||||
|
||||
@ -167,7 +167,7 @@ SELECT v0.c0 FROM v0 WHERE (v0.c0)NOT LIKE(BINARY v0.c0);
|
||||
c0
|
||||
explain format='plan_tree' SELECT v0.c0 FROM v0 WHERE (v0.c0)NOT LIKE(BINARY v0.c0);
|
||||
id task access object operator info
|
||||
Projection root is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20)))->Column#7
|
||||
Projection root is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20)))->Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─Selection(Build) root not(like(cast(is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20))), var_string(20)), cast(is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20))), binary(1)), 92))
|
||||
│ └─TableReader root data:TableFullScan
|
||||
|
||||
@ -188,7 +188,7 @@ SELECT v0.c0 FROM v0 WHERE (v0.c0)NOT LIKE(BINARY v0.c0);
|
||||
c0
|
||||
explain format='plan_tree' SELECT v0.c0 FROM v0 WHERE (v0.c0)NOT LIKE(BINARY v0.c0);
|
||||
id task access object operator info
|
||||
Projection root is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20)))->Column#7
|
||||
Projection root is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20)))->Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─Selection(Build) root not(like(cast(is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20))), var_string(20)), cast(is_ipv4(cast(collation_check_use_collation.t0.c1, var_string(20))), binary(1)), 92))
|
||||
│ └─TableReader root data:TableFullScan
|
||||
|
||||
@ -566,12 +566,12 @@ insert into t2 values(3, 2);
|
||||
explain format='plan_tree' select * from t1 where c1 > all(with cte1 as (select c1 from t2 where t2.c2 = t1.c2) select c1 from cte1);
|
||||
id task access object operator info
|
||||
Projection root cte.t1.c1, cte.t1.c2
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(cte.t1.c1, Column#11), if(ne(Column#12, 0), NULL, 1)), or(eq(Column#13, 0), if(isnull(cte.t1.c1), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(cte.t1.c1, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(cte.t1.c1), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:max(Column#19)->Column#11, funcs:sum(Column#20)->Column#12, funcs:count(Column#21)->Column#13
|
||||
└─StreamAgg(Probe) root funcs:max(Column)->Column, funcs:sum(Column)->Column, funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:max(cte.t2.c1)->Column#19, funcs:sum(isnull(cte.t2.c1))->Column#20, funcs:count(1)->Column#21
|
||||
└─StreamAgg cop[tikv] funcs:max(cte.t2.c1)->Column, funcs:sum(isnull(cte.t2.c1))->Column, funcs:count(1)->Column
|
||||
└─Selection cop[tikv] eq(cte.t2.c2, cte.t1.c2)
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
select * from t1 where c1 > all(with cte1 as (select c1 from t2 where t2.c2 = t1.c2) select c1 from cte1);
|
||||
@ -605,11 +605,11 @@ c1 c2
|
||||
explain format='plan_tree' select * from t1 where c1 > all(with recursive cte1 as (select c1 from t2 where t2.c2 = t1.c2 union all select c1+1 as c1 from cte1 limit 1) select c1 from cte1);
|
||||
id task access object operator info
|
||||
Projection root cte.t1.c1, cte.t1.c2
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(cte.t1.c1, Column#14), if(ne(Column#15, 0), NULL, 1)), or(eq(Column#16, 0), if(isnull(cte.t1.c1), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(cte.t1.c1, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(cte.t1.c1), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root funcs:max(Column#19)->Column#14, funcs:sum(Column#20)->Column#15, funcs:count(1)->Column#16
|
||||
└─Projection root cte.t2.c1->Column#19, cast(isnull(cte.t2.c1), decimal(20,0) BINARY)->Column#20
|
||||
└─HashAgg(Probe) root funcs:max(Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column
|
||||
└─Projection root cte.t2.c1->Column, cast(isnull(cte.t2.c1), decimal(20,0) BINARY)->Column
|
||||
└─CTEFullScan root CTE:cte1 data:CTE_0
|
||||
CTE_0 root Recursive CTE, limit(offset:0, count:1)
|
||||
├─TableReader(Seed Part) root data:Projection
|
||||
@ -643,11 +643,11 @@ c1 c2
|
||||
explain format='plan_tree' select * from t1 where c1 > all(with recursive cte1 as (select c1, c2 from t2 union all select c1+1 as c1, c2+1 as c2 from cte1 where cte1.c2=t1.c2) select c1 from cte1);
|
||||
id task access object operator info
|
||||
Projection root cte.t1.c1, cte.t1.c2
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(cte.t1.c1, Column#18), if(ne(Column#19, 0), NULL, 1)), or(eq(Column#20, 0), if(isnull(cte.t1.c1), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(cte.t1.c1, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(cte.t1.c1), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root funcs:max(Column#23)->Column#18, funcs:sum(Column#24)->Column#19, funcs:count(1)->Column#20
|
||||
└─Projection root cte.t2.c1->Column#23, cast(isnull(cte.t2.c1), decimal(20,0) BINARY)->Column#24
|
||||
└─HashAgg(Probe) root funcs:max(Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column
|
||||
└─Projection root cte.t2.c1->Column, cast(isnull(cte.t2.c1), decimal(20,0) BINARY)->Column
|
||||
└─CTEFullScan root CTE:cte1 data:CTE_0
|
||||
CTE_0 root Recursive CTE
|
||||
├─TableReader(Seed Part) root data:TableFullScan
|
||||
@ -816,8 +816,8 @@ explain format='plan_tree' with recursive cte1 as (select c1 from tt union selec
|
||||
select c1 from tt2 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt2.c1) union select c1 from tt3 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt3.c1) union
|
||||
select c1 from tt4 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt4.c1) union select c1 from tt5 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt5.c1) order by 1;
|
||||
id task access object operator info
|
||||
Sort root Column#28
|
||||
└─HashAgg root group by:Column#28, funcs:firstrow(Column#28)->Column#28
|
||||
Sort root Column
|
||||
└─HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Apply root CARTESIAN semi join, left side:TableReader
|
||||
│ ├─TableReader(Build) root data:TableFullScan
|
||||
@ -868,35 +868,35 @@ select c1 from tt union select c1 from cte2 where exists (select /*+ no_decorrel
|
||||
select c1 from tt2 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt2.c1) union select c1 from tt3 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt3.c1) union
|
||||
select c1 from tt4 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt4.c1) union select c1 from tt5 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt5.c1) order by 1;
|
||||
id task access object operator info
|
||||
Sort root Column#36
|
||||
└─HashAgg root group by:Column#36, funcs:firstrow(Column#36)->Column#36
|
||||
Sort root Column
|
||||
└─HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Apply root CARTESIAN semi join, left side:TableReader
|
||||
│ ├─TableReader(Build) root data:TableFullScan
|
||||
│ │ └─TableFullScan cop[tikv] table:tt2 keep order:false, stats:pseudo
|
||||
│ └─Limit(Probe) root offset:0, count:1
|
||||
│ └─Selection root eq(Column#23, cte1.tt2.c1)
|
||||
│ └─Selection root eq(Column, cte1.tt2.c1)
|
||||
│ └─CTEFullScan root CTE:cte1 data:CTE_0
|
||||
├─Apply root CARTESIAN semi join, left side:TableReader
|
||||
│ ├─TableReader(Build) root data:TableFullScan
|
||||
│ │ └─TableFullScan cop[tikv] table:tt3 keep order:false, stats:pseudo
|
||||
│ └─Limit(Probe) root offset:0, count:1
|
||||
│ └─Selection root eq(Column#27, cte1.tt3.c1)
|
||||
│ └─Selection root eq(Column, cte1.tt3.c1)
|
||||
│ └─CTEFullScan root CTE:cte1 data:CTE_0
|
||||
├─Apply root CARTESIAN semi join, left side:TableReader
|
||||
│ ├─TableReader(Build) root data:TableFullScan
|
||||
│ │ └─TableFullScan cop[tikv] table:tt4 keep order:false, stats:pseudo
|
||||
│ └─Limit(Probe) root offset:0, count:1
|
||||
│ └─Selection root eq(Column#31, cte1.tt4.c1)
|
||||
│ └─Selection root eq(Column, cte1.tt4.c1)
|
||||
│ └─CTEFullScan root CTE:cte1 data:CTE_0
|
||||
└─Apply root CARTESIAN semi join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tt5 keep order:false, stats:pseudo
|
||||
└─Limit(Probe) root offset:0, count:1
|
||||
└─Selection root eq(Column#35, cte1.tt5.c1)
|
||||
└─Selection root eq(Column, cte1.tt5.c1)
|
||||
└─CTEFullScan root CTE:cte1 data:CTE_0
|
||||
CTE_0 root Non-Recursive CTE
|
||||
└─HashAgg(Seed Part) root group by:Column#19, funcs:firstrow(Column#19)->Column#19
|
||||
└─HashAgg(Seed Part) root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tt keep order:false, stats:pseudo
|
||||
@ -1145,13 +1145,13 @@ FROM product_detail
|
||||
) a;
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─Projection root cte1.table_c.col_4->Column#418
|
||||
├─Projection root cte1.table_c.col_4->Column
|
||||
│ └─CTEFullScan root CTE:product_detail data:CTE_4
|
||||
└─Projection root cte1.table_c.col_4->Column#418
|
||||
└─Projection root cte1.table_c.col_4->Column
|
||||
└─CTEFullScan root CTE:product_detail data:CTE_4
|
||||
CTE_4 root Non-Recursive CTE
|
||||
└─Projection(Seed Part) root cte1.table_c.col_4, 3集合->Column#413
|
||||
└─HashJoin root left outer join, left side:HashJoin, equal:[eq(cte1.table_c.col_4, cte1.table_c.col_4) eq(Column#390, cte1.table_c.col_1)]
|
||||
└─Projection(Seed Part) root cte1.table_c.col_4, 3集合->Column
|
||||
└─HashJoin root left outer join, left side:HashJoin, equal:[eq(cte1.table_c.col_4, cte1.table_c.col_4) eq(Column, cte1.table_c.col_1)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(cte1.table_c.col_1)), not(isnull(cte1.table_c.col_4))
|
||||
│ └─TableFullScan cop[tikv] table:a keep order:false, stats:pseudo
|
||||
@ -1169,35 +1169,35 @@ CTE_0 root Non-Recursive CTE
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] eq(cte1.table_d.col_1, 20240628)
|
||||
│ │ │ │ └─TableFullScan cop[tikv] table:d keep order:false, stats:pseudo
|
||||
│ │ │ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column#159
|
||||
│ │ │ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column
|
||||
│ │ │ └─TopN root cte1.table_c.col_1:desc, offset:0, count:1
|
||||
│ │ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column#423, Column#424)]
|
||||
│ │ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column#424
|
||||
│ │ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
│ │ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column
|
||||
│ │ │ │ └─TableReader root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] eq(cast(cte1.table_d.col_2, double BINARY), 1)
|
||||
│ │ │ │ └─TableFullScan cop[tikv] table:d keep order:false, stats:pseudo
|
||||
│ │ │ └─Projection(Probe) root cte1.table_c.col_1, cast(cte1.table_c.col_1, double BINARY)->Column#423
|
||||
│ │ │ └─Projection(Probe) root cte1.table_c.col_1, cast(cte1.table_c.col_1, double BINARY)->Column
|
||||
│ │ │ └─IndexReader root index:Selection
|
||||
│ │ │ └─Selection cop[tikv] le(cte1.table_c.col_1, concat(cast(year(cast(date_sub(cte1.table_d.col_1, 1, "YEAR"), datetime(6) BINARY)), var_string(20)), "1231"))
|
||||
│ │ │ └─IndexFullScan cop[tikv] table:a, index:index_col_1_3(col_1, col_3) keep order:false, stats:pseudo
|
||||
│ │ └─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column#208
|
||||
│ │ └─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column
|
||||
│ │ └─TopN root cte1.table_a.col_1:desc, offset:0, count:1
|
||||
│ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column#429, Column#430)]
|
||||
│ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column#430
|
||||
│ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
│ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] eq(cast(cte1.table_d.col_2, double BINARY), 1)
|
||||
│ │ │ └─TableFullScan cop[tikv] table:d keep order:false, stats:pseudo
|
||||
│ │ └─Projection(Probe) root cte1.table_a.col_1, cast(cte1.table_a.col_1, double BINARY)->Column#429
|
||||
│ │ └─Projection(Probe) root cte1.table_a.col_1, cast(cte1.table_a.col_1, double BINARY)->Column
|
||||
│ │ └─IndexReader root index:Selection
|
||||
│ │ └─Selection cop[tikv] le(cte1.table_a.col_1, concat(cast(year(cast(date_sub(cte1.table_d.col_1, 1, "YEAR"), datetime(6) BINARY)), var_string(20)), "1231"))
|
||||
│ │ └─IndexFullScan cop[tikv] table:a, index:index_col_1(col_1) keep order:false, stats:pseudo
|
||||
│ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column#230
|
||||
│ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column
|
||||
│ └─Limit root offset:0, count:1
|
||||
│ └─IndexReader root index:Limit
|
||||
│ └─Limit cop[tikv] offset:0, count:1
|
||||
│ └─Selection cop[tikv] le(cast(cte1.table_c.col_1, double BINARY), cast(cte1.table_d.col_1, double BINARY))
|
||||
│ └─IndexFullScan cop[tikv] table:table_c, index:index_col_1_3(col_1, col_3) keep order:true, desc, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column#254
|
||||
└─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -1271,13 +1271,13 @@ FROM product_detail
|
||||
) a;
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─Projection root cte1.table_c.col_4->Column#418
|
||||
├─Projection root cte1.table_c.col_4->Column
|
||||
│ └─CTEFullScan root CTE:product_detail data:CTE_4
|
||||
└─Projection root cte1.table_c.col_4->Column#418
|
||||
└─Projection root cte1.table_c.col_4->Column
|
||||
└─CTEFullScan root CTE:product_detail data:CTE_4
|
||||
CTE_4 root Non-Recursive CTE
|
||||
└─Projection(Seed Part) root cte1.table_c.col_4, 3集合->Column#413
|
||||
└─HashJoin root left outer join, left side:HashJoin, equal:[eq(cte1.table_c.col_4, cte1.table_c.col_4) eq(Column#390, cte1.table_c.col_1)]
|
||||
└─Projection(Seed Part) root cte1.table_c.col_4, 3集合->Column
|
||||
└─HashJoin root left outer join, left side:HashJoin, equal:[eq(cte1.table_c.col_4, cte1.table_c.col_4) eq(Column, cte1.table_c.col_1)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(cte1.table_c.col_1)), not(isnull(cte1.table_c.col_4))
|
||||
│ └─TableFullScan cop[tikv] table:a keep order:false, stats:pseudo
|
||||
@ -1295,35 +1295,35 @@ CTE_0 root Non-Recursive CTE
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] eq(cte1.table_d.col_1, 20240628)
|
||||
│ │ │ │ └─TableFullScan cop[tikv] table:d keep order:false, stats:pseudo
|
||||
│ │ │ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column#159
|
||||
│ │ │ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column
|
||||
│ │ │ └─TopN root cte1.table_c.col_1:desc, offset:0, count:1
|
||||
│ │ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column#423, Column#424)]
|
||||
│ │ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column#424
|
||||
│ │ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
│ │ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column
|
||||
│ │ │ │ └─TableReader root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] eq(cast(cte1.table_d.col_2, double BINARY), 1)
|
||||
│ │ │ │ └─TableFullScan cop[tikv] table:d keep order:false, stats:pseudo
|
||||
│ │ │ └─Projection(Probe) root cte1.table_c.col_1, cast(cte1.table_c.col_1, double BINARY)->Column#423
|
||||
│ │ │ └─Projection(Probe) root cte1.table_c.col_1, cast(cte1.table_c.col_1, double BINARY)->Column
|
||||
│ │ │ └─IndexReader root index:Selection
|
||||
│ │ │ └─Selection cop[tikv] le(cte1.table_c.col_1, concat(cast(year(cast(date_sub(cte1.table_d.col_1, 1, "YEAR"), datetime(6) BINARY)), var_string(20)), "1231"))
|
||||
│ │ │ └─IndexFullScan cop[tikv] table:a, index:index_col_1_3(col_1, col_3) keep order:false, stats:pseudo
|
||||
│ │ └─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column#208
|
||||
│ │ └─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column
|
||||
│ │ └─TopN root cte1.table_a.col_1:desc, offset:0, count:1
|
||||
│ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column#429, Column#430)]
|
||||
│ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column#430
|
||||
│ │ └─HashJoin root semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
│ │ ├─Projection(Build) root cast(cte1.table_d.col_1, double BINARY)->Column
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] eq(cast(cte1.table_d.col_2, double BINARY), 1)
|
||||
│ │ │ └─TableFullScan cop[tikv] table:d keep order:false, stats:pseudo
|
||||
│ │ └─Projection(Probe) root cte1.table_a.col_1, cast(cte1.table_a.col_1, double BINARY)->Column#429
|
||||
│ │ └─Projection(Probe) root cte1.table_a.col_1, cast(cte1.table_a.col_1, double BINARY)->Column
|
||||
│ │ └─IndexReader root index:Selection
|
||||
│ │ └─Selection cop[tikv] le(cte1.table_a.col_1, concat(cast(year(cast(date_sub(cte1.table_d.col_1, 1, "YEAR"), datetime(6) BINARY)), var_string(20)), "1231"))
|
||||
│ │ └─IndexFullScan cop[tikv] table:a, index:index_col_1(col_1) keep order:false, stats:pseudo
|
||||
│ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column#230
|
||||
│ └─StreamAgg(Probe) root funcs:max(cte1.table_c.col_1)->Column
|
||||
│ └─Limit root offset:0, count:1
|
||||
│ └─IndexReader root index:Limit
|
||||
│ └─Limit cop[tikv] offset:0, count:1
|
||||
│ └─Selection cop[tikv] le(cast(cte1.table_c.col_1, double BINARY), cast(cte1.table_d.col_1, double BINARY))
|
||||
│ └─IndexFullScan cop[tikv] table:table_c, index:index_col_1_3(col_1, col_3) keep order:true, desc, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column#254
|
||||
└─StreamAgg(Probe) root funcs:max(cte1.table_a.col_1)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
|
||||
@ -542,14 +542,14 @@ CREATE TABLE `orders` ( `O_ORDERKEY` bigint(20) NOT NULL, `O_CUSTKEY` bigint(2
|
||||
set tidb_opt_agg_push_down=ON;
|
||||
explain format='plan_tree' SELECT /*+ hash_join_build(customer) */ c_custkey, count(o_orderkey) as c_count from customer left join orders on c_custkey = o_custkey and o_comment not like '%special%requests%' group by c_custkey;
|
||||
id task access object operator info
|
||||
Projection root executor__aggregate.customer.c_custkey, Column#18
|
||||
└─HashAgg root group by:executor__aggregate.customer.c_custkey, funcs:count(Column#19)->Column#18, funcs:firstrow(executor__aggregate.customer.c_custkey)->executor__aggregate.customer.c_custkey
|
||||
Projection root executor__aggregate.customer.c_custkey, Column
|
||||
└─HashAgg root group by:executor__aggregate.customer.c_custkey, funcs:count(Column)->Column, funcs:firstrow(executor__aggregate.customer.c_custkey)->executor__aggregate.customer.c_custkey
|
||||
└─HashJoin root left outer join, left side:TableReader, equal:[eq(executor__aggregate.customer.c_custkey, executor__aggregate.orders.o_custkey)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:customer keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root group by:executor__aggregate.orders.o_custkey, funcs:count(Column#20)->Column#19, funcs:firstrow(executor__aggregate.orders.o_custkey)->executor__aggregate.orders.o_custkey
|
||||
└─HashAgg(Probe) root group by:executor__aggregate.orders.o_custkey, funcs:count(Column)->Column, funcs:firstrow(executor__aggregate.orders.o_custkey)->executor__aggregate.orders.o_custkey
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:executor__aggregate.orders.o_custkey, funcs:count(executor__aggregate.orders.o_orderkey)->Column#20
|
||||
└─HashAgg cop[tikv] group by:executor__aggregate.orders.o_custkey, funcs:count(executor__aggregate.orders.o_orderkey)->Column
|
||||
└─Selection cop[tikv] not(like(executor__aggregate.orders.o_comment, "%special%requests%", 92))
|
||||
└─TableFullScan cop[tikv] table:orders keep order:false, stats:pseudo
|
||||
set tidb_opt_agg_push_down=default;
|
||||
@ -1984,8 +1984,8 @@ insert into t values (1), (1), (1),(2),(3),(2),(3),(2),(3);
|
||||
explain format = 'plan_tree' select * from t order by i + 1;
|
||||
id task access object operator info
|
||||
Projection root executor__aggregate.t.i
|
||||
└─Sort root Column#3
|
||||
└─Projection root executor__aggregate.t.i, plus(executor__aggregate.t.i, 1)->Column#3
|
||||
└─Sort root Column
|
||||
└─Projection root executor__aggregate.t.i, plus(executor__aggregate.t.i, 1)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select * from t order by i + 1;
|
||||
@ -2002,8 +2002,8 @@ i
|
||||
explain format = 'plan_tree' select * from t order by i + 1 limit 2;
|
||||
id task access object operator info
|
||||
Projection root executor__aggregate.t.i
|
||||
└─TopN root Column#3, offset:0, count:2
|
||||
└─Projection root executor__aggregate.t.i, plus(executor__aggregate.t.i, 1)->Column#3
|
||||
└─TopN root Column, offset:0, count:2
|
||||
└─Projection root executor__aggregate.t.i, plus(executor__aggregate.t.i, 1)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] plus(executor__aggregate.t.i, 1), offset:0, count:2
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -2032,27 +2032,27 @@ sum(a) (select NULL from test where tt.a = test.a limit 1) (select NULL from tes
|
||||
1 NULL NULL NULL
|
||||
explain format = 'plan_tree' select /*+ hash_agg() */ sum(a), (select NULL from test where tt.a = test.a limit 1),(select NULL from test where tt.a = test.a limit 1),(select NULL from test where tt.a = test.a limit 1) from test tt;
|
||||
id task access object operator info
|
||||
Projection root Column#9, Column#12, Column#15, Column#18
|
||||
Projection root Column, Column, Column, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:Apply
|
||||
├─Apply(Build) root CARTESIAN left outer join, left side:Apply
|
||||
│ ├─Apply(Build) root CARTESIAN left outer join, left side:HashAgg
|
||||
│ │ ├─HashAgg(Build) root funcs:sum(Column#28)->Column#9, funcs:firstrow(Column#29)->executor__aggregate.test.a
|
||||
│ │ │ └─Projection root cast(executor__aggregate.test.a, decimal(10,0) BINARY)->Column#28, executor__aggregate.test.a->Column#29
|
||||
│ │ ├─HashAgg(Build) root funcs:sum(Column)->Column, funcs:firstrow(Column)->executor__aggregate.test.a
|
||||
│ │ │ └─Projection root cast(executor__aggregate.test.a, decimal(10,0) BINARY)->Column, executor__aggregate.test.a->Column
|
||||
│ │ │ └─TableReader root data:TableFullScan
|
||||
│ │ │ └─TableFullScan cop[tikv] table:tt keep order:false
|
||||
│ │ └─Projection(Probe) root <nil>->Column#12
|
||||
│ │ └─Projection(Probe) root <nil>->Column
|
||||
│ │ └─Limit root offset:0, count:1
|
||||
│ │ └─TableReader root data:Limit
|
||||
│ │ └─Limit cop[tikv] offset:0, count:1
|
||||
│ │ └─Selection cop[tikv] eq(executor__aggregate.test.a, executor__aggregate.test.a)
|
||||
│ │ └─TableFullScan cop[tikv] table:test keep order:false
|
||||
│ └─Projection(Probe) root <nil>->Column#15
|
||||
│ └─Projection(Probe) root <nil>->Column
|
||||
│ └─Limit root offset:0, count:1
|
||||
│ └─TableReader root data:Limit
|
||||
│ └─Limit cop[tikv] offset:0, count:1
|
||||
│ └─Selection cop[tikv] eq(executor__aggregate.test.a, executor__aggregate.test.a)
|
||||
│ └─TableFullScan cop[tikv] table:test keep order:false
|
||||
└─Projection(Probe) root <nil>->Column#18
|
||||
└─Projection(Probe) root <nil>->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─TableReader root data:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -2090,9 +2090,9 @@ AND `f` <= 1753718399
|
||||
AND `g` = 0
|
||||
GROUP BY `a`, left(FROM_UNIXTIME(e), 10);
|
||||
id task access object operator info
|
||||
Projection root Column#9, left(cast(from_unixtime(cast(executor__aggregate.t_a.e, decimal(10,0) UNSIGNED BINARY)), var_string(19)), 10)->Column#13, executor__aggregate.t_a.a, Column#10, Column#11, Column#12
|
||||
└─HashAgg root group by:Column#19, Column#21, funcs:max(Column#15)->Column#9, funcs:sum(Column#16)->Column#10, funcs:sum(Column#17)->Column#11, funcs:sum(Column#18)->Column#12, funcs:firstrow(Column#19)->executor__aggregate.t_a.a, funcs:firstrow(Column#20)->executor__aggregate.t_a.e
|
||||
└─Projection root executor__aggregate.t_a.id->Column#15, executor__aggregate.t_a.b->Column#16, executor__aggregate.t_a.c->Column#17, executor__aggregate.t_a.d->Column#18, executor__aggregate.t_a.a->Column#19, executor__aggregate.t_a.e->Column#20, left(cast(from_unixtime(cast(executor__aggregate.t_a.e, decimal(10,0) UNSIGNED BINARY)), var_string(19)), 10)->Column#21
|
||||
Projection root Column, left(cast(from_unixtime(cast(executor__aggregate.t_a.e, decimal(10,0) UNSIGNED BINARY)), var_string(19)), 10)->Column, executor__aggregate.t_a.a, Column, Column, Column
|
||||
└─HashAgg root group by:Column, Column, funcs:max(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->executor__aggregate.t_a.a, funcs:firstrow(Column)->executor__aggregate.t_a.e
|
||||
└─Projection root executor__aggregate.t_a.id->Column, executor__aggregate.t_a.b->Column, executor__aggregate.t_a.c->Column, executor__aggregate.t_a.d->Column, executor__aggregate.t_a.a->Column, executor__aggregate.t_a.e->Column, left(cast(from_unixtime(cast(executor__aggregate.t_a.e, decimal(10,0) UNSIGNED BINARY)), var_string(19)), 10)->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] eq(executor__aggregate.t_a.g, 0), ge(executor__aggregate.t_a.f, 1753632000), le(executor__aggregate.t_a.f, 1753718399)
|
||||
└─TableFullScan cop[tikv] table:t_a keep order:false, stats:pseudo
|
||||
|
||||
@ -221,14 +221,14 @@ create table t3 (id1 int ,id2 char(10),id8 int ,id3 text,id4 blob,id5 json,id6 v
|
||||
insert into t3 (id1,id2,id8)values(1,1,1),(2,2,2),(3,3,3);
|
||||
explain format='plan_tree' select id1 from t3 where id2 > '3' or id8 < 10 union (select id1 from t3 where id2 > '4' or id8 < 7);
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#17, funcs:firstrow(Column#17)->Column#17
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Projection root executor__chunk_reuse.t3.id1->Column#17
|
||||
├─Projection root executor__chunk_reuse.t3.id1->Column
|
||||
│ └─IndexMerge root type: union
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:t3, index:id2(id2) range:("3",+inf], keep order:false, stats:pseudo
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:t3, index:id8(id8) range:[-inf,10), keep order:false, stats:pseudo
|
||||
│ └─TableRowIDScan(Probe) cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─Projection root executor__chunk_reuse.t3.id1->Column#17
|
||||
└─Projection root executor__chunk_reuse.t3.id1->Column
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t3, index:id2(id2) range:("4",+inf], keep order:false, stats:pseudo
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t3, index:id8(id8) range:[-inf,7), keep order:false, stats:pseudo
|
||||
@ -291,7 +291,7 @@ create table t4 (id1 int ,id2 char(10),id8 int ,id3 text,id4 blob,id5 json,id6 v
|
||||
insert into t4 (id1,id2,id8)values(1,1,1),(2,2,2),(3,3,3);
|
||||
explain format='plan_tree' select id2 from t4 where id2 > '3' union (select id2 from t4 where id2 > '4');
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#19, funcs:firstrow(Column#19)->Column#19
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─IndexReader root index:IndexRangeScan
|
||||
│ └─IndexRangeScan cop[tikv] table:t4, index:id2(id2) range:("3",+inf], keep order:false, stats:pseudo
|
||||
|
||||
@ -2608,11 +2608,11 @@ insert into t2 values (1,'1'),(2,'2'),(null,null),(null,'3');
|
||||
insert into t3 values (2,2.1),(3,3);
|
||||
explain format = 'plan_tree' select * from t3 union select * from t1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#7, Column#8, funcs:firstrow(Column#7)->Column#7, funcs:firstrow(Column#8)->Column#8
|
||||
HashAgg root group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─Projection root executor__executor.t1.a->Column#7, cast(executor__executor.t1.b, decimal(30,10) BINARY)->Column#8
|
||||
└─Projection root executor__executor.t1.a->Column, cast(executor__executor.t1.b, decimal(30,10) BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
select * from t3 union select * from t1;
|
||||
@ -2627,7 +2627,7 @@ id task access object operator info
|
||||
Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─Projection root executor__executor.t1.a->Column#7, cast(executor__executor.t1.b, varchar(20) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8
|
||||
└─Projection root executor__executor.t1.a->Column, cast(executor__executor.t1.b, varchar(20) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
select * from t2 union all select * from t1;
|
||||
@ -2672,13 +2672,13 @@ NULL NULL
|
||||
explain format = 'plan_tree' select * from t1 union all select * from t2 union all select * from t3;
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─Projection root executor__executor.t1.a->Column#10, cast(executor__executor.t1.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11
|
||||
├─Projection root executor__executor.t1.a->Column, cast(executor__executor.t1.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
├─Projection root executor__executor.t2.a->Column#10, cast(executor__executor.t2.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11
|
||||
├─Projection root executor__executor.t2.a->Column, cast(executor__executor.t2.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─Projection root executor__executor.t3.a->Column#10, cast(executor__executor.t3.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11
|
||||
└─Projection root executor__executor.t3.a->Column, cast(executor__executor.t3.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
select * from t1 union all select * from t2 union all select * from t3;
|
||||
@ -2696,12 +2696,12 @@ NULL 3
|
||||
3 3.0000000000
|
||||
explain format = 'plan_tree' select * from t1 union all select * from t2 except select * from t3;
|
||||
id task access object operator info
|
||||
HashJoin root anti semi join, left side:HashAgg, equal:[nulleq(Column#10, executor__executor.t3.a)], other cond:nulleq(cast(Column#11, double BINARY), cast(executor__executor.t3.b, double BINARY))
|
||||
HashJoin root anti semi join, left side:HashAgg, equal:[nulleq(Column, executor__executor.t3.a)], other cond:nulleq(cast(Column, double BINARY), cast(executor__executor.t3.b, double BINARY))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root group by:Column#10, Column#11, funcs:firstrow(Column#10)->Column#10, funcs:firstrow(Column#11)->Column#11
|
||||
└─HashAgg(Probe) root group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Projection root executor__executor.t1.a->Column#10, cast(executor__executor.t1.b, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11
|
||||
├─Projection root executor__executor.t1.a->Column, cast(executor__executor.t1.b, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─TableReader root data:TableFullScan
|
||||
@ -2732,7 +2732,7 @@ NULL NULL
|
||||
explain format = 'plan_tree' select * from t1 union all select * from t2 intersect select * from t3;
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─Projection root executor__executor.t1.a->Column#10, cast(executor__executor.t1.b, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11
|
||||
├─Projection root executor__executor.t1.a->Column, cast(executor__executor.t1.b, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─HashJoin root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)], other cond:nulleq(cast(executor__executor.t2.b, double BINARY), cast(executor__executor.t3.b, double BINARY))
|
||||
@ -2785,7 +2785,7 @@ select * from t as t1 inner join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL;
|
||||
c1 c2 c1 c2
|
||||
explain format = 'plan_tree' select count(*) from t as t1 inner join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#7
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─TableDual root rows:0
|
||||
select count(*) from t as t1 inner join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL;
|
||||
count(*)
|
||||
@ -2802,7 +2802,7 @@ select * from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL;
|
||||
c1 c2 c1 c2
|
||||
explain format = 'plan_tree' select count(*) from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#7
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─TableDual root rows:0
|
||||
select count(*) from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL;
|
||||
count(*)
|
||||
@ -2829,7 +2829,7 @@ insert into t2 values (1),(2),(null),(null);
|
||||
insert into t3 values (2),(3);
|
||||
explain format='plan_tree' select * from t3 union select * from t1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
@ -2910,10 +2910,10 @@ NULL
|
||||
3
|
||||
explain format='plan_tree' select * from t1 union all select * from t2 except select * from t3;
|
||||
id task access object operator info
|
||||
HashJoin root anti semi join, left side:HashAgg, equal:[nulleq(Column#7, executor__executor.t3.a)]
|
||||
HashJoin root anti semi join, left side:HashAgg, equal:[nulleq(Column, executor__executor.t3.a)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root group by:Column#7, funcs:firstrow(Column#7)->Column#7
|
||||
└─HashAgg(Probe) root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -3020,7 +3020,7 @@ NULL
|
||||
3
|
||||
explain format='plan_tree' select * from t1 union (select * from t2 union all select * from t3);
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#8, funcs:firstrow(Column#8)->Column#8
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -3037,8 +3037,8 @@ NULL
|
||||
3
|
||||
explain format='plan_tree' (select * from t1 intersect select * from t1) except (select * from t2 union select * from t3);
|
||||
id task access object operator info
|
||||
HashJoin root anti semi join, left side:HashJoin, equal:[nulleq(executor__executor.t1.a, Column#9)]
|
||||
├─HashAgg(Build) root group by:Column#9, funcs:firstrow(Column#9)->Column#9
|
||||
HashJoin root anti semi join, left side:HashJoin, equal:[nulleq(executor__executor.t1.a, Column)]
|
||||
├─HashAgg(Build) root group by:Column, funcs:firstrow(Column)->Column
|
||||
│ └─Union root
|
||||
│ ├─TableReader root data:TableFullScan
|
||||
│ │ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
|
||||
@ -102,11 +102,11 @@ ANALYZE TABLE t1;
|
||||
EXPLAIN FORMAT='plan_tree' SELECT product, country_id , year, SUM(profit)
|
||||
FROM t1 GROUP BY product, country_id, year WITH ROLLUP;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#11, Column#7->Column#12, Column#8->Column#13, Column#10
|
||||
└─HashAgg root group by:Column#16, Column#17, Column#18, Column#19, funcs:sum(Column#15)->Column#10, funcs:firstrow(Column#16)->Column#6, funcs:firstrow(Column#17)->Column#7, funcs:firstrow(Column#18)->Column#8
|
||||
└─Projection root cast(executor__expand.t1.profit, decimal(10,0) BINARY)->Column#15, Column#6->Column#16, Column#7->Column#17, Column#8->Column#18, gid->Column#19
|
||||
└─Expand root level-projection:[executor__expand.t1.profit, <nil>->Column#6, <nil>->Column#7, <nil>->Column#8, 0->gid],[executor__expand.t1.profit, Column#6, <nil>->Column#7, <nil>->Column#8, 1->gid],[executor__expand.t1.profit, Column#6, Column#7, <nil>->Column#8, 3->gid],[executor__expand.t1.profit, Column#6, Column#7, Column#8, 7->gid]; schema: [executor__expand.t1.profit,Column#6,Column#7,Column#8,gid]
|
||||
└─Projection root executor__expand.t1.profit, executor__expand.t1.product->Column#6, executor__expand.t1.country_id->Column#7, executor__expand.t1.year->Column#8
|
||||
Projection root Column, Column, Column, Column
|
||||
└─HashAgg root group by:Column, Column, Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Projection root cast(executor__expand.t1.profit, decimal(10,0) BINARY)->Column, Column, Column, Column, gid->Column
|
||||
└─Expand root level-projection:[executor__expand.t1.profit, <nil>->Column, <nil>->Column, <nil>->Column, 0->gid],[executor__expand.t1.profit, Column, <nil>->Column, <nil>->Column, 1->gid],[executor__expand.t1.profit, Column, Column, <nil>->Column, 3->gid],[executor__expand.t1.profit, Column, Column, Column, 7->gid]; schema: [executor__expand.t1.profit,Column,Column,Column,gid]
|
||||
└─Projection root executor__expand.t1.profit, executor__expand.t1.product->Column, executor__expand.t1.country_id->Column, executor__expand.t1.year->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false
|
||||
|
||||
|
||||
@ -58,7 +58,7 @@ id task access object operator info
|
||||
MemTableScan root table:STATEMENTS_SUMMARY
|
||||
explain format='plan_tree' select * from information_schema.statements_summary where digest is null;
|
||||
id task access object operator info
|
||||
Selection root isnull(Column#5)
|
||||
Selection root isnull(Column)
|
||||
└─MemTableScan root table:STATEMENTS_SUMMARY
|
||||
explain format='plan_tree' select * from information_schema.statements_summary where digest = 'abcdefg';
|
||||
id task access object operator info
|
||||
@ -85,10 +85,10 @@ KEY f (f)
|
||||
explain format='plan_tree' select /*+ inl_hash_join(t1) */ * from tt123 t1 join tt123 t2 on t1.b=t2.e;
|
||||
id task access object operator info
|
||||
Projection root executor__explain.tt123.id, executor__explain.tt123.a, executor__explain.tt123.b, executor__explain.tt123.c, executor__explain.tt123.d, executor__explain.tt123.e, executor__explain.tt123.f, executor__explain.tt123.id, executor__explain.tt123.a, executor__explain.tt123.b, executor__explain.tt123.c, executor__explain.tt123.d, executor__explain.tt123.e, executor__explain.tt123.f
|
||||
└─HashJoin root inner join, equal:[eq(executor__explain.tt123.e, Column#15)]
|
||||
└─HashJoin root inner join, equal:[eq(executor__explain.tt123.e, Column)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root executor__explain.tt123.id, executor__explain.tt123.a, executor__explain.tt123.b, executor__explain.tt123.c, executor__explain.tt123.d, executor__explain.tt123.e, executor__explain.tt123.f, cast(executor__explain.tt123.b, json BINARY)->Column#15
|
||||
└─Projection(Probe) root executor__explain.tt123.id, executor__explain.tt123.a, executor__explain.tt123.b, executor__explain.tt123.c, executor__explain.tt123.d, executor__explain.tt123.e, executor__explain.tt123.f, cast(executor__explain.tt123.b, json BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
drop table if exists t;
|
||||
@ -345,9 +345,9 @@ WHERE rn.id1 = '03'
|
||||
id task access object operator info
|
||||
Update root N/A
|
||||
└─Projection root executor__explain.t1.id1, executor__explain.t1.id2, executor__explain.t1.id3, executor__explain.t1.id4, executor__explain.t1.id5, executor__explain.t1.id6, executor__explain.t1.id7, executor__explain.t1._tidb_rowid
|
||||
└─Selection root eq(minus(executor__explain.t1.id6, ifnull(executor__explain.t1.id7, 0)), ifnull(Column#22, 0))
|
||||
└─Selection root eq(minus(executor__explain.t1.id6, ifnull(executor__explain.t1.id7, 0)), ifnull(Column, 0))
|
||||
└─HashJoin root left outer join, left side:IndexLookUp, equal:[eq(executor__explain.t1.id2, executor__explain.t2.id2)]
|
||||
├─HashAgg(Build) root group by:executor__explain.t2.id2, funcs:count(1)->Column#22, funcs:firstrow(executor__explain.t2.id2)->executor__explain.t2.id2
|
||||
├─HashAgg(Build) root group by:executor__explain.t2.id2, funcs:count(1)->Column, funcs:firstrow(executor__explain.t2.id2)->executor__explain.t2.id2
|
||||
│ └─IndexJoin root inner join, inner:IndexReader, outer key:executor__explain.t2.id10, inner key:executor__explain.t3.id20, equal cond:eq(executor__explain.t2.id10, executor__explain.t3.id20)
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:executor__explain.t1.id2, inner key:executor__explain.t2.id2, equal cond:eq(executor__explain.t1.id2, executor__explain.t2.id2)
|
||||
│ │ ├─Projection(Build) root executor__explain.t1.id2
|
||||
@ -381,8 +381,8 @@ CREATE TABLE `t` (`a` mediumint(9) NOT NULL,`b` year(4) NOT NULL,`c` varbinary(6
|
||||
INSERT INTO `t` VALUES (2065948,1999,_binary '8jxN','rf',-54,-5656,'1987-07-03',259254,'7me坨'),(-8248164,2024,_binary 'zA5A','s)DAkX3',-93,-12983,'2027-12-18',299573,'LUf咲'),(-6131509,2023,_binary 'xdex#Y2','1th%h',-51,19149,'2013-10-28',428279,'矷莒X'),(7545837,1998,_binary 'PCVO','&(lJw6',30,4093,'1987-07-03',736235,'腏@TOIJ'),(-7449472,2029,_binary 'B7&jrl','EjbFfX!',80,-7590,'2011-11-03',765580,'堮ZQF_'),(-7176200,1988,_binary 'tiPglv7mX_#','CnCtNb',-25,NULL,'1987-07-03',842956,'Gq羣嗳殓'),(-115168,2036,_binary 'BqmX$-4It','!8#dvH',82,18787,'1991-09-20',921706,'椉2庘v'),(6665100,1987,_binary '4IJgk0fr4','(D',-73,28628,'1987-07-03',1149668,'摔玝S渉'),(-4065661,2021,_binary '8G%','xDO39xw#',-107,17356,'1970-12-20',1316239,'+0c35掬-阗'),(7622462,1990,_binary '&o+)s)D0','kjoS9Dzld',84,688,'1987-07-03',1403663,'$H鍿_M~'),(5269354,2018,_binary 'wq9hC8','s8XPrN+',-2,-31272,'2008-05-26',1534517,'y椁n躁Q'),(2065948,1982,_binary '8jxNjbksV','g$+i4dg',11,19800,'1987-07-03',1591457,'z^+H~薼A'),(4076971,2024,_binary '&!RrsH','7Mpvk',-63,-632,'2032-10-28',1611011,'鬰+EXmx'),(3522062,1981,_binary ')nq#!UiHKk8','j~wFe77ai',50,6951,'1987-07-03',1716854,'J'),(7859777,2012,_binary 'PBA5xgJ&G&','UM7o!u',18,-5978,'1987-07-03',1967012,'e)浢L獹'),(2065948,2028,_binary '8jxNjbk','JmsEki9t4',51,12002,'2017-12-23',1981288,'mp氏襚');
|
||||
explain format='plan_tree' SELECT /*+ AGG_TO_COP() STREAM_AGG()*/ (NOT (`t`.`i`>=_UTF8MB4'j筧8') OR NOT (`t`.`i`=_UTF8MB4'暈lH忧ll6')) IS TRUE,MAX(`t`.`e`) AS `r0`,QUOTE(`t`.`i`) AS `r1` FROM `t` WHERE `t`.`h`>240817 OR `t`.`i` BETWEEN _UTF8MB4'WVz' AND _UTF8MB4'G#駧褉ZC領*lov' GROUP BY `t`.`i`;
|
||||
id task access object operator info
|
||||
Projection root istrue(or(not(ge(executor__explain.t.i, j筧8)), not(eq(executor__explain.t.i, 暈lH忧ll6))))->Column#11, Column#10, quote(executor__explain.t.i)->Column#12
|
||||
└─StreamAgg root group by:executor__explain.t.i, funcs:max(executor__explain.t.e)->Column#10, funcs:firstrow(executor__explain.t.i)->executor__explain.t.i
|
||||
Projection root istrue(or(not(ge(executor__explain.t.i, j筧8)), not(eq(executor__explain.t.i, 暈lH忧ll6))))->Column, Column, quote(executor__explain.t.i)->Column
|
||||
└─StreamAgg root group by:executor__explain.t.i, funcs:max(executor__explain.t.e)->Column, funcs:firstrow(executor__explain.t.i)->executor__explain.t.i
|
||||
└─Sort root executor__explain.t.i
|
||||
└─TableReader root partition:all data:Selection
|
||||
└─Selection cop[tikv] or(gt(executor__explain.t.h, 240817), and(ge(executor__explain.t.i, "WVz"), le(executor__explain.t.i, "G#駧褉ZC領*lov")))
|
||||
@ -392,10 +392,10 @@ count(*)
|
||||
16
|
||||
explain format='plan_tree' SELECT /*+ AGG_TO_COP() */ (NOT (`t`.`i`>=_UTF8MB4'j筧8') OR NOT (`t`.`i`=_UTF8MB4'暈lH忧ll6')) IS TRUE,MAX(`t`.`e`) AS `r0`,QUOTE(`t`.`i`) AS `r1` FROM `t` WHERE `t`.`h`>240817 OR `t`.`i` BETWEEN _UTF8MB4'WVz' AND _UTF8MB4'G#駧褉ZC領*lov' GROUP BY `t`.`i`;
|
||||
id task access object operator info
|
||||
Projection root istrue(or(not(ge(executor__explain.t.i, j筧8)), not(eq(executor__explain.t.i, 暈lH忧ll6))))->Column#11, Column#10, quote(executor__explain.t.i)->Column#12
|
||||
└─HashAgg root group by:executor__explain.t.i, funcs:max(Column#15)->Column#10, funcs:firstrow(executor__explain.t.i)->executor__explain.t.i
|
||||
Projection root istrue(or(not(ge(executor__explain.t.i, j筧8)), not(eq(executor__explain.t.i, 暈lH忧ll6))))->Column, Column, quote(executor__explain.t.i)->Column
|
||||
└─HashAgg root group by:executor__explain.t.i, funcs:max(Column)->Column, funcs:firstrow(executor__explain.t.i)->executor__explain.t.i
|
||||
└─TableReader root partition:all data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:executor__explain.t.i, funcs:max(executor__explain.t.e)->Column#15
|
||||
└─HashAgg cop[tikv] group by:executor__explain.t.i, funcs:max(executor__explain.t.e)->Column
|
||||
└─Selection cop[tikv] or(gt(executor__explain.t.h, 240817), and(ge(executor__explain.t.i, "WVz"), le(executor__explain.t.i, "G#駧褉ZC領*lov")))
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(*) from (SELECT /*+ AGG_TO_COP() */ (NOT (`t`.`i`>=_UTF8MB4'j筧8') OR NOT (`t`.`i`=_UTF8MB4'暈lH忧ll6')) IS TRUE,MAX(`t`.`e`) AS `r0`,QUOTE(`t`.`i`) AS `r1` FROM `t` WHERE `t`.`h`>240817 OR `t`.`i` BETWEEN _UTF8MB4'WVz' AND _UTF8MB4'G#駧褉ZC領*lov' GROUP BY `t`.`i`) derived;
|
||||
|
||||
@ -83,51 +83,51 @@ id task access object operator info
|
||||
MemTableScan root table:TABLE_STORAGE_STATS schema:["information_schema"], table:["schemata"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where rule='ddl';
|
||||
id task access object operator info
|
||||
Selection root eq(Column#1, "ddl")
|
||||
Selection root eq(Column, "ddl")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["ddl"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where 'ddl'=rule or rule='config';
|
||||
id task access object operator info
|
||||
Selection root or(eq("ddl", Column#1), eq(Column#1, "config"))
|
||||
Selection root or(eq("ddl", Column), eq(Column, "config"))
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["config","ddl"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where 'ddl'=rule or rule='config' or rule='slow_query';
|
||||
id task access object operator info
|
||||
Selection root or(eq("ddl", Column#1), or(eq(Column#1, "config"), eq(Column#1, "slow_query")))
|
||||
Selection root or(eq("ddl", Column), or(eq(Column, "config"), eq(Column, "slow_query")))
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["config","ddl","slow_query"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where (rule='config' or rule='slow_query') and (metrics_name='metric_name3' or metrics_name='metric_name1');
|
||||
id task access object operator info
|
||||
Selection root or(eq(Column#1, "config"), eq(Column#1, "slow_query")), or(eq(Column#3, "metric_name3"), eq(Column#3, "metric_name1"))
|
||||
Selection root or(eq(Column, "config"), eq(Column, "slow_query")), or(eq(Column, "metric_name3"), eq(Column, "metric_name1"))
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["config","slow_query"], metric_names:["metric_name1","metric_name3"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where rule in ('ddl', 'slow_query');
|
||||
id task access object operator info
|
||||
Selection root in(Column#1, "ddl", "slow_query")
|
||||
Selection root in(Column, "ddl", "slow_query")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["ddl","slow_query"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where rule in ('ddl', 'slow_query') and metrics_name='metric_name1';
|
||||
id task access object operator info
|
||||
Selection root eq(Column#3, "metric_name1"), in(Column#1, "ddl", "slow_query")
|
||||
Selection root eq(Column, "metric_name1"), in(Column, "ddl", "slow_query")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["ddl","slow_query"], metric_names:["metric_name1"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where rule in ('ddl', 'slow_query') and metrics_name in ('metric_name1', 'metric_name2');
|
||||
id task access object operator info
|
||||
Selection root in(Column#1, "ddl", "slow_query"), in(Column#3, "metric_name1", "metric_name2")
|
||||
Selection root in(Column, "ddl", "slow_query"), in(Column, "metric_name1", "metric_name2")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["ddl","slow_query"], metric_names:["metric_name1","metric_name2"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where rule='ddl' and metrics_name in ('metric_name1', 'metric_name2');
|
||||
id task access object operator info
|
||||
Selection root eq(Column#1, "ddl"), in(Column#3, "metric_name1", "metric_name2")
|
||||
Selection root eq(Column, "ddl"), in(Column, "metric_name1", "metric_name2")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["ddl"], metric_names:["metric_name1","metric_name2"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where rule='ddl' and metrics_name='metric_NAME3';
|
||||
id task access object operator info
|
||||
Selection root eq(Column#1, "ddl"), eq(Column#3, "metric_NAME3")
|
||||
Selection root eq(Column, "ddl"), eq(Column, "metric_NAME3")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["ddl"], metric_names:["metric_name3"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where rule in ('ddl', 'config') and rule in ('slow_query', 'config');
|
||||
id task access object operator info
|
||||
Selection root in(Column#1, "ddl", "config"), in(Column#1, "slow_query", "config")
|
||||
Selection root in(Column, "ddl", "config"), in(Column, "slow_query", "config")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["config"]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where metrics_name in ('metric_name1', 'metric_name4') and metrics_name in ('metric_name5', 'metric_name4') and rule in ('ddl', 'config') and rule in ('slow_query', 'config') and quantile in (0.80, 0.90);
|
||||
id task access object operator info
|
||||
Selection root in(Column#1, "ddl", "config"), in(Column#1, "slow_query", "config"), in(Column#3, "metric_name1", "metric_name4"), in(Column#3, "metric_name5", "metric_name4")
|
||||
Selection root in(Column, "ddl", "config"), in(Column, "metric_name1", "metric_name4"), in(Column, "metric_name5", "metric_name4"), in(Column, "slow_query", "config")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY rules:["config"], metric_names:["metric_name4"], quantiles:[0.800000,0.900000]
|
||||
explain format='plan_tree' select * from information_schema.inspection_summary where metrics_name in ('metric_name1', 'metric_name4') and metrics_name in ('metric_name5', 'metric_name4') and metrics_name in ('metric_name5', 'metric_name1') and metrics_name in ('metric_name1', 'metric_name3');
|
||||
id task access object operator info
|
||||
Selection root in(Column#3, "metric_name1", "metric_name3"), in(Column#3, "metric_name1", "metric_name4"), in(Column#3, "metric_name5", "metric_name1"), in(Column#3, "metric_name5", "metric_name4")
|
||||
Selection root in(Column, "metric_name1", "metric_name3"), in(Column, "metric_name1", "metric_name4"), in(Column, "metric_name5", "metric_name1"), in(Column, "metric_name5", "metric_name4")
|
||||
└─MemTableScan root table:INSPECTION_SUMMARY skip_inspection: true
|
||||
explain format='plan_tree' select * from information_schema.TIFLASH_TABLES where TIFLASH_INSTANCE = '192.168.1.7:3930';
|
||||
id task access object operator info
|
||||
@ -881,16 +881,16 @@ id task access object operator info
|
||||
MemTableScan root table:STATISTICS table_schema:["s1","test"]
|
||||
explain format='plan_tree' SELECT column_name FROM information_schema.statistics WHERE index_name = 'idx1' AND table_schema = DATABASE () AND table_name = 't' ORDER BY seq_in_index;
|
||||
id task access object operator info
|
||||
Projection root Column#8->Column#19
|
||||
└─Sort root Column#7
|
||||
Projection root Column
|
||||
└─Sort root Column
|
||||
└─MemTableScan root table:STATISTICS index_name:["idx1"], table_name:["t"], table_schema:["plan_cache"]
|
||||
explain format='plan_tree' SELECT table_comment FROM information_schema.tables WHERE table_schema = DATABASE () AND table_name = 't';
|
||||
id task access object operator info
|
||||
MemTableScan root table:TABLES table_name:["t"], table_schema:["plan_cache"]
|
||||
explain format='plan_tree' SELECT * FROM information_schema.referential_constraints rc JOIN information_schema.key_column_usage fk USING (constraint_schema, constraint_name) WHERE fk.referenced_column_name != 't' AND fk.table_schema = DATABASE () AND fk.table_name = 't' AND rc.constraint_schema = DATABASE () AND rc.table_name = 't';
|
||||
id task access object operator info
|
||||
Projection root Column#2, Column#3, Column#1, Column#4, Column#5, Column#6, Column#7, Column#8, Column#9, Column#10, Column#11, Column#12, Column#15, Column#16, Column#17, Column#18, Column#19, Column#20, Column#21, Column#22, Column#23
|
||||
└─HashJoin root inner join, equal:[eq(Column#3, Column#14) eq(Column#2, Column#13)]
|
||||
├─Selection(Build) root ne(Column#23, "t")
|
||||
Projection root Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column, Column
|
||||
└─HashJoin root inner join, equal:[eq(Column, Column) eq(Column, Column)]
|
||||
├─Selection(Build) root ne(Column, "t")
|
||||
│ └─MemTableScan root table:KEY_COLUMN_USAGE constraint_schema:["plan_cache"], table_name:["t"], table_schema:["plan_cache"]
|
||||
└─MemTableScan(Probe) root table:REFERENTIAL_CONSTRAINTS constraint_schema:["plan_cache"], table_name:["t"]
|
||||
|
||||
@ -430,7 +430,7 @@ table_name
|
||||
t
|
||||
explain format='plan_tree' select table_name, table_schema from information_schema.tables;
|
||||
id task access object operator info
|
||||
Projection root Column#3, Column#2
|
||||
Projection root Column, Column
|
||||
└─MemTableScan root table:TABLES
|
||||
select count(*) from information_schema.tables where table_name = 't';
|
||||
count(*)
|
||||
|
||||
@ -765,10 +765,10 @@ c_int c_str c_decimal
|
||||
explain format = 'plan_tree' select * from t1 where c_str <> any (select c_str from t2 where c_decimal < 5) for update;
|
||||
id task access object operator info
|
||||
SelectLock root for update 0
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(gt(Column#8, 1), or(ne(executor__issues.t1.c_str, Column#7), if(ne(Column#9, 0), NULL, 0)))
|
||||
├─Selection(Build) root ne(Column#10, 0)
|
||||
│ └─StreamAgg root funcs:max(Column#27)->Column#7, funcs:count(distinct Column#28)->Column#8, funcs:sum(Column#29)->Column#9, funcs:count(1)->Column#10
|
||||
│ └─Projection root executor__issues.t2.c_str->Column#27, executor__issues.t2.c_str->Column#28, cast(isnull(executor__issues.t2.c_str), decimal(20,0) BINARY)->Column#29
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(gt(Column, 1), or(ne(executor__issues.t1.c_str, Column), if(ne(Column, 0), NULL, 0)))
|
||||
├─Selection(Build) root ne(Column, 0)
|
||||
│ └─StreamAgg root funcs:max(Column)->Column, funcs:count(distinct Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column
|
||||
│ └─Projection root executor__issues.t2.c_str->Column, executor__issues.t2.c_str->Column, cast(isnull(executor__issues.t2.c_str), decimal(20,0) BINARY)->Column
|
||||
│ └─TableReader root partition:all data:Selection
|
||||
│ └─Selection cop[tikv] lt(executor__issues.t2.c_decimal, 5)
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false
|
||||
|
||||
@ -234,7 +234,7 @@ analyze table t all columns;
|
||||
analyze table s all columns;
|
||||
explain format = 'plan_tree' select /*+ TIDB_INLJ(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#6
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─IndexJoin root inner join, inner:IndexReader, outer key:executor__jointest__hash_join.t.a, inner key:executor__jointest__hash_join.s.a, equal cond:eq(executor__jointest__hash_join.t.a, executor__jointest__hash_join.s.a), other cond:lt(executor__jointest__hash_join.s.b, executor__jointest__hash_join.t.b)
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(executor__jointest__hash_join.t.b))
|
||||
@ -251,7 +251,7 @@ count(*)
|
||||
64
|
||||
explain format = 'plan_tree' select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#6
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─MergeJoin root inner join, left key:executor__jointest__hash_join.t.a, right key:executor__jointest__hash_join.s.a, other cond:lt(executor__jointest__hash_join.s.b, executor__jointest__hash_join.t.b)
|
||||
├─IndexReader(Build) root index:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(executor__jointest__hash_join.s.b))
|
||||
@ -268,7 +268,7 @@ count(*)
|
||||
64
|
||||
explain format = 'plan_tree' select /*+ INL_HASH_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#6
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:executor__jointest__hash_join.t.a, inner key:executor__jointest__hash_join.s.a, equal cond:eq(executor__jointest__hash_join.t.a, executor__jointest__hash_join.s.a), other cond:lt(executor__jointest__hash_join.s.b, executor__jointest__hash_join.t.b)
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(executor__jointest__hash_join.t.b))
|
||||
|
||||
@ -539,9 +539,9 @@ count(*)
|
||||
explain format = 'plan_tree' select /*+ inl_join(tt1)*/ count(*) from tt2
|
||||
left join tt1 on tt1.listid=tt2.listid;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#13)->Column#7
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#13
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexFullScan cop[tikv] table:tt2, index:idx_listid(listid) keep order:false
|
||||
set global tidb_partition_prune_mode=default;
|
||||
set session tidb_partition_prune_mode=default;
|
||||
|
||||
@ -146,7 +146,7 @@ select * from t where a = "a ";
|
||||
a b
|
||||
explain format='plan_tree' select hex(a), hex(b) from t where a = "a\0";
|
||||
id task access object operator info
|
||||
Projection root hex(executor__point_get.t.a)->Column#4, hex(executor__point_get.t.b)->Column#5
|
||||
Projection root hex(executor__point_get.t.a)->Column, hex(executor__point_get.t.b)->Column
|
||||
└─Point_Get root table:t, index:PRIMARY(a)
|
||||
select hex(a), hex(b) from t where a = "a\0";
|
||||
hex(a) hex(b)
|
||||
@ -206,7 +206,7 @@ select * from t tmp where a = "a ";
|
||||
a b
|
||||
explain format='plan_tree' select hex(a), hex(b) from t tmp where a = "a\0";
|
||||
id task access object operator info
|
||||
Projection root hex(executor__point_get.t.a)->Column#4, hex(executor__point_get.t.b)->Column#5
|
||||
Projection root hex(executor__point_get.t.a)->Column, hex(executor__point_get.t.b)->Column
|
||||
└─Point_Get root table:t, index:PRIMARY(a)
|
||||
select hex(a), hex(b) from t tmp where a = "a\0";
|
||||
hex(a) hex(b)
|
||||
@ -272,7 +272,7 @@ select * from t where a = "a ";
|
||||
a b
|
||||
explain format='plan_tree' select hex(a), hex(b) from t where a = "a\0";
|
||||
id task access object operator info
|
||||
Projection root hex(executor__point_get.t.a)->Column#4, hex(executor__point_get.t.b)->Column#5
|
||||
Projection root hex(executor__point_get.t.a)->Column, hex(executor__point_get.t.b)->Column
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t, index:idx_1(a) range:["a\x00","a\x00"], keep order:false, stats:pseudo
|
||||
└─TableRowIDScan(Probe) cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -303,7 +303,7 @@ select * from t tmp where a = "a ";
|
||||
a b
|
||||
explain format='plan_tree' select hex(a), hex(b) from t tmp where a = "a\0";
|
||||
id task access object operator info
|
||||
Projection root hex(executor__point_get.t.a)->Column#4, hex(executor__point_get.t.b)->Column#5
|
||||
Projection root hex(executor__point_get.t.a)->Column, hex(executor__point_get.t.b)->Column
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:tmp, index:idx_1(a) range:["a\x00","a\x00"], keep order:false, stats:pseudo
|
||||
└─TableRowIDScan(Probe) cop[tikv] table:tmp keep order:false, stats:pseudo
|
||||
@ -577,7 +577,7 @@ explain format = 'plan_tree' select * from t2 where a in ('111','222') union all
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─Batch_Point_Get root table:t2, clustered index:PRIMARY(a) keep order:false, desc:false
|
||||
└─Projection root cast(executor__point_get.t1.a, varchar(20) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#6, executor__point_get.t1.c->Column#7
|
||||
└─Projection root cast(executor__point_get.t1.a, varchar(20) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column, executor__point_get.t1.c->Column
|
||||
└─Batch_Point_Get root table:t1, clustered index:PRIMARY(a, b) keep order:false, desc:false
|
||||
select * from t2 where a in ('111','222') union all select a,c from t1 where (a,b) in ((1,1),(2,2));
|
||||
a b
|
||||
|
||||
@ -25,6 +25,6 @@ Update root N/A
|
||||
explain format = 'plan_tree' replace into t select a, 100 from t;
|
||||
id task access object operator info
|
||||
Insert root N/A
|
||||
└─Projection root explain-non-select-stmt.t.a, 100->Column#6
|
||||
└─Projection root explain-non-select-stmt.t.a, 100->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
|
||||
@ -29,14 +29,14 @@ set session tidb_hashagg_partial_concurrency = 1;
|
||||
set session tidb_hashagg_final_concurrency = 1;
|
||||
explain format = 'plan_tree' select group_concat(a) from t group by id;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:Column#6, funcs:group_concat(Column#5 separator ",")->Column#4
|
||||
└─Projection root cast(explain.t.a, var_string(20))->Column#5, explain.t.id->Column#6
|
||||
StreamAgg root group by:Column, funcs:group_concat(Column separator ",")->Column
|
||||
└─Projection root cast(explain.t.a, var_string(20))->Column, explain.t.id->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:true, stats:pseudo
|
||||
explain format = 'plan_tree' select group_concat(a, b) from t group by id;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:Column#7, funcs:group_concat(Column#5, Column#6 separator ",")->Column#4
|
||||
└─Projection root cast(explain.t.a, var_string(20))->Column#5, cast(explain.t.b, var_string(20))->Column#6, explain.t.id->Column#7
|
||||
StreamAgg root group by:Column, funcs:group_concat(Column, Column separator ",")->Column
|
||||
└─Projection root cast(explain.t.a, var_string(20))->Column, cast(explain.t.b, var_string(20))->Column, explain.t.id->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:true, stats:pseudo
|
||||
explain format = TRADITIONAL select group_concat(a, b) from t group by id;
|
||||
|
||||
@ -107,12 +107,12 @@ PRIMARY KEY (`aid`,`dic`)
|
||||
);
|
||||
explain format = 'plan_tree' SELECT `ds`, `p1`, `p2`, `p3`, `p4`, `p5`, `p6_md5`, `p7_md5`, count(dic) as install_device FROM `dt` use index (cmi) WHERE (`ds` >= '2016-09-01') AND (`ds` <= '2016-11-03') AND (`cm` IN ('1062', '1086', '1423', '1424', '1425', '1426', '1427', '1428', '1429', '1430', '1431', '1432', '1433', '1434', '1435', '1436', '1437', '1438', '1439', '1440', '1441', '1442', '1443', '1444', '1445', '1446', '1447', '1448', '1449', '1450', '1451', '1452', '1488', '1489', '1490', '1491', '1492', '1493', '1494', '1495', '1496', '1497', '1550', '1551', '1552', '1553', '1554', '1555', '1556', '1557', '1558', '1559', '1597', '1598', '1599', '1600', '1601', '1602', '1603', '1604', '1605', '1606', '1607', '1608', '1609', '1610', '1611', '1612', '1613', '1614', '1615', '1616', '1623', '1624', '1625', '1626', '1627', '1628', '1629', '1630', '1631', '1632', '1709', '1719', '1720', '1843', '2813', '2814', '2815', '2816', '2817', '2818', '2819', '2820', '2821', '2822', '2823', '2824', '2825', '2826', '2827', '2828', '2829', '2830', '2831', '2832', '2833', '2834', '2835', '2836', '2837', '2838', '2839', '2840', '2841', '2842', '2843', '2844', '2845', '2846', '2847', '2848', '2849', '2850', '2851', '2852', '2853', '2854', '2855', '2856', '2857', '2858', '2859', '2860', '2861', '2862', '2863', '2864', '2865', '2866', '2867', '2868', '2869', '2870', '2871', '2872', '3139', '3140', '3141', '3142', '3143', '3144', '3145', '3146', '3147', '3148', '3149', '3150', '3151', '3152', '3153', '3154', '3155', '3156', '3157', '3158', '3386', '3387', '3388', '3389', '3390', '3391', '3392', '3393', '3394', '3395', '3664', '3665', '3666', '3667', '3668', '3670', '3671', '3672', '3673', '3674', '3676', '3677', '3678', '3679', '3680', '3681', '3682', '3683', '3684', '3685', '3686', '3687', '3688', '3689', '3690', '3691', '3692', '3693', '3694', '3695', '3696', '3697', '3698', '3699', '3700', '3701', '3702', '3703', '3704', '3705', '3706', '3707', '3708', '3709', '3710', '3711', '3712', '3713', '3714', '3715', '3960', '3961', '3962', '3963', '3964', '3965', '3966', '3967', '3968', '3978', '3979', '3980', '3981', '3982', '3983', '3984', '3985', '3986', '3987', '4208', '4209', '4210', '4211', '4212', '4304', '4305', '4306', '4307', '4308', '4866', '4867', '4868', '4869', '4870', '4871', '4872', '4873', '4874', '4875')) GROUP BY `ds`, `p1`, `p2`, `p3`, `p4`, `p5`, `p6_md5`, `p7_md5` ORDER BY `ds2` DESC;
|
||||
id task access object operator info
|
||||
Projection root explain_complex.dt.ds, explain_complex.dt.p1, explain_complex.dt.p2, explain_complex.dt.p3, explain_complex.dt.p4, explain_complex.dt.p5, explain_complex.dt.p6_md5, explain_complex.dt.p7_md5, Column#21->Column#30
|
||||
Projection root explain_complex.dt.ds, explain_complex.dt.p1, explain_complex.dt.p2, explain_complex.dt.p3, explain_complex.dt.p4, explain_complex.dt.p5, explain_complex.dt.p6_md5, explain_complex.dt.p7_md5, Column
|
||||
└─Sort root explain_complex.dt.ds2:desc
|
||||
└─HashAgg root group by:explain_complex.dt.ds, explain_complex.dt.p1, explain_complex.dt.p2, explain_complex.dt.p3, explain_complex.dt.p4, explain_complex.dt.p5, explain_complex.dt.p6_md5, explain_complex.dt.p7_md5, funcs:count(Column#32)->Column#21, funcs:firstrow(explain_complex.dt.ds)->explain_complex.dt.ds, funcs:firstrow(Column#34)->explain_complex.dt.ds2, funcs:firstrow(explain_complex.dt.p1)->explain_complex.dt.p1, funcs:firstrow(explain_complex.dt.p2)->explain_complex.dt.p2, funcs:firstrow(explain_complex.dt.p3)->explain_complex.dt.p3, funcs:firstrow(explain_complex.dt.p4)->explain_complex.dt.p4, funcs:firstrow(explain_complex.dt.p5)->explain_complex.dt.p5, funcs:firstrow(explain_complex.dt.p6_md5)->explain_complex.dt.p6_md5, funcs:firstrow(explain_complex.dt.p7_md5)->explain_complex.dt.p7_md5
|
||||
└─HashAgg root group by:explain_complex.dt.ds, explain_complex.dt.p1, explain_complex.dt.p2, explain_complex.dt.p3, explain_complex.dt.p4, explain_complex.dt.p5, explain_complex.dt.p6_md5, explain_complex.dt.p7_md5, funcs:count(Column)->Column, funcs:firstrow(explain_complex.dt.ds)->explain_complex.dt.ds, funcs:firstrow(Column)->explain_complex.dt.ds2, funcs:firstrow(explain_complex.dt.p1)->explain_complex.dt.p1, funcs:firstrow(explain_complex.dt.p2)->explain_complex.dt.p2, funcs:firstrow(explain_complex.dt.p3)->explain_complex.dt.p3, funcs:firstrow(explain_complex.dt.p4)->explain_complex.dt.p4, funcs:firstrow(explain_complex.dt.p5)->explain_complex.dt.p5, funcs:firstrow(explain_complex.dt.p6_md5)->explain_complex.dt.p6_md5, funcs:firstrow(explain_complex.dt.p7_md5)->explain_complex.dt.p7_md5
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:dt, index:cmi(cm) range:[1062,1062], [1086,1086], [1423,1423], [1424,1424], [1425,1425], [1426,1426], [1427,1427], [1428,1428], [1429,1429], [1430,1430], [1431,1431], [1432,1432], [1433,1433], [1434,1434], [1435,1435], [1436,1436], [1437,1437], [1438,1438], [1439,1439], [1440,1440], [1441,1441], [1442,1442], [1443,1443], [1444,1444], [1445,1445], [1446,1446], [1447,1447], [1448,1448], [1449,1449], [1450,1450], [1451,1451], [1452,1452], [1488,1488], [1489,1489], [1490,1490], [1491,1491], [1492,1492], [1493,1493], [1494,1494], [1495,1495], [1496,1496], [1497,1497], [1550,1550], [1551,1551], [1552,1552], [1553,1553], [1554,1554], [1555,1555], [1556,1556], [1557,1557], [1558,1558], [1559,1559], [1597,1597], [1598,1598], [1599,1599], [1600,1600], [1601,1601], [1602,1602], [1603,1603], [1604,1604], [1605,1605], [1606,1606], [1607,1607], [1608,1608], [1609,1609], [1610,1610], [1611,1611], [1612,1612], [1613,1613], [1614,1614], [1615,1615], [1616,1616], [1623,1623], [1624,1624], [1625,1625], [1626,1626], [1627,1627], [1628,1628], [1629,1629], [1630,1630], [1631,1631], [1632,1632], [1709,1709], [1719,1719], [1720,1720], [1843,1843], [2813,2813], [2814,2814], [2815,2815], [2816,2816], [2817,2817], [2818,2818], [2819,2819], [2820,2820], [2821,2821], [2822,2822], [2823,2823], [2824,2824], [2825,2825], [2826,2826], [2827,2827], [2828,2828], [2829,2829], [2830,2830], [2831,2831], [2832,2832], [2833,2833], [2834,2834], [2835,2835], [2836,2836], [2837,2837], [2838,2838], [2839,2839], [2840,2840], [2841,2841], [2842,2842], [2843,2843], [2844,2844], [2845,2845], [2846,2846], [2847,2847], [2848,2848], [2849,2849], [2850,2850], [2851,2851], [2852,2852], [2853,2853], [2854,2854], [2855,2855], [2856,2856], [2857,2857], [2858,2858], [2859,2859], [2860,2860], [2861,2861], [2862,2862], [2863,2863], [2864,2864], [2865,2865], [2866,2866], [2867,2867], [2868,2868], [2869,2869], [2870,2870], [2871,2871], [2872,2872], [3139,3139], [3140,3140], [3141,3141], [3142,3142], [3143,3143], [3144,3144], [3145,3145], [3146,3146], [3147,3147], [3148,3148], [3149,3149], [3150,3150], [3151,3151], [3152,3152], [3153,3153], [3154,3154], [3155,3155], [3156,3156], [3157,3157], [3158,3158], [3386,3386], [3387,3387], [3388,3388], [3389,3389], [3390,3390], [3391,3391], [3392,3392], [3393,3393], [3394,3394], [3395,3395], [3664,3664], [3665,3665], [3666,3666], [3667,3667], [3668,3668], [3670,3670], [3671,3671], [3672,3672], [3673,3673], [3674,3674], [3676,3676], [3677,3677], [3678,3678], [3679,3679], [3680,3680], [3681,3681], [3682,3682], [3683,3683], [3684,3684], [3685,3685], [3686,3686], [3687,3687], [3688,3688], [3689,3689], [3690,3690], [3691,3691], [3692,3692], [3693,3693], [3694,3694], [3695,3695], [3696,3696], [3697,3697], [3698,3698], [3699,3699], [3700,3700], [3701,3701], [3702,3702], [3703,3703], [3704,3704], [3705,3705], [3706,3706], [3707,3707], [3708,3708], [3709,3709], [3710,3710], [3711,3711], [3712,3712], [3713,3713], [3714,3714], [3715,3715], [3960,3960], [3961,3961], [3962,3962], [3963,3963], [3964,3964], [3965,3965], [3966,3966], [3967,3967], [3968,3968], [3978,3978], [3979,3979], [3980,3980], [3981,3981], [3982,3982], [3983,3983], [3984,3984], [3985,3985], [3986,3986], [3987,3987], [4208,4208], [4209,4209], [4210,4210], [4211,4211], [4212,4212], [4304,4304], [4305,4305], [4306,4306], [4307,4307], [4308,4308], [4866,4866], [4867,4867], [4868,4868], [4869,4869], [4870,4870], [4871,4871], [4872,4872], [4873,4873], [4874,4874], [4875,4875], keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) cop[tikv] group by:explain_complex.dt.ds, explain_complex.dt.p1, explain_complex.dt.p2, explain_complex.dt.p3, explain_complex.dt.p4, explain_complex.dt.p5, explain_complex.dt.p6_md5, explain_complex.dt.p7_md5, funcs:count(explain_complex.dt.dic)->Column#32, funcs:firstrow(explain_complex.dt.ds2)->Column#34
|
||||
└─HashAgg(Probe) cop[tikv] group by:explain_complex.dt.ds, explain_complex.dt.p1, explain_complex.dt.p2, explain_complex.dt.p3, explain_complex.dt.p4, explain_complex.dt.p5, explain_complex.dt.p6_md5, explain_complex.dt.p7_md5, funcs:count(explain_complex.dt.dic)->Column, funcs:firstrow(explain_complex.dt.ds2)->Column
|
||||
└─Selection cop[tikv] ge(explain_complex.dt.ds, 2016-09-01 00:00:00.000000), le(explain_complex.dt.ds, 2016-11-03 00:00:00.000000)
|
||||
└─TableRowIDScan cop[tikv] table:dt keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext, gad.t as gtime from st gad join (select id, aid, pt, dic, ip, t from dd where pt = 'android' and bm = 0 and t > 1478143908) sdk on gad.aid = sdk.aid and gad.ip = sdk.ip and sdk.t > gad.t where gad.t > 1478143908 and gad.pt = 'android' group by gad.aid, sdk.dic limit 2500;
|
||||
@ -145,8 +145,8 @@ Projection root explain_complex.st.id, explain_complex.dd.id, explain_complex.s
|
||||
└─TableRowIDScan cop[tikv] table:gad keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' SELECT cm, p1, p2, p3, p4, p5, p6_md5, p7_md5, count(1) as click_pv, count(DISTINCT ip) as click_ip FROM st WHERE (t between 1478188800 and 1478275200) and aid='cn.sbkcq' and pt='android' GROUP BY cm, p1, p2, p3, p4, p5, p6_md5, p7_md5;
|
||||
id task access object operator info
|
||||
Projection root explain_complex.st.cm, explain_complex.st.p1, explain_complex.st.p2, explain_complex.st.p3, explain_complex.st.p4, explain_complex.st.p5, explain_complex.st.p6_md5, explain_complex.st.p7_md5, Column#20, Column#21
|
||||
└─HashAgg root group by:explain_complex.st.cm, explain_complex.st.p1, explain_complex.st.p2, explain_complex.st.p3, explain_complex.st.p4, explain_complex.st.p5, explain_complex.st.p6_md5, explain_complex.st.p7_md5, funcs:count(1)->Column#20, funcs:count(distinct explain_complex.st.ip)->Column#21, funcs:firstrow(explain_complex.st.cm)->explain_complex.st.cm, funcs:firstrow(explain_complex.st.p1)->explain_complex.st.p1, funcs:firstrow(explain_complex.st.p2)->explain_complex.st.p2, funcs:firstrow(explain_complex.st.p3)->explain_complex.st.p3, funcs:firstrow(explain_complex.st.p4)->explain_complex.st.p4, funcs:firstrow(explain_complex.st.p5)->explain_complex.st.p5, funcs:firstrow(explain_complex.st.p6_md5)->explain_complex.st.p6_md5, funcs:firstrow(explain_complex.st.p7_md5)->explain_complex.st.p7_md5
|
||||
Projection root explain_complex.st.cm, explain_complex.st.p1, explain_complex.st.p2, explain_complex.st.p3, explain_complex.st.p4, explain_complex.st.p5, explain_complex.st.p6_md5, explain_complex.st.p7_md5, Column, Column
|
||||
└─HashAgg root group by:explain_complex.st.cm, explain_complex.st.p1, explain_complex.st.p2, explain_complex.st.p3, explain_complex.st.p4, explain_complex.st.p5, explain_complex.st.p6_md5, explain_complex.st.p7_md5, funcs:count(1)->Column, funcs:count(distinct explain_complex.st.ip)->Column, funcs:firstrow(explain_complex.st.cm)->explain_complex.st.cm, funcs:firstrow(explain_complex.st.p1)->explain_complex.st.p1, funcs:firstrow(explain_complex.st.p2)->explain_complex.st.p2, funcs:firstrow(explain_complex.st.p3)->explain_complex.st.p3, funcs:firstrow(explain_complex.st.p4)->explain_complex.st.p4, funcs:firstrow(explain_complex.st.p5)->explain_complex.st.p5, funcs:firstrow(explain_complex.st.p6_md5)->explain_complex.st.p6_md5, funcs:firstrow(explain_complex.st.p7_md5)->explain_complex.st.p7_md5
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:st, index:t(t) range:[1478188800,1478275200], keep order:false, stats:pseudo
|
||||
└─Selection(Probe) cop[tikv] eq(explain_complex.st.aid, "cn.sbkcq"), eq(explain_complex.st.pt, "android")
|
||||
@ -166,8 +166,8 @@ Projection root explain_complex.dt.id, explain_complex.dt.aid, explain_complex.
|
||||
└─TableRowIDScan cop[tikv] table:dt keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' 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 task access object operator info
|
||||
Projection root explain_complex.pp.pc, explain_complex.pp.cr, Column#22, Column#23, Column#24
|
||||
└─HashAgg root group by:explain_complex.pp.cr, explain_complex.pp.pc, funcs:count(distinct explain_complex.pp.uid)->Column#22, funcs:count(explain_complex.pp.oid)->Column#23, funcs:sum(explain_complex.pp.am)->Column#24, funcs:firstrow(explain_complex.pp.pc)->explain_complex.pp.pc, funcs:firstrow(explain_complex.pp.cr)->explain_complex.pp.cr
|
||||
Projection root explain_complex.pp.pc, explain_complex.pp.cr, Column, Column, Column
|
||||
└─HashAgg root group by:explain_complex.pp.cr, explain_complex.pp.pc, funcs:count(distinct explain_complex.pp.uid)->Column, funcs:count(explain_complex.pp.oid)->Column, funcs:sum(explain_complex.pp.am)->Column, funcs:firstrow(explain_complex.pp.pc)->explain_complex.pp.pc, funcs:firstrow(explain_complex.pp.cr)->explain_complex.pp.cr
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:pp, index:sp(uid, pi) range:[18089709 510017,18089709 510017], [18089709 520017,18089709 520017], [18090780 510017,18090780 510017], [18090780 520017,18090780 520017], keep order:false, stats:pseudo
|
||||
└─Selection(Probe) cop[tikv] eq(explain_complex.pp.ps, 2), ge(explain_complex.pp.ppt, 1478188800), lt(explain_complex.pp.ppt, 1478275200)
|
||||
@ -183,8 +183,8 @@ CREATE TABLE `tbl_008` (`a` int, `b` int);
|
||||
CREATE TABLE `tbl_009` (`a` int, `b` int);
|
||||
explain format = 'plan_tree' select sum(a) from (select * from tbl_001 union all select * from tbl_002 union all select * from tbl_003 union all select * from tbl_004 union all select * from tbl_005 union all select * from tbl_006 union all select * from tbl_007 union all select * from tbl_008 union all select * from tbl_009) x group by b;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#32, funcs:sum(Column#31)->Column#30
|
||||
└─Projection root cast(Column#28, decimal(10,0) BINARY)->Column#31, Column#29->Column#32
|
||||
HashAgg root group by:Column, funcs:sum(Column)->Column
|
||||
└─Projection root cast(Column, decimal(10,0) BINARY)->Column, Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tbl_001 keep order:false, stats:pseudo
|
||||
@ -276,7 +276,7 @@ insert into Tab_C values(2,'C01',22);
|
||||
insert into Tab_C values(4,'C01',5);
|
||||
explain format = 'plan_tree' select Tab_A.name AAA,Tab_B.name BBB,Tab_A.amt Aamt, Tab_C.amt Bamt,IFNULL(Tab_C.amt, 0) FROM Tab_A left join Tab_B on Tab_A.bid=Tab_B.id left join Tab_C on Tab_A.cid=Tab_C.id and Tab_A.type='01' where Tab_A.num=112;
|
||||
id task access object operator info
|
||||
Projection root explain_complex.tab_a.name, explain_complex.tab_b.name, explain_complex.tab_a.amt, explain_complex.tab_c.amt, ifnull(explain_complex.tab_c.amt, 0.00)->Column#13
|
||||
Projection root explain_complex.tab_a.name, explain_complex.tab_b.name, explain_complex.tab_a.amt, explain_complex.tab_c.amt, ifnull(explain_complex.tab_c.amt, 0.00)->Column
|
||||
└─IndexJoin root left outer join, inner:TableReader, left side:IndexJoin, outer key:explain_complex.tab_a.cid, inner key:explain_complex.tab_c.id, equal cond:eq(explain_complex.tab_a.cid, explain_complex.tab_c.id), left cond:eq(explain_complex.tab_a.type, "01")
|
||||
├─IndexJoin(Build) root left outer join, inner:TableReader, left side:TableReader, outer key:explain_complex.tab_a.bid, inner key:explain_complex.tab_b.id, equal cond:eq(explain_complex.tab_a.bid, explain_complex.tab_b.id)
|
||||
│ ├─TableReader(Build) root data:Selection
|
||||
|
||||
@ -140,12 +140,12 @@ show stats_histograms where db_name = 'explain_complext_stats' and table_name =
|
||||
Db_name Table_name Partition_name Column_name Is_index Update_time Distinct_count Null_count Avg_col_size Correlation Load_status Total_mem_usage Hist_mem_usage Topn_mem_usage Cms_mem_usage
|
||||
explain format = 'plan_tree' SELECT ds, p1, p2, p3, p4, p5, p6_md5, p7_md5, count(dic) as install_device FROM dt use index (cm) WHERE (ds >= '2016-09-01') AND (ds <= '2016-11-03') AND (cm IN ('1062', '1086', '1423', '1424', '1425', '1426', '1427', '1428', '1429', '1430', '1431', '1432', '1433', '1434', '1435', '1436', '1437', '1438', '1439', '1440', '1441', '1442', '1443', '1444', '1445', '1446', '1447', '1448', '1449', '1450', '1451', '1452', '1488', '1489', '1490', '1491', '1492', '1493', '1494', '1495', '1496', '1497', '1550', '1551', '1552', '1553', '1554', '1555', '1556', '1557', '1558', '1559', '1597', '1598', '1599', '1600', '1601', '1602', '1603', '1604', '1605', '1606', '1607', '1608', '1609', '1610', '1611', '1612', '1613', '1614', '1615', '1616', '1623', '1624', '1625', '1626', '1627', '1628', '1629', '1630', '1631', '1632', '1709', '1719', '1720', '1843', '2813', '2814', '2815', '2816', '2817', '2818', '2819', '2820', '2821', '2822', '2823', '2824', '2825', '2826', '2827', '2828', '2829', '2830', '2831', '2832', '2833', '2834', '2835', '2836', '2837', '2838', '2839', '2840', '2841', '2842', '2843', '2844', '2845', '2846', '2847', '2848', '2849', '2850', '2851', '2852', '2853', '2854', '2855', '2856', '2857', '2858', '2859', '2860', '2861', '2862', '2863', '2864', '2865', '2866', '2867', '2868', '2869', '2870', '2871', '2872', '3139', '3140', '3141', '3142', '3143', '3144', '3145', '3146', '3147', '3148', '3149', '3150', '3151', '3152', '3153', '3154', '3155', '3156', '3157', '3158', '3386', '3387', '3388', '3389', '3390', '3391', '3392', '3393', '3394', '3395', '3664', '3665', '3666', '3667', '3668', '3670', '3671', '3672', '3673', '3674', '3676', '3677', '3678', '3679', '3680', '3681', '3682', '3683', '3684', '3685', '3686', '3687', '3688', '3689', '3690', '3691', '3692', '3693', '3694', '3695', '3696', '3697', '3698', '3699', '3700', '3701', '3702', '3703', '3704', '3705', '3706', '3707', '3708', '3709', '3710', '3711', '3712', '3713', '3714', '3715', '3960', '3961', '3962', '3963', '3964', '3965', '3966', '3967', '3968', '3978', '3979', '3980', '3981', '3982', '3983', '3984', '3985', '3986', '3987', '4208', '4209', '4210', '4211', '4212', '4304', '4305', '4306', '4307', '4308', '4866', '4867', '4868', '4869', '4870', '4871', '4872', '4873', '4874', '4875')) GROUP BY ds, p1, p2, p3, p4, p5, p6_md5, p7_md5 ORDER BY ds2 DESC;
|
||||
id task access object operator info
|
||||
Projection root explain_complex_stats.dt.ds, explain_complex_stats.dt.p1, explain_complex_stats.dt.p2, explain_complex_stats.dt.p3, explain_complex_stats.dt.p4, explain_complex_stats.dt.p5, explain_complex_stats.dt.p6_md5, explain_complex_stats.dt.p7_md5, Column#21->Column#30
|
||||
Projection root explain_complex_stats.dt.ds, explain_complex_stats.dt.p1, explain_complex_stats.dt.p2, explain_complex_stats.dt.p3, explain_complex_stats.dt.p4, explain_complex_stats.dt.p5, explain_complex_stats.dt.p6_md5, explain_complex_stats.dt.p7_md5, Column
|
||||
└─Sort root explain_complex_stats.dt.ds2:desc
|
||||
└─HashAgg root group by:explain_complex_stats.dt.ds, explain_complex_stats.dt.p1, explain_complex_stats.dt.p2, explain_complex_stats.dt.p3, explain_complex_stats.dt.p4, explain_complex_stats.dt.p5, explain_complex_stats.dt.p6_md5, explain_complex_stats.dt.p7_md5, funcs:count(Column#32)->Column#21, funcs:firstrow(explain_complex_stats.dt.ds)->explain_complex_stats.dt.ds, funcs:firstrow(Column#34)->explain_complex_stats.dt.ds2, funcs:firstrow(explain_complex_stats.dt.p1)->explain_complex_stats.dt.p1, funcs:firstrow(explain_complex_stats.dt.p2)->explain_complex_stats.dt.p2, funcs:firstrow(explain_complex_stats.dt.p3)->explain_complex_stats.dt.p3, funcs:firstrow(explain_complex_stats.dt.p4)->explain_complex_stats.dt.p4, funcs:firstrow(explain_complex_stats.dt.p5)->explain_complex_stats.dt.p5, funcs:firstrow(explain_complex_stats.dt.p6_md5)->explain_complex_stats.dt.p6_md5, funcs:firstrow(explain_complex_stats.dt.p7_md5)->explain_complex_stats.dt.p7_md5
|
||||
└─HashAgg root group by:explain_complex_stats.dt.ds, explain_complex_stats.dt.p1, explain_complex_stats.dt.p2, explain_complex_stats.dt.p3, explain_complex_stats.dt.p4, explain_complex_stats.dt.p5, explain_complex_stats.dt.p6_md5, explain_complex_stats.dt.p7_md5, funcs:count(Column)->Column, funcs:firstrow(explain_complex_stats.dt.ds)->explain_complex_stats.dt.ds, funcs:firstrow(Column)->explain_complex_stats.dt.ds2, funcs:firstrow(explain_complex_stats.dt.p1)->explain_complex_stats.dt.p1, funcs:firstrow(explain_complex_stats.dt.p2)->explain_complex_stats.dt.p2, funcs:firstrow(explain_complex_stats.dt.p3)->explain_complex_stats.dt.p3, funcs:firstrow(explain_complex_stats.dt.p4)->explain_complex_stats.dt.p4, funcs:firstrow(explain_complex_stats.dt.p5)->explain_complex_stats.dt.p5, funcs:firstrow(explain_complex_stats.dt.p6_md5)->explain_complex_stats.dt.p6_md5, funcs:firstrow(explain_complex_stats.dt.p7_md5)->explain_complex_stats.dt.p7_md5
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:dt, index:cm(cm) range:[1062,1062], [1086,1086], [1423,1423], [1424,1424], [1425,1425], [1426,1426], [1427,1427], [1428,1428], [1429,1429], [1430,1430], [1431,1431], [1432,1432], [1433,1433], [1434,1434], [1435,1435], [1436,1436], [1437,1437], [1438,1438], [1439,1439], [1440,1440], [1441,1441], [1442,1442], [1443,1443], [1444,1444], [1445,1445], [1446,1446], [1447,1447], [1448,1448], [1449,1449], [1450,1450], [1451,1451], [1452,1452], [1488,1488], [1489,1489], [1490,1490], [1491,1491], [1492,1492], [1493,1493], [1494,1494], [1495,1495], [1496,1496], [1497,1497], [1550,1550], [1551,1551], [1552,1552], [1553,1553], [1554,1554], [1555,1555], [1556,1556], [1557,1557], [1558,1558], [1559,1559], [1597,1597], [1598,1598], [1599,1599], [1600,1600], [1601,1601], [1602,1602], [1603,1603], [1604,1604], [1605,1605], [1606,1606], [1607,1607], [1608,1608], [1609,1609], [1610,1610], [1611,1611], [1612,1612], [1613,1613], [1614,1614], [1615,1615], [1616,1616], [1623,1623], [1624,1624], [1625,1625], [1626,1626], [1627,1627], [1628,1628], [1629,1629], [1630,1630], [1631,1631], [1632,1632], [1709,1709], [1719,1719], [1720,1720], [1843,1843], [2813,2813], [2814,2814], [2815,2815], [2816,2816], [2817,2817], [2818,2818], [2819,2819], [2820,2820], [2821,2821], [2822,2822], [2823,2823], [2824,2824], [2825,2825], [2826,2826], [2827,2827], [2828,2828], [2829,2829], [2830,2830], [2831,2831], [2832,2832], [2833,2833], [2834,2834], [2835,2835], [2836,2836], [2837,2837], [2838,2838], [2839,2839], [2840,2840], [2841,2841], [2842,2842], [2843,2843], [2844,2844], [2845,2845], [2846,2846], [2847,2847], [2848,2848], [2849,2849], [2850,2850], [2851,2851], [2852,2852], [2853,2853], [2854,2854], [2855,2855], [2856,2856], [2857,2857], [2858,2858], [2859,2859], [2860,2860], [2861,2861], [2862,2862], [2863,2863], [2864,2864], [2865,2865], [2866,2866], [2867,2867], [2868,2868], [2869,2869], [2870,2870], [2871,2871], [2872,2872], [3139,3139], [3140,3140], [3141,3141], [3142,3142], [3143,3143], [3144,3144], [3145,3145], [3146,3146], [3147,3147], [3148,3148], [3149,3149], [3150,3150], [3151,3151], [3152,3152], [3153,3153], [3154,3154], [3155,3155], [3156,3156], [3157,3157], [3158,3158], [3386,3386], [3387,3387], [3388,3388], [3389,3389], [3390,3390], [3391,3391], [3392,3392], [3393,3393], [3394,3394], [3395,3395], [3664,3664], [3665,3665], [3666,3666], [3667,3667], [3668,3668], [3670,3670], [3671,3671], [3672,3672], [3673,3673], [3674,3674], [3676,3676], [3677,3677], [3678,3678], [3679,3679], [3680,3680], [3681,3681], [3682,3682], [3683,3683], [3684,3684], [3685,3685], [3686,3686], [3687,3687], [3688,3688], [3689,3689], [3690,3690], [3691,3691], [3692,3692], [3693,3693], [3694,3694], [3695,3695], [3696,3696], [3697,3697], [3698,3698], [3699,3699], [3700,3700], [3701,3701], [3702,3702], [3703,3703], [3704,3704], [3705,3705], [3706,3706], [3707,3707], [3708,3708], [3709,3709], [3710,3710], [3711,3711], [3712,3712], [3713,3713], [3714,3714], [3715,3715], [3960,3960], [3961,3961], [3962,3962], [3963,3963], [3964,3964], [3965,3965], [3966,3966], [3967,3967], [3968,3968], [3978,3978], [3979,3979], [3980,3980], [3981,3981], [3982,3982], [3983,3983], [3984,3984], [3985,3985], [3986,3986], [3987,3987], [4208,4208], [4209,4209], [4210,4210], [4211,4211], [4212,4212], [4304,4304], [4305,4305], [4306,4306], [4307,4307], [4308,4308], [4866,4866], [4867,4867], [4868,4868], [4869,4869], [4870,4870], [4871,4871], [4872,4872], [4873,4873], [4874,4874], [4875,4875], keep order:false
|
||||
└─HashAgg(Probe) cop[tikv] group by:explain_complex_stats.dt.ds, explain_complex_stats.dt.p1, explain_complex_stats.dt.p2, explain_complex_stats.dt.p3, explain_complex_stats.dt.p4, explain_complex_stats.dt.p5, explain_complex_stats.dt.p6_md5, explain_complex_stats.dt.p7_md5, funcs:count(explain_complex_stats.dt.dic)->Column#32, funcs:firstrow(explain_complex_stats.dt.ds2)->Column#34
|
||||
└─HashAgg(Probe) cop[tikv] group by:explain_complex_stats.dt.ds, explain_complex_stats.dt.p1, explain_complex_stats.dt.p2, explain_complex_stats.dt.p3, explain_complex_stats.dt.p4, explain_complex_stats.dt.p5, explain_complex_stats.dt.p6_md5, explain_complex_stats.dt.p7_md5, funcs:count(explain_complex_stats.dt.dic)->Column, funcs:firstrow(explain_complex_stats.dt.ds2)->Column
|
||||
└─Selection cop[tikv] ge(explain_complex_stats.dt.ds, 2016-09-01 00:00:00.000000), le(explain_complex_stats.dt.ds, 2016-11-03 00:00:00.000000)
|
||||
└─TableRowIDScan cop[tikv] table:dt keep order:false
|
||||
explain format = 'plan_tree' select gad.id as gid,sdk.id as sid,gad.aid as aid,gad.cm as cm,sdk.dic as dic,sdk.ip as ip, sdk.t as t, gad.p1 as p1, gad.p2 as p2, gad.p3 as p3, gad.p4 as p4, gad.p5 as p5, gad.p6_md5 as p6, gad.p7_md5 as p7, gad.ext as ext, gad.t as gtime from st gad join (select id, aid, pt, dic, ip, t from dd where pt = 'android' and bm = 0 and t > 1478143908) sdk on gad.aid = sdk.aid and gad.ip = sdk.ip and sdk.t > gad.t where gad.t > 1478143908 and gad.bm = 0 and gad.pt = 'android' group by gad.aid, sdk.dic limit 2500;
|
||||
@ -174,8 +174,8 @@ Projection root explain_complex_stats.st.id, explain_complex_stats.dd.id, expla
|
||||
└─TableRowIDScan cop[tikv] table:sdk keep order:false
|
||||
explain format = 'plan_tree' SELECT cm, p1, p2, p3, p4, p5, p6_md5, p7_md5, count(1) as click_pv, count(DISTINCT ip) as click_ip FROM st WHERE (t between 1478188800 and 1478275200) and aid='cn.sbkcq' and pt='android' GROUP BY cm, p1, p2, p3, p4, p5, p6_md5, p7_md5;
|
||||
id task access object operator info
|
||||
Projection root explain_complex_stats.st.cm, explain_complex_stats.st.p1, explain_complex_stats.st.p2, explain_complex_stats.st.p3, explain_complex_stats.st.p4, explain_complex_stats.st.p5, explain_complex_stats.st.p6_md5, explain_complex_stats.st.p7_md5, Column#20, Column#21
|
||||
└─HashAgg root group by:explain_complex_stats.st.cm, explain_complex_stats.st.p1, explain_complex_stats.st.p2, explain_complex_stats.st.p3, explain_complex_stats.st.p4, explain_complex_stats.st.p5, explain_complex_stats.st.p6_md5, explain_complex_stats.st.p7_md5, funcs:count(1)->Column#20, funcs:count(distinct explain_complex_stats.st.ip)->Column#21, funcs:firstrow(explain_complex_stats.st.cm)->explain_complex_stats.st.cm, funcs:firstrow(explain_complex_stats.st.p1)->explain_complex_stats.st.p1, funcs:firstrow(explain_complex_stats.st.p2)->explain_complex_stats.st.p2, funcs:firstrow(explain_complex_stats.st.p3)->explain_complex_stats.st.p3, funcs:firstrow(explain_complex_stats.st.p4)->explain_complex_stats.st.p4, funcs:firstrow(explain_complex_stats.st.p5)->explain_complex_stats.st.p5, funcs:firstrow(explain_complex_stats.st.p6_md5)->explain_complex_stats.st.p6_md5, funcs:firstrow(explain_complex_stats.st.p7_md5)->explain_complex_stats.st.p7_md5
|
||||
Projection root explain_complex_stats.st.cm, explain_complex_stats.st.p1, explain_complex_stats.st.p2, explain_complex_stats.st.p3, explain_complex_stats.st.p4, explain_complex_stats.st.p5, explain_complex_stats.st.p6_md5, explain_complex_stats.st.p7_md5, Column, Column
|
||||
└─HashAgg root group by:explain_complex_stats.st.cm, explain_complex_stats.st.p1, explain_complex_stats.st.p2, explain_complex_stats.st.p3, explain_complex_stats.st.p4, explain_complex_stats.st.p5, explain_complex_stats.st.p6_md5, explain_complex_stats.st.p7_md5, funcs:count(1)->Column, funcs:count(distinct explain_complex_stats.st.ip)->Column, funcs:firstrow(explain_complex_stats.st.cm)->explain_complex_stats.st.cm, funcs:firstrow(explain_complex_stats.st.p1)->explain_complex_stats.st.p1, funcs:firstrow(explain_complex_stats.st.p2)->explain_complex_stats.st.p2, funcs:firstrow(explain_complex_stats.st.p3)->explain_complex_stats.st.p3, funcs:firstrow(explain_complex_stats.st.p4)->explain_complex_stats.st.p4, funcs:firstrow(explain_complex_stats.st.p5)->explain_complex_stats.st.p5, funcs:firstrow(explain_complex_stats.st.p6_md5)->explain_complex_stats.st.p6_md5, funcs:firstrow(explain_complex_stats.st.p7_md5)->explain_complex_stats.st.p7_md5
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:st, index:t(t) range:[1478188800,1478275200], keep order:false
|
||||
└─Selection(Probe) cop[tikv] eq(explain_complex_stats.st.aid, "cn.sbkcq"), eq(explain_complex_stats.st.pt, "android")
|
||||
@ -194,8 +194,8 @@ Projection root explain_complex_stats.dt.id, explain_complex_stats.dt.aid, expl
|
||||
└─TableRowIDScan cop[tikv] table:rr keep order:false
|
||||
explain format = 'plan_tree' 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 task access object operator info
|
||||
Projection root explain_complex_stats.pp.pc, explain_complex_stats.pp.cr, Column#22, Column#23, Column#24
|
||||
└─HashAgg root group by:explain_complex_stats.pp.cr, explain_complex_stats.pp.pc, funcs:count(distinct explain_complex_stats.pp.uid)->Column#22, funcs:count(explain_complex_stats.pp.oid)->Column#23, funcs:sum(explain_complex_stats.pp.am)->Column#24, funcs:firstrow(explain_complex_stats.pp.pc)->explain_complex_stats.pp.pc, funcs:firstrow(explain_complex_stats.pp.cr)->explain_complex_stats.pp.cr
|
||||
Projection root explain_complex_stats.pp.pc, explain_complex_stats.pp.cr, Column, Column, Column
|
||||
└─HashAgg root group by:explain_complex_stats.pp.cr, explain_complex_stats.pp.pc, funcs:count(distinct explain_complex_stats.pp.uid)->Column, funcs:count(explain_complex_stats.pp.oid)->Column, funcs:sum(explain_complex_stats.pp.am)->Column, funcs:firstrow(explain_complex_stats.pp.pc)->explain_complex_stats.pp.pc, funcs:firstrow(explain_complex_stats.pp.cr)->explain_complex_stats.pp.cr
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:pp, index:ps(ps) range:[2,2], keep order:false
|
||||
└─Selection(Probe) cop[tikv] ge(explain_complex_stats.pp.ppt, 1478188800), in(explain_complex_stats.pp.pi, 510017, 520017), in(explain_complex_stats.pp.uid, 18089709, 18090780), lt(explain_complex_stats.pp.ppt, 1478275200)
|
||||
@ -229,8 +229,8 @@ CREATE TABLE tbl_009 (a int, b int);
|
||||
load stats 's/explain_complex_stats_tbl_009.json';
|
||||
explain format = 'plan_tree' select sum(a) from (select * from tbl_001 union all select * from tbl_002 union all select * from tbl_003 union all select * from tbl_004 union all select * from tbl_005 union all select * from tbl_006 union all select * from tbl_007 union all select * from tbl_008 union all select * from tbl_009) x group by b;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#32, funcs:sum(Column#31)->Column#30
|
||||
└─Projection root cast(Column#28, decimal(10,0) BINARY)->Column#31, Column#29->Column#32
|
||||
HashAgg root group by:Column, funcs:sum(Column)->Column
|
||||
└─Projection root cast(Column, decimal(10,0) BINARY)->Column, Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tbl_001 keep order:false
|
||||
|
||||
@ -6,7 +6,7 @@ insert into t1 values(1, 0), (2, 1);
|
||||
insert into t2 values(1, 0), (2, 1);
|
||||
explain format='plan_tree' with cte(a) as (select 1) select * from cte;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#3
|
||||
Projection root 1->Column
|
||||
└─TableDual root rows:1
|
||||
explain format='plan_tree' with cte(a) as (select c1 from t1) select * from cte;
|
||||
id task access object operator info
|
||||
@ -23,10 +23,10 @@ explain format='plan_tree' with recursive cte(a) as (select 1 union select a+1 f
|
||||
id task access object operator info
|
||||
CTEFullScan root CTE:cte data:CTE_0
|
||||
CTE_0 root Recursive CTE
|
||||
├─Projection(Seed Part) root 1->Column#2
|
||||
├─Projection(Seed Part) root 1->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root cast(plus(Column#3, 1), bigint BINARY)->Column#5
|
||||
└─Selection root lt(Column#3, 10)
|
||||
└─Projection(Recursive Part) root cast(plus(Column, 1), bigint BINARY)->Column
|
||||
└─Selection root lt(Column, 10)
|
||||
└─CTETable root Scan on CTE_0
|
||||
explain format='plan_tree' with recursive cte(a) as (select c2 from t1 union select a+1 from cte where a < 10) select * from cte;
|
||||
id task access object operator info
|
||||
@ -41,10 +41,10 @@ explain format='plan_tree' with cte(a) as (with recursive cte1(a) as (select 1 u
|
||||
id task access object operator info
|
||||
CTEFullScan root CTE:cte1 data:CTE_2
|
||||
CTE_2 root Recursive CTE
|
||||
├─Projection(Seed Part) root 1->Column#9
|
||||
├─Projection(Seed Part) root 1->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root cast(plus(Column#10, 1), bigint BINARY)->Column#12
|
||||
└─Selection root lt(Column#10, 10)
|
||||
└─Projection(Recursive Part) root cast(plus(Column, 1), bigint BINARY)->Column
|
||||
└─Selection root lt(Column, 10)
|
||||
└─CTETable root Scan on CTE_2
|
||||
explain format='plan_tree' with recursive cte(a) as (select 1 union select a+1 from cte where a < 10) select * from cte t1, cte t2;
|
||||
id task access object operator info
|
||||
@ -52,10 +52,10 @@ HashJoin root CARTESIAN inner join
|
||||
├─CTEFullScan(Build) root CTE:cte AS t2 data:CTE_0
|
||||
└─CTEFullScan(Probe) root CTE:cte AS t1 data:CTE_0
|
||||
CTE_0 root Recursive CTE
|
||||
├─Projection(Seed Part) root 1->Column#2
|
||||
├─Projection(Seed Part) root 1->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root cast(plus(Column#3, 1), bigint BINARY)->Column#5
|
||||
└─Selection root lt(Column#3, 10)
|
||||
└─Projection(Recursive Part) root cast(plus(Column, 1), bigint BINARY)->Column
|
||||
└─Selection root lt(Column, 10)
|
||||
└─CTETable root Scan on CTE_0
|
||||
explain format='plan_tree' with cte(a) as (with recursive cte1(a) as (select 1 union select a + 1 from cte1 where a < 10) select * from cte1) select * from cte t1, cte t2;
|
||||
id task access object operator info
|
||||
@ -65,10 +65,10 @@ HashJoin root CARTESIAN inner join
|
||||
CTE_0 root Non-Recursive CTE
|
||||
└─CTEFullScan(Seed Part) root CTE:cte1 data:CTE_1
|
||||
CTE_1 root Recursive CTE
|
||||
├─Projection(Seed Part) root 1->Column#2
|
||||
├─Projection(Seed Part) root 1->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root cast(plus(Column#3, 1), bigint BINARY)->Column#5
|
||||
└─Selection root lt(Column#3, 10)
|
||||
└─Projection(Recursive Part) root cast(plus(Column, 1), bigint BINARY)->Column
|
||||
└─Selection root lt(Column, 10)
|
||||
└─CTETable root Scan on CTE_1
|
||||
explain format='plan_tree' with recursive cte1(a) as (select 1 union select a+1 from cte1 where a < 10), cte2(a) as (select c2 from t1 union select a+1 from cte2 where a < 10) select * from cte1, cte2;
|
||||
id task access object operator info
|
||||
@ -76,10 +76,10 @@ HashJoin root CARTESIAN inner join
|
||||
├─CTEFullScan(Build) root CTE:cte1 data:CTE_0
|
||||
└─CTEFullScan(Probe) root CTE:cte2 data:CTE_1
|
||||
CTE_0 root Recursive CTE
|
||||
├─Projection(Seed Part) root 1->Column#2
|
||||
├─Projection(Seed Part) root 1->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root cast(plus(Column#3, 1), bigint BINARY)->Column#5
|
||||
└─Selection root lt(Column#3, 10)
|
||||
└─Projection(Recursive Part) root cast(plus(Column, 1), bigint BINARY)->Column
|
||||
└─Selection root lt(Column, 10)
|
||||
└─CTETable root Scan on CTE_0
|
||||
CTE_1 root Recursive CTE
|
||||
├─TableReader(Seed Part) root data:TableFullScan
|
||||
@ -100,23 +100,23 @@ explain format='plan_tree' with recursive cte(a,b) as (select 1, concat('a', 1)
|
||||
id task access object operator info
|
||||
CTEFullScan root CTE:cte data:CTE_0
|
||||
CTE_0 root Recursive CTE
|
||||
├─Projection(Seed Part) root 1->Column#3, a1->Column#4
|
||||
├─Projection(Seed Part) root 1->Column, a1->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root cast(plus(Column#5, 1), bigint BINARY)->Column#9, cast(concat(Column#6, 1), var_string(21))->Column#10
|
||||
└─Selection root lt(Column#5, 5)
|
||||
└─Projection(Recursive Part) root cast(plus(Column, 1), bigint BINARY)->Column, cast(concat(Column, 1), var_string(21))->Column
|
||||
└─Selection root lt(Column, 5)
|
||||
└─CTETable root Scan on CTE_0
|
||||
explain format='plan_tree' select * from t1 dt where exists(with recursive qn as (select c1*0+1 as b union all select b+1 from qn where b=0) select * from qn where b=1);
|
||||
id task access object operator info
|
||||
Apply root CARTESIAN semi join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:dt keep order:false, stats:pseudo
|
||||
└─Selection(Probe) root eq(Column#8, 1)
|
||||
└─Selection(Probe) root eq(Column, 1)
|
||||
└─CTEFullScan root CTE:qn data:CTE_0
|
||||
CTE_0 root Recursive CTE
|
||||
├─Projection(Seed Part) root plus(mul(explain_cte.t1.c1, 0), 1)->Column#4
|
||||
├─Projection(Seed Part) root plus(mul(explain_cte.t1.c1, 0), 1)->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root plus(Column#5, 1)->Column#7
|
||||
└─Selection root eq(Column#5, 0)
|
||||
└─Projection(Recursive Part) root plus(Column, 1)->Column
|
||||
└─Selection root eq(Column, 0)
|
||||
└─CTETable root Scan on CTE_0
|
||||
explain format='plan_tree' with recursive cte1(c1) as (select c1 from t1 union select c1 + 1 c1 from cte1 limit 1) select * from cte1;
|
||||
id task access object operator info
|
||||
@ -360,24 +360,24 @@ order by t_s_secyear.customer_id
|
||||
,t_s_secyear.customer_email_address
|
||||
limit 100;
|
||||
id task access object operator info
|
||||
TopN root Column#180, Column#181, Column#182, Column#186, offset:0, count:100
|
||||
└─HashJoin root inner join, equal:[eq(Column#170, Column#200)], other cond:gt(case(gt(Column#198, 0), div(Column#208, Column#198), 0.000000), case(gt(Column#178, 0), div(Column#188, Column#178), 0.000000))
|
||||
├─Selection(Build) root eq(Column#207, 2002), eq(Column#209, "w"), not(isnull(Column#200))
|
||||
TopN root Column, Column, Column, Column, offset:0, count:100
|
||||
└─HashJoin root inner join, equal:[eq(Column, Column)], other cond:gt(case(gt(Column, 0), div(Column, Column), 0.000000), case(gt(Column, 0), div(Column, Column), 0.000000))
|
||||
├─Selection(Build) root eq(Column, "w"), eq(Column, 2002), not(isnull(Column))
|
||||
│ └─CTEFullScan root CTE:year_total AS t_w_secyear data:CTE_0
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(Column#170, Column#190)]
|
||||
├─Selection(Build) root eq(Column#197, 2001), eq(Column#199, "w"), gt(Column#198, 0), not(isnull(Column#190))
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(Column, Column)]
|
||||
├─Selection(Build) root eq(Column, "w"), eq(Column, 2001), gt(Column, 0), not(isnull(Column))
|
||||
│ └─CTEFullScan root CTE:year_total AS t_w_firstyear data:CTE_0
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(Column#170, Column#180)]
|
||||
├─Selection(Build) root eq(Column#187, 2002), eq(Column#189, "s"), not(isnull(Column#180))
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(Column, Column)]
|
||||
├─Selection(Build) root eq(Column, "s"), eq(Column, 2002), not(isnull(Column))
|
||||
│ └─CTEFullScan root CTE:year_total AS t_s_secyear data:CTE_0
|
||||
└─Selection(Probe) root eq(Column#177, 2001), eq(Column#179, "s"), gt(Column#178, 0), not(isnull(Column#170))
|
||||
└─Selection(Probe) root eq(Column, "s"), eq(Column, 2001), gt(Column, 0), not(isnull(Column))
|
||||
└─CTEFullScan root CTE:year_total AS t_s_firstyear data:CTE_0
|
||||
CTE_0 root Non-Recursive CTE
|
||||
└─Union(Seed Part) root
|
||||
├─Projection root explain_cte.customer.c_customer_id->Column#160, explain_cte.customer.c_first_name->Column#161, explain_cte.customer.c_last_name->Column#162, explain_cte.customer.c_preferred_cust_flag->Column#163, explain_cte.customer.c_birth_country->Column#164, explain_cte.customer.c_login->Column#165, explain_cte.customer.c_email_address->Column#166, explain_cte.date_dim.d_year->Column#167, Column#73->Column#168, s->Column#169
|
||||
│ └─Selection root or(and(eq(explain_cte.date_dim.d_year, 2001), gt(Column#73, 0)), eq(explain_cte.date_dim.d_year, 2002))
|
||||
│ └─HashAgg root group by:Column#217, Column#218, Column#219, Column#220, Column#221, Column#222, Column#223, Column#224, funcs:sum(Column#216)->Column#73, funcs:firstrow(Column#217)->explain_cte.customer.c_customer_id, funcs:firstrow(Column#218)->explain_cte.customer.c_first_name, funcs:firstrow(Column#219)->explain_cte.customer.c_last_name, funcs:firstrow(Column#220)->explain_cte.customer.c_preferred_cust_flag, funcs:firstrow(Column#221)->explain_cte.customer.c_birth_country, funcs:firstrow(Column#222)->explain_cte.customer.c_login, funcs:firstrow(Column#223)->explain_cte.customer.c_email_address, funcs:firstrow(Column#224)->explain_cte.date_dim.d_year
|
||||
│ └─Projection root minus(explain_cte.store_sales.ss_ext_list_price, explain_cte.store_sales.ss_ext_discount_amt)->Column#216, explain_cte.customer.c_customer_id->Column#217, explain_cte.customer.c_first_name->Column#218, explain_cte.customer.c_last_name->Column#219, explain_cte.customer.c_preferred_cust_flag->Column#220, explain_cte.customer.c_birth_country->Column#221, explain_cte.customer.c_login->Column#222, explain_cte.customer.c_email_address->Column#223, explain_cte.date_dim.d_year->Column#224
|
||||
├─Projection root explain_cte.customer.c_customer_id->Column, explain_cte.customer.c_first_name->Column, explain_cte.customer.c_last_name->Column, explain_cte.customer.c_preferred_cust_flag->Column, explain_cte.customer.c_birth_country->Column, explain_cte.customer.c_login->Column, explain_cte.customer.c_email_address->Column, explain_cte.date_dim.d_year->Column, Column, s->Column
|
||||
│ └─Selection root or(and(eq(explain_cte.date_dim.d_year, 2001), gt(Column, 0)), eq(explain_cte.date_dim.d_year, 2002))
|
||||
│ └─HashAgg root group by:Column, Column, Column, Column, Column, Column, Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->explain_cte.customer.c_customer_id, funcs:firstrow(Column)->explain_cte.customer.c_first_name, funcs:firstrow(Column)->explain_cte.customer.c_last_name, funcs:firstrow(Column)->explain_cte.customer.c_preferred_cust_flag, funcs:firstrow(Column)->explain_cte.customer.c_birth_country, funcs:firstrow(Column)->explain_cte.customer.c_login, funcs:firstrow(Column)->explain_cte.customer.c_email_address, funcs:firstrow(Column)->explain_cte.date_dim.d_year
|
||||
│ └─Projection root minus(explain_cte.store_sales.ss_ext_list_price, explain_cte.store_sales.ss_ext_discount_amt)->Column, explain_cte.customer.c_customer_id->Column, explain_cte.customer.c_first_name->Column, explain_cte.customer.c_last_name->Column, explain_cte.customer.c_preferred_cust_flag->Column, explain_cte.customer.c_birth_country->Column, explain_cte.customer.c_login->Column, explain_cte.customer.c_email_address->Column, explain_cte.date_dim.d_year->Column
|
||||
│ └─Projection root explain_cte.customer.c_customer_id, explain_cte.customer.c_first_name, explain_cte.customer.c_last_name, explain_cte.customer.c_preferred_cust_flag, explain_cte.customer.c_birth_country, explain_cte.customer.c_login, explain_cte.customer.c_email_address, explain_cte.store_sales.ss_ext_discount_amt, explain_cte.store_sales.ss_ext_list_price, explain_cte.date_dim.d_year
|
||||
│ └─IndexJoin root inner join, inner:IndexLookUp, outer key:explain_cte.store_sales.ss_customer_sk, inner key:explain_cte.customer.c_customer_sk, equal cond:eq(explain_cte.store_sales.ss_customer_sk, explain_cte.customer.c_customer_sk)
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(explain_cte.date_dim.d_date_sk, explain_cte.store_sales.ss_sold_date_sk)]
|
||||
@ -390,10 +390,10 @@ CTE_0 root Non-Recursive CTE
|
||||
│ └─IndexLookUp(Probe) root
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:customer, index:PRIMARY(c_customer_sk) range: decided by [eq(explain_cte.customer.c_customer_sk, explain_cte.store_sales.ss_customer_sk)], keep order:false, stats:pseudo
|
||||
│ └─TableRowIDScan(Probe) cop[tikv] table:customer keep order:false, stats:pseudo
|
||||
└─Projection root explain_cte.customer.c_customer_id->Column#160, explain_cte.customer.c_first_name->Column#161, explain_cte.customer.c_last_name->Column#162, explain_cte.customer.c_preferred_cust_flag->Column#163, explain_cte.customer.c_birth_country->Column#164, explain_cte.customer.c_login->Column#165, explain_cte.customer.c_email_address->Column#166, explain_cte.date_dim.d_year->Column#167, Column#158->Column#168, w->Column#169
|
||||
└─Selection root or(and(eq(explain_cte.date_dim.d_year, 2001), gt(Column#158, 0)), eq(explain_cte.date_dim.d_year, 2002))
|
||||
└─HashAgg root group by:Column#226, Column#227, Column#228, Column#229, Column#230, Column#231, Column#232, Column#233, funcs:sum(Column#225)->Column#158, funcs:firstrow(Column#226)->explain_cte.customer.c_customer_id, funcs:firstrow(Column#227)->explain_cte.customer.c_first_name, funcs:firstrow(Column#228)->explain_cte.customer.c_last_name, funcs:firstrow(Column#229)->explain_cte.customer.c_preferred_cust_flag, funcs:firstrow(Column#230)->explain_cte.customer.c_birth_country, funcs:firstrow(Column#231)->explain_cte.customer.c_login, funcs:firstrow(Column#232)->explain_cte.customer.c_email_address, funcs:firstrow(Column#233)->explain_cte.date_dim.d_year
|
||||
└─Projection root minus(explain_cte.web_sales.ws_ext_list_price, explain_cte.web_sales.ws_ext_discount_amt)->Column#225, explain_cte.customer.c_customer_id->Column#226, explain_cte.customer.c_first_name->Column#227, explain_cte.customer.c_last_name->Column#228, explain_cte.customer.c_preferred_cust_flag->Column#229, explain_cte.customer.c_birth_country->Column#230, explain_cte.customer.c_login->Column#231, explain_cte.customer.c_email_address->Column#232, explain_cte.date_dim.d_year->Column#233
|
||||
└─Projection root explain_cte.customer.c_customer_id->Column, explain_cte.customer.c_first_name->Column, explain_cte.customer.c_last_name->Column, explain_cte.customer.c_preferred_cust_flag->Column, explain_cte.customer.c_birth_country->Column, explain_cte.customer.c_login->Column, explain_cte.customer.c_email_address->Column, explain_cte.date_dim.d_year->Column, Column, w->Column
|
||||
└─Selection root or(and(eq(explain_cte.date_dim.d_year, 2001), gt(Column, 0)), eq(explain_cte.date_dim.d_year, 2002))
|
||||
└─HashAgg root group by:Column, Column, Column, Column, Column, Column, Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->explain_cte.customer.c_customer_id, funcs:firstrow(Column)->explain_cte.customer.c_first_name, funcs:firstrow(Column)->explain_cte.customer.c_last_name, funcs:firstrow(Column)->explain_cte.customer.c_preferred_cust_flag, funcs:firstrow(Column)->explain_cte.customer.c_birth_country, funcs:firstrow(Column)->explain_cte.customer.c_login, funcs:firstrow(Column)->explain_cte.customer.c_email_address, funcs:firstrow(Column)->explain_cte.date_dim.d_year
|
||||
└─Projection root minus(explain_cte.web_sales.ws_ext_list_price, explain_cte.web_sales.ws_ext_discount_amt)->Column, explain_cte.customer.c_customer_id->Column, explain_cte.customer.c_first_name->Column, explain_cte.customer.c_last_name->Column, explain_cte.customer.c_preferred_cust_flag->Column, explain_cte.customer.c_birth_country->Column, explain_cte.customer.c_login->Column, explain_cte.customer.c_email_address->Column, explain_cte.date_dim.d_year->Column
|
||||
└─Projection root explain_cte.customer.c_customer_id, explain_cte.customer.c_first_name, explain_cte.customer.c_last_name, explain_cte.customer.c_preferred_cust_flag, explain_cte.customer.c_birth_country, explain_cte.customer.c_login, explain_cte.customer.c_email_address, explain_cte.web_sales.ws_ext_discount_amt, explain_cte.web_sales.ws_ext_list_price, explain_cte.date_dim.d_year
|
||||
└─IndexJoin root inner join, inner:IndexLookUp, outer key:explain_cte.web_sales.ws_bill_customer_sk, inner key:explain_cte.customer.c_customer_sk, equal cond:eq(explain_cte.web_sales.ws_bill_customer_sk, explain_cte.customer.c_customer_sk)
|
||||
├─HashJoin(Build) root inner join, equal:[eq(explain_cte.date_dim.d_date_sk, explain_cte.web_sales.ws_sold_date_sk)]
|
||||
|
||||
@ -14,12 +14,12 @@ set @@session.tidb_hashagg_final_concurrency = 1;
|
||||
set @@session.tidb_window_concurrency = 1;
|
||||
explain format = 'plan_tree' select * from t3 where exists (select s.a from t3 s having sum(s.a) = t3.a );
|
||||
id task access object operator info
|
||||
HashJoin root semi join, left side:Projection, equal:[eq(Column#13, Column#11)]
|
||||
├─StreamAgg(Build) root funcs:sum(Column#16)->Column#11
|
||||
HashJoin root semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
├─StreamAgg(Build) root funcs:sum(Column)->Column
|
||||
│ └─TableReader root data:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] funcs:sum(explain_easy.t3.a)->Column#16
|
||||
│ └─StreamAgg cop[tikv] funcs:sum(explain_easy.t3.a)->Column
|
||||
│ └─TableFullScan cop[tikv] table:s keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root explain_easy.t3.a, explain_easy.t3.b, explain_easy.t3.c, explain_easy.t3.d, cast(explain_easy.t3.a, decimal(20,0) BINARY)->Column#13
|
||||
└─Projection(Probe) root explain_easy.t3.a, explain_easy.t3.b, explain_easy.t3.c, explain_easy.t3.d, cast(explain_easy.t3.a, decimal(20,0) BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select * from t1;
|
||||
@ -63,11 +63,11 @@ Delete root N/A
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select count(b.c2) from t1 a, t2 b where a.c1 = b.c2 group by a.c1;
|
||||
id task access object operator info
|
||||
Projection root Column#7
|
||||
Projection root Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t1.c1, explain_easy.t2.c2)]
|
||||
├─HashAgg(Build) root group by:explain_easy.t2.c2, funcs:count(Column#10)->Column#8, funcs:firstrow(explain_easy.t2.c2)->explain_easy.t2.c2
|
||||
├─HashAgg(Build) root group by:explain_easy.t2.c2, funcs:count(Column)->Column, funcs:firstrow(explain_easy.t2.c2)->explain_easy.t2.c2
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.t2.c2, funcs:count(explain_easy.t2.c2)->Column#10
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.t2.c2, funcs:count(explain_easy.t2.c2)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t2.c2))
|
||||
│ └─TableFullScan cop[tikv] table:b keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
@ -90,8 +90,8 @@ Selection root gt(explain_easy.t1.c2, 1)
|
||||
└─Point_Get root table:t1 handle:1
|
||||
explain format = 'plan_tree' select sum(t1.c1 in (select c1 from t2)) from t1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#13)->Column#11
|
||||
└─Projection root cast(Column#10, decimal(3,0) BINARY)->Column#13
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(Column, decimal(3,0) BINARY)->Column
|
||||
└─HashJoin root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t1.c1, explain_easy.t2.c1)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
@ -108,9 +108,9 @@ HashJoin root inner join, equal:[eq(explain_easy.t1.c1, explain_easy.t2.c2)]
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select (select count(1) k from t1 s where s.c1 = t1.c1 having k != 0) from t1;
|
||||
id task access object operator info
|
||||
Projection root ifnull(Column#10, 0)->Column#10
|
||||
Projection root ifnull(Column, 0)->Column
|
||||
└─MergeJoin root left outer join, left side:TableReader, left key:explain_easy.t1.c1, right key:explain_easy.t1.c1
|
||||
├─Projection(Build) root 1->Column#10, explain_easy.t1.c1
|
||||
├─Projection(Build) root 1->Column, explain_easy.t1.c1
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:s keep order:true, stats:pseudo
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
@ -126,7 +126,7 @@ id task access object operator info
|
||||
MemTableScan root table:COLUMNS column_name:["c1"], table_name:["t1"], table_schema:["test"]
|
||||
explain format = 'plan_tree' select c2 = (select c2 from t2 where t1.c1 = t2.c1 order by c1 limit 1) from t1;
|
||||
id task access object operator info
|
||||
Projection root eq(explain_easy.t1.c2, explain_easy.t2.c2)->Column#11
|
||||
Projection root eq(explain_easy.t1.c2, explain_easy.t2.c2)->Column
|
||||
└─Apply root CARTESIAN left outer join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -169,13 +169,13 @@ TableReader root data:TableFullScan
|
||||
explain format = 'plan_tree' select c1 from t2 union select c1 from t2 union all select c1 from t2;
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─HashAgg root group by:Column#10, funcs:firstrow(Column#12)->Column#10
|
||||
├─HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
│ └─Union root
|
||||
│ ├─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column#12, funcs:firstrow(explain_easy.t2.c1)->Column#10
|
||||
│ ├─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column, funcs:firstrow(explain_easy.t2.c1)->Column
|
||||
│ │ └─IndexReader root index:StreamAgg
|
||||
│ │ └─StreamAgg cop[tikv] group by:explain_easy.t2.c1,
|
||||
│ │ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:true, stats:pseudo
|
||||
│ └─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column#12, funcs:firstrow(explain_easy.t2.c1)->Column#10
|
||||
│ └─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column, funcs:firstrow(explain_easy.t2.c1)->Column
|
||||
│ └─IndexReader root index:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] group by:explain_easy.t2.c1,
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:true, stats:pseudo
|
||||
@ -183,17 +183,17 @@ Union root
|
||||
└─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select c1 from t2 union all select c1 from t2 union select c1 from t2;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#10, funcs:firstrow(Column#11)->Column#10
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column#11, funcs:firstrow(explain_easy.t2.c1)->Column#10
|
||||
├─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column, funcs:firstrow(explain_easy.t2.c1)->Column
|
||||
│ └─IndexReader root index:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] group by:explain_easy.t2.c1,
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:true, stats:pseudo
|
||||
├─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column#11, funcs:firstrow(explain_easy.t2.c1)->Column#10
|
||||
├─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column, funcs:firstrow(explain_easy.t2.c1)->Column
|
||||
│ └─IndexReader root index:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] group by:explain_easy.t2.c1,
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:true, stats:pseudo
|
||||
└─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column#11, funcs:firstrow(explain_easy.t2.c1)->Column#10
|
||||
└─StreamAgg root group by:explain_easy.t2.c1, funcs:firstrow(explain_easy.t2.c1)->Column, funcs:firstrow(explain_easy.t2.c1)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:explain_easy.t2.c1,
|
||||
└─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:true, stats:pseudo
|
||||
@ -205,38 +205,38 @@ explain_easy t4 1 idx 2 b NULL NULL 1 YES NO 0 NULL
|
||||
explain_easy t4 1 expr_idx 1 NULL NULL `a` + `b` + 1 2 YES NO 0 NULL
|
||||
explain format = 'plan_tree' select count(1) from (select count(1) from (select * from t1 where c3 = 100) k) k2;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#5
|
||||
└─StreamAgg root funcs:count(Column#9)->Column#7
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#9
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] eq(explain_easy.t1.c3, 100)
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select 1 from (select count(c2), count(c3) from t1) k;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#6
|
||||
└─StreamAgg root funcs:count(Column#14)->Column#9
|
||||
Projection root 1->Column
|
||||
└─StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#14
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select count(1) from (select max(c2), count(c3) as m from t1) k;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#6
|
||||
└─StreamAgg root funcs:count(Column#13)->Column#8
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#13
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select count(1) from (select count(c2) from t1 group by c3) k;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#5
|
||||
└─HashAgg root group by:explain_easy.t1.c3, funcs:count(Column#9)->Column#7
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─HashAgg root group by:explain_easy.t1.c3, funcs:count(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:explain_easy.t1.c3, funcs:count(1)->Column#9
|
||||
└─HashAgg cop[tikv] group by:explain_easy.t1.c3, funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
set @@session.tidb_opt_insubq_to_join_and_agg=0;
|
||||
explain format = 'plan_tree' select sum(t1.c1 in (select c1 from t2)) from t1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#13)->Column#11
|
||||
└─Projection root cast(Column#10, decimal(3,0) BINARY)->Column#13
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(Column, decimal(3,0) BINARY)->Column
|
||||
└─HashJoin root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t1.c1, explain_easy.t2.c1)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
@ -251,8 +251,8 @@ HashJoin root CARTESIAN left outer semi join, left side:TableReader, other cond
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(6 in (select c2 from t2)) from t1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#13)->Column#11
|
||||
└─Projection root cast(Column#10, decimal(3,0) BINARY)->Column#13
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(Column, decimal(3,0) BINARY)->Column
|
||||
└─HashJoin root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(6, explain_easy.t2.c2)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
@ -319,11 +319,11 @@ drop table if exists t;
|
||||
create table t(a int primary key, b int, c int, index idx(b));
|
||||
explain format = 'plan_tree' select t.c in (select count(*) from t s ignore index(idx), t t1 where s.a = t.a and s.a = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#17
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column#16
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column
|
||||
└─MergeJoin root inner join, left key:explain_easy.t.a, right key:explain_easy.t.a
|
||||
├─TableReader(Build) root data:TableRangeScan
|
||||
│ └─TableRangeScan cop[tikv] table:t1 range: decided by [eq(explain_easy.t.a, explain_easy.t.a)], keep order:true, stats:pseudo
|
||||
@ -331,11 +331,11 @@ Projection root Column#17
|
||||
└─TableRangeScan cop[tikv] table:s range: decided by [eq(explain_easy.t.a, explain_easy.t.a)], keep order:true, stats:pseudo
|
||||
explain format = 'plan_tree' select t.c in (select count(*) from t s use index(idx), t t1 where s.b = t.a and s.a = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#17
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column#16
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column
|
||||
└─IndexJoin root inner join, inner:TableReader, outer key:explain_easy.t.a, inner key:explain_easy.t.a, equal cond:eq(explain_easy.t.a, explain_easy.t.a)
|
||||
├─IndexReader(Build) root index:IndexRangeScan
|
||||
│ └─IndexRangeScan cop[tikv] table:s, index:idx(b) range: decided by [eq(explain_easy.t.b, explain_easy.t.a)], keep order:false, stats:pseudo
|
||||
@ -343,11 +343,11 @@ Projection root Column#17
|
||||
└─TableRangeScan cop[tikv] table:t1 range: decided by [explain_easy.t.a], keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select t.c in (select count(*) from t s use index(idx), t t1 where s.b = t.a and s.c = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#17
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column#16
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column
|
||||
└─IndexJoin root inner join, inner:TableReader, outer key:explain_easy.t.c, inner key:explain_easy.t.a, equal cond:eq(explain_easy.t.c, explain_easy.t.a)
|
||||
├─IndexLookUp(Build) root
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:s, index:idx(b) range: decided by [eq(explain_easy.t.b, explain_easy.t.a)], keep order:false, stats:pseudo
|
||||
@ -359,11 +359,11 @@ insert into t values(1, 1, 1), (2, 2 ,2), (3, 3, 3), (4, 3, 4),(5,3,5);
|
||||
analyze table t;
|
||||
explain format = 'plan_tree' select t.c in (select count(*) from t s, t t1 where s.b = t.a and s.b = 3 and s.a = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#17
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column#16
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column
|
||||
└─MergeJoin root inner join, left key:explain_easy.t.a, right key:explain_easy.t.a
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] eq(explain_easy.t.a, 3)
|
||||
@ -373,46 +373,46 @@ Projection root Column#17
|
||||
└─IndexRangeScan cop[tikv] table:s, index:idx(b) range:[3,3], keep order:true
|
||||
explain format = 'plan_tree' 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 task access object operator info
|
||||
Projection root Column#17
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false
|
||||
└─StreamAgg(Probe) root funcs:count(Column#19)->Column#16
|
||||
└─StreamAgg(Probe) root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#19
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] eq(3, explain_easy.t.a)
|
||||
└─IndexRangeScan cop[tikv] table:s, index:idx(b) range:[3,3], keep order:false
|
||||
explain format = 'plan_tree' select t.c in (select count(*) from t s right join t t1 on s.a = t1.a where 3 = t.a and t1.b = 3) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#17
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false
|
||||
└─StreamAgg(Probe) root funcs:count(Column#19)->Column#16
|
||||
└─StreamAgg(Probe) root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#19
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] eq(3, explain_easy.t.a)
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:idx(b) range:[3,3], keep order:false
|
||||
drop table if exists t;
|
||||
create table t(a int unsigned not null);
|
||||
explain format = 'plan_tree' select t.a = '123455' from t;
|
||||
id task access object operator info
|
||||
Projection root eq(explain_easy.t.a, 123455)->Column#3
|
||||
Projection root eq(explain_easy.t.a, 123455)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select t.a > '123455' from t;
|
||||
id task access object operator info
|
||||
Projection root gt(explain_easy.t.a, 123455)->Column#3
|
||||
Projection root gt(explain_easy.t.a, 123455)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select t.a != '123455' from t;
|
||||
id task access object operator info
|
||||
Projection root ne(explain_easy.t.a, 123455)->Column#3
|
||||
Projection root ne(explain_easy.t.a, 123455)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select t.a = 12345678912345678998789678687678.111 from t;
|
||||
id task access object operator info
|
||||
Projection root 0->Column#3
|
||||
Projection root 0->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
drop table if exists t;
|
||||
@ -460,7 +460,7 @@ id task access object operator info
|
||||
TableDual root rows:0
|
||||
explain format = 'plan_tree' select null or a > 1 from t;
|
||||
id task access object operator info
|
||||
Projection root or(<nil>, gt(explain_easy.t.a, 1))->Column#2
|
||||
Projection root or(<nil>, gt(explain_easy.t.a, 1))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select * from t where a = 1 for update;
|
||||
@ -504,63 +504,63 @@ PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
||||
explain format = 'plan_tree' SELECT COUNT(1) FROM (SELECT COALESCE(b.region_name, '不详') region_name, SUM(a.registration_num) registration_num FROM (SELECT stat_date, show_date, region_id, 0 registration_num FROM test01 WHERE period = 1 AND stat_date >= 20191202 AND stat_date <= 20191202 UNION ALL SELECT stat_date, show_date, region_id, registration_num registration_num FROM test01 WHERE period = 1 AND stat_date >= 20191202 AND stat_date <= 20191202) a LEFT JOIN test02 b ON a.region_id = b.id WHERE registration_num > 0 AND a.stat_date >= '20191202' AND a.stat_date <= '20191202' GROUP BY a.stat_date , a.show_date , COALESCE(b.region_name, '不详') ) JLS;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#22
|
||||
└─HashAgg root group by:Column#47, Column#48, Column#49, funcs:count(1)->Column#36
|
||||
└─Projection root Column#14->Column#47, Column#15->Column#48, coalesce(explain_easy.test02.region_name, 不详)->Column#49
|
||||
└─IndexJoin root left outer join, inner:TableReader, left side:HashAgg, outer key:Column#16, inner key:explain_easy.test02.id, equal cond:eq(Column#16, explain_easy.test02.id)
|
||||
├─HashAgg(Build) root group by:Column#14, Column#15, Column#16, funcs:firstrow(Column#33)->Column#14, funcs:firstrow(Column#34)->Column#15, funcs:firstrow(Column#35)->Column#16, funcs:count(1)->Column#37
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─HashAgg root group by:Column, Column, Column, funcs:count(1)->Column
|
||||
└─Projection root Column, Column, coalesce(explain_easy.test02.region_name, 不详)->Column
|
||||
└─IndexJoin root left outer join, inner:TableReader, left side:HashAgg, outer key:Column, inner key:explain_easy.test02.id, equal cond:eq(Column, explain_easy.test02.id)
|
||||
├─HashAgg(Build) root group by:Column, Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column, funcs:count(1)->Column
|
||||
│ └─Union root
|
||||
│ ├─Projection root Column#33, Column#34, Column#35, Column#14, Column#15, Column#16
|
||||
│ │ └─HashAgg root group by:explain_easy.test01.region_id, explain_easy.test01.show_date, explain_easy.test01.stat_date, funcs:firstrow(explain_easy.test01.stat_date)->Column#33, funcs:firstrow(explain_easy.test01.show_date)->Column#34, funcs:firstrow(explain_easy.test01.region_id)->Column#35, funcs:firstrow(explain_easy.test01.stat_date)->Column#14, funcs:firstrow(explain_easy.test01.show_date)->Column#15, funcs:firstrow(explain_easy.test01.region_id)->Column#16, funcs:count(1)->Column#38
|
||||
│ ├─Projection root Column, Column, Column, Column, Column, Column
|
||||
│ │ └─HashAgg root group by:explain_easy.test01.region_id, explain_easy.test01.show_date, explain_easy.test01.stat_date, funcs:firstrow(explain_easy.test01.stat_date)->Column, funcs:firstrow(explain_easy.test01.show_date)->Column, funcs:firstrow(explain_easy.test01.region_id)->Column, funcs:firstrow(explain_easy.test01.stat_date)->Column, funcs:firstrow(explain_easy.test01.show_date)->Column, funcs:firstrow(explain_easy.test01.region_id)->Column, funcs:count(1)->Column
|
||||
│ │ └─TableDual root rows:0
|
||||
│ └─Projection root Column#33, Column#34, Column#35, Column#14, Column#15, Column#16
|
||||
│ └─HashAgg root group by:explain_easy.test01.region_id, explain_easy.test01.show_date, explain_easy.test01.stat_date, funcs:firstrow(explain_easy.test01.stat_date)->Column#33, funcs:firstrow(explain_easy.test01.show_date)->Column#34, funcs:firstrow(explain_easy.test01.region_id)->Column#35, funcs:firstrow(explain_easy.test01.stat_date)->Column#14, funcs:firstrow(explain_easy.test01.show_date)->Column#15, funcs:firstrow(explain_easy.test01.region_id)->Column#16, funcs:count(Column#46)->Column#39
|
||||
│ └─Projection root Column, Column, Column, Column, Column, Column
|
||||
│ └─HashAgg root group by:explain_easy.test01.region_id, explain_easy.test01.show_date, explain_easy.test01.stat_date, funcs:firstrow(explain_easy.test01.stat_date)->Column, funcs:firstrow(explain_easy.test01.show_date)->Column, funcs:firstrow(explain_easy.test01.region_id)->Column, funcs:firstrow(explain_easy.test01.stat_date)->Column, funcs:firstrow(explain_easy.test01.show_date)->Column, funcs:firstrow(explain_easy.test01.region_id)->Column, funcs:count(Column)->Column
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.test01.region_id, explain_easy.test01.show_date, explain_easy.test01.stat_date, funcs:count(1)->Column#46
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.test01.region_id, explain_easy.test01.show_date, explain_easy.test01.stat_date, funcs:count(1)->Column
|
||||
│ └─Selection cop[tikv] eq(explain_easy.test01.period, 1), ge(explain_easy.test01.stat_date, 20191202), gt(cast(explain_easy.test01.registration_num, decimal(20,0) BINARY), 0), le(explain_easy.test01.stat_date, 20191202)
|
||||
│ └─TableFullScan cop[tikv] table:test01 keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:TableRangeScan
|
||||
└─TableRangeScan cop[tikv] table:b range: decided by [Column#16], keep order:false, stats:pseudo
|
||||
└─TableRangeScan cop[tikv] table:b range: decided by [Column], keep order:false, stats:pseudo
|
||||
drop table if exists t;
|
||||
create table t(a int, nb int not null, nc int not null);
|
||||
explain format = 'plan_tree' select ifnull(a, 0) from t;
|
||||
id task access object operator info
|
||||
Projection root ifnull(explain_easy.t.a, 0)->Column#5
|
||||
Projection root ifnull(explain_easy.t.a, 0)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select ifnull(nb, 0) from t;
|
||||
id task access object operator info
|
||||
Projection root cast(explain_easy.t.nb, bigint BINARY)->Column#5
|
||||
Projection root cast(explain_easy.t.nb, bigint BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select ifnull(nb, 0), ifnull(nc, 0) from t;
|
||||
id task access object operator info
|
||||
Projection root cast(explain_easy.t.nb, bigint BINARY)->Column#5, cast(explain_easy.t.nc, bigint BINARY)->Column#6
|
||||
Projection root cast(explain_easy.t.nb, bigint BINARY)->Column, cast(explain_easy.t.nc, bigint BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select ifnull(a, 0), ifnull(nb, 0) from t;
|
||||
id task access object operator info
|
||||
Projection root ifnull(explain_easy.t.a, 0)->Column#5, cast(explain_easy.t.nb, bigint BINARY)->Column#6
|
||||
Projection root ifnull(explain_easy.t.a, 0)->Column, cast(explain_easy.t.nb, bigint BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select ifnull(nb, 0), ifnull(nb, 0) from t;
|
||||
id task access object operator info
|
||||
Projection root cast(explain_easy.t.nb, bigint BINARY)->Column#5, cast(explain_easy.t.nb, bigint BINARY)->Column#6
|
||||
Projection root cast(explain_easy.t.nb, bigint BINARY)->Column, cast(explain_easy.t.nb, bigint BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select 1+ifnull(nb, 0) from t;
|
||||
id task access object operator info
|
||||
Projection root plus(1, cast(explain_easy.t.nb, bigint BINARY))->Column#5
|
||||
Projection root plus(1, cast(explain_easy.t.nb, bigint BINARY))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select 1+ifnull(a, 0) from t;
|
||||
id task access object operator info
|
||||
Projection root plus(1, ifnull(explain_easy.t.a, 0))->Column#5
|
||||
Projection root plus(1, ifnull(explain_easy.t.a, 0))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select 1+ifnull(nb, 0) from t where nb=1;
|
||||
id task access object operator info
|
||||
Projection root plus(1, cast(explain_easy.t.nb, bigint BINARY))->Column#5
|
||||
Projection root plus(1, cast(explain_easy.t.nb, bigint BINARY))->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] eq(explain_easy.t.nb, 1)
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -593,16 +593,16 @@ HashJoin root inner join, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)]
|
||||
└─TableFullScan cop[tikv] table:tb keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select ifnull(t.nc, 1) in (select count(*) from t s , t t1 where s.a = t.a and s.a = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#22
|
||||
└─Apply root left outer semi join, left side:Projection, equal:[eq(Column#23, Column#21)]
|
||||
├─Projection(Build) root explain_easy.t.a, cast(explain_easy.t.nc, bigint BINARY)->Column#23
|
||||
Projection root Column
|
||||
└─Apply root left outer semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
├─Projection(Build) root explain_easy.t.a, cast(explain_easy.t.nc, bigint BINARY)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root funcs:count(Column#25)->Column#21
|
||||
└─HashAgg(Probe) root funcs:count(Column)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.a, explain_easy.t.a)]
|
||||
├─HashAgg(Build) root group by:explain_easy.t.a, funcs:count(Column#26)->Column#25, funcs:firstrow(explain_easy.t.a)->explain_easy.t.a
|
||||
├─HashAgg(Build) root group by:explain_easy.t.a, funcs:count(Column)->Column, funcs:firstrow(explain_easy.t.a)->explain_easy.t.a
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.t.a, funcs:count(1)->Column#26
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.t.a, funcs:count(1)->Column
|
||||
│ └─Selection cop[tikv] eq(explain_easy.t.a, explain_easy.t.a), not(isnull(explain_easy.t.a))
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:Selection
|
||||
@ -627,16 +627,16 @@ HashJoin root right outer join, left side:TableReader, equal:[eq(explain_easy.t
|
||||
└─TableFullScan cop[tikv] table:tb keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select ifnull(t.a, 1) in (select count(*) from t s , t t1 where s.a = t.a and s.a = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#22
|
||||
└─Apply root left outer semi join, left side:Projection, equal:[eq(Column#23, Column#21)]
|
||||
├─Projection(Build) root explain_easy.t.a, ifnull(explain_easy.t.a, 1)->Column#23
|
||||
Projection root Column
|
||||
└─Apply root left outer semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
├─Projection(Build) root explain_easy.t.a, ifnull(explain_easy.t.a, 1)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root funcs:count(Column#25)->Column#21
|
||||
└─HashAgg(Probe) root funcs:count(Column)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.a, explain_easy.t.a)]
|
||||
├─HashAgg(Build) root group by:explain_easy.t.a, funcs:count(Column#26)->Column#25, funcs:firstrow(explain_easy.t.a)->explain_easy.t.a
|
||||
├─HashAgg(Build) root group by:explain_easy.t.a, funcs:count(Column)->Column, funcs:firstrow(explain_easy.t.a)->explain_easy.t.a
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.t.a, funcs:count(1)->Column#26
|
||||
│ └─HashAgg cop[tikv] group by:explain_easy.t.a, funcs:count(1)->Column
|
||||
│ └─Selection cop[tikv] eq(explain_easy.t.a, explain_easy.t.a), not(isnull(explain_easy.t.a))
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:Selection
|
||||
@ -672,7 +672,7 @@ Sort root explain_easy.t.a, explain_easy.t.b
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#6
|
||||
└─MaxOneRow root
|
||||
└─Projection root 2->Column#5
|
||||
└─Projection root 2->Column
|
||||
└─TableDual root rows:1
|
||||
explain format = 'plan_tree' select * from (select * from t order by c) t order by a, b;
|
||||
id task access object operator info
|
||||
@ -683,21 +683,21 @@ drop table if exists t;
|
||||
set @@session.tidb_opt_insubq_to_join_and_agg=1;
|
||||
explain format = 'plan_tree' SELECT 0 AS a FROM dual UNION SELECT 1 AS a FROM dual ORDER BY a;
|
||||
id task access object operator info
|
||||
Sort root Column#3
|
||||
└─HashAgg root group by:Column#3, funcs:firstrow(Column#6)->Column#3
|
||||
Sort root Column
|
||||
└─HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─HashAgg root group by:1, funcs:firstrow(0)->Column#6, funcs:firstrow(0)->Column#3
|
||||
├─HashAgg root group by:1, funcs:firstrow(0)->Column, funcs:firstrow(0)->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─HashAgg root group by:1, funcs:firstrow(1)->Column#6, funcs:firstrow(1)->Column#3
|
||||
└─HashAgg root group by:1, funcs:firstrow(1)->Column, funcs:firstrow(1)->Column
|
||||
└─TableDual root rows:1
|
||||
explain format = 'plan_tree' SELECT 0 AS a FROM dual UNION (SELECT 1 AS a FROM dual ORDER BY a);
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#6)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─HashAgg root group by:1, funcs:firstrow(0)->Column#6, funcs:firstrow(0)->Column#3
|
||||
├─HashAgg root group by:1, funcs:firstrow(0)->Column, funcs:firstrow(0)->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─StreamAgg root group by:Column#2, funcs:firstrow(Column#2)->Column#6, funcs:firstrow(Column#2)->Column#3
|
||||
└─Projection root 1->Column#2
|
||||
└─StreamAgg root group by:Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Projection root 1->Column
|
||||
└─TableDual root rows:1
|
||||
create table t (i int key, j int, unique key (i, j));
|
||||
begin;
|
||||
@ -762,7 +762,7 @@ create table t(a int, b int);
|
||||
explain format = 'plan_tree' select a, b from (select a, b, avg(b) over (partition by a)as avg_b from t) as tt where a > 10 and b < 10 and a > avg_b;
|
||||
id task access object operator info
|
||||
Projection root explain_easy.t.a, explain_easy.t.b
|
||||
└─Selection root gt(cast(explain_easy.t.a, decimal(10,0) BINARY), Column#5), lt(explain_easy.t.b, 10)
|
||||
└─Selection root gt(cast(explain_easy.t.a, decimal(10,0) BINARY), Column), lt(explain_easy.t.b, 10)
|
||||
└─Window root avg(cast(explain_easy.t.b, decimal(10,0) BINARY))->Column#5 over(partition by explain_easy.t.a)
|
||||
└─Sort root explain_easy.t.a
|
||||
└─TableReader root data:Selection
|
||||
@ -807,63 +807,63 @@ create table t(a int, b int);
|
||||
analyze table t;
|
||||
explain format = 'plan_tree' select (select count(n.a) from t) from t n;
|
||||
id task access object operator info
|
||||
Projection root Column#11->Column#12
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:count(explain_easy.t.a)->Column#7
|
||||
├─StreamAgg(Build) root funcs:count(explain_easy.t.a)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:n keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#7->Column#11
|
||||
└─Projection root Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select (select sum((select count(a)))) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#7->Column#8
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:count(explain_easy.t.a)->Column#5
|
||||
├─StreamAgg(Build) root funcs:count(explain_easy.t.a)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) root funcs:sum(Column#12)->Column#7
|
||||
└─HashAgg(Probe) root funcs:sum(Column)->Column
|
||||
└─HashJoin root CARTESIAN left outer join, left side:TableDual
|
||||
├─HashAgg(Build) root group by:1, funcs:sum(Column#14)->Column#12
|
||||
│ └─Projection root cast(Column#6, decimal(20,0) BINARY)->Column#14
|
||||
├─HashAgg(Build) root group by:1, funcs:sum(Column)->Column
|
||||
│ └─Projection root cast(Column, decimal(20,0) BINARY)->Column
|
||||
│ └─MaxOneRow root
|
||||
│ └─Projection root Column#5->Column#6
|
||||
│ └─Projection root Column
|
||||
│ └─TableDual root rows:1
|
||||
└─TableDual(Probe) root rows:1
|
||||
explain format = 'plan_tree' select count(a) from t group by b order by (select count(a));
|
||||
id task access object operator info
|
||||
Projection root Column#5->Column#7
|
||||
└─Sort root Column#6
|
||||
Projection root Column
|
||||
└─Sort root Column
|
||||
└─Apply root CARTESIAN left outer join, left side:HashAgg
|
||||
├─HashAgg(Build) root group by:explain_easy.t.b, funcs:count(explain_easy.t.a)->Column#5
|
||||
├─HashAgg(Build) root group by:explain_easy.t.b, funcs:count(explain_easy.t.a)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root Column#5->Column#6
|
||||
└─Projection(Probe) root Column
|
||||
└─TableDual root rows:1
|
||||
explain format = 'plan_tree' select (select sum(count(a))) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#5->Column#6
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:count(explain_easy.t.a)->Column#4
|
||||
├─StreamAgg(Build) root funcs:count(explain_easy.t.a)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:sum(Column#7)->Column#5
|
||||
└─Projection root cast(Column#4, decimal(20,0) BINARY)->Column#7
|
||||
└─StreamAgg(Probe) root funcs:sum(Column)->Column
|
||||
└─Projection root cast(Column, decimal(20,0) BINARY)->Column
|
||||
└─TableDual root rows:1
|
||||
explain format = 'plan_tree' select sum(a), (select sum(a)), count(a) from t group by b order by (select count(a));
|
||||
id task access object operator info
|
||||
Projection root Column#5->Column#9, Column#7->Column#10, Column#6->Column#11
|
||||
└─Sort root Column#8
|
||||
Projection root Column, Column, Column
|
||||
└─Sort root Column
|
||||
└─Apply root CARTESIAN left outer join, left side:Apply
|
||||
├─Apply(Build) root CARTESIAN left outer join, left side:HashAgg
|
||||
│ ├─HashAgg(Build) root group by:Column#19, funcs:sum(Column#17)->Column#5, funcs:count(Column#18)->Column#6
|
||||
│ │ └─Projection root cast(explain_easy.t.a, decimal(10,0) BINARY)->Column#17, explain_easy.t.a->Column#18, explain_easy.t.b->Column#19
|
||||
│ ├─HashAgg(Build) root group by:Column, funcs:sum(Column)->Column, funcs:count(Column)->Column
|
||||
│ │ └─Projection root cast(explain_easy.t.a, decimal(10,0) BINARY)->Column, explain_easy.t.a->Column, explain_easy.t.b->Column
|
||||
│ │ └─TableReader root data:TableFullScan
|
||||
│ │ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
│ └─Projection(Probe) root Column#5->Column#7
|
||||
│ └─Projection(Probe) root Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Probe) root Column#6->Column#8
|
||||
└─Projection(Probe) root Column
|
||||
└─TableDual root rows:1
|
||||
drop table if exists t;
|
||||
create table t(a tinyint, b smallint, c mediumint, d int, e bigint);
|
||||
@ -871,8 +871,8 @@ insert into mysql.opt_rule_blacklist VALUES("aggregation_push_down");
|
||||
admin reload opt_rule_blacklist;
|
||||
explain format = 'plan_tree' select sum(t1.a) from t t1 join t t2 on t1.a=t2.a;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.a, decimal(3,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.a, decimal(3,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.a, explain_easy.t.a)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.a))
|
||||
@ -882,8 +882,8 @@ StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(t1.b) from t t1 join t t2 on t1.b=t2.b;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.b, decimal(5,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.b, decimal(5,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.b, explain_easy.t.b)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.b))
|
||||
@ -893,8 +893,8 @@ StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(t1.c) from t t1 join t t2 on t1.c=t2.c;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.c, decimal(8,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.c, decimal(8,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.c, explain_easy.t.c)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.c))
|
||||
@ -904,8 +904,8 @@ StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(t1.d) from t t1 join t t2 on t1.d=t2.d;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.d, decimal(10,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.d, decimal(10,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.d, explain_easy.t.d)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.d))
|
||||
@ -915,8 +915,8 @@ StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(t1.e) from t t1 join t t2 on t1.e=t2.e;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.e, decimal(20,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.e, decimal(20,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.e, explain_easy.t.e)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.e))
|
||||
@ -926,8 +926,8 @@ StreamAgg root funcs:sum(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select avg(t1.a) from t t1 join t t2 on t1.a=t2.a;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.a, decimal(3,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:avg(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.a, decimal(3,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.a, explain_easy.t.a)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.a))
|
||||
@ -937,8 +937,8 @@ StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select avg(t1.b) from t t1 join t t2 on t1.b=t2.b;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.b, decimal(5,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:avg(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.b, decimal(5,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.b, explain_easy.t.b)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.b))
|
||||
@ -948,8 +948,8 @@ StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select avg(t1.c) from t t1 join t t2 on t1.c=t2.c;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.c, decimal(8,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:avg(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.c, decimal(8,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.c, explain_easy.t.c)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.c))
|
||||
@ -959,8 +959,8 @@ StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select avg(t1.d) from t t1 join t t2 on t1.d=t2.d;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.d, decimal(10,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:avg(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.d, decimal(10,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.d, explain_easy.t.d)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.d))
|
||||
@ -970,8 +970,8 @@ StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select avg(t1.e) from t t1 join t t2 on t1.e=t2.e;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:avg(Column#14)->Column#13
|
||||
└─Projection root cast(explain_easy.t.e, decimal(20,0) BINARY)->Column#14
|
||||
StreamAgg root funcs:avg(Column)->Column
|
||||
└─Projection root cast(explain_easy.t.e, decimal(20,0) BINARY)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy.t.e, explain_easy.t.e)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy.t.e))
|
||||
|
||||
@ -15,12 +15,12 @@ set @@session.tidb_hashagg_partial_concurrency = 1;
|
||||
set @@session.tidb_hashagg_final_concurrency = 1;
|
||||
explain format = 'plan_tree' select * from t3 where exists (select s.a from t3 s having sum(s.a) = t3.a );
|
||||
id task access object operator info
|
||||
HashJoin root semi join, left side:Projection, equal:[eq(Column#13, Column#11)]
|
||||
├─StreamAgg(Build) root funcs:sum(Column#16)->Column#11
|
||||
HashJoin root semi join, left side:Projection, equal:[eq(Column, Column)]
|
||||
├─StreamAgg(Build) root funcs:sum(Column)->Column
|
||||
│ └─TableReader root data:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] funcs:sum(explain_easy_stats.t3.a)->Column#16
|
||||
│ └─StreamAgg cop[tikv] funcs:sum(explain_easy_stats.t3.a)->Column
|
||||
│ └─TableFullScan cop[tikv] table:s keep order:false
|
||||
└─Projection(Probe) root explain_easy_stats.t3.a, explain_easy_stats.t3.b, explain_easy_stats.t3.c, explain_easy_stats.t3.d, cast(explain_easy_stats.t3.a, decimal(20,0) BINARY)->Column#13
|
||||
└─Projection(Probe) root explain_easy_stats.t3.a, explain_easy_stats.t3.b, explain_easy_stats.t3.c, explain_easy_stats.t3.d, cast(explain_easy_stats.t3.a, decimal(20,0) BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
explain format = 'plan_tree' select * from t1;
|
||||
@ -64,9 +64,9 @@ Delete root N/A
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false, stats:partial[c2:missing]
|
||||
explain format = 'plan_tree' select count(b.c2) from t1 a, t2 b where a.c1 = b.c2 group by a.c1;
|
||||
id task access object operator info
|
||||
Projection root Column#7
|
||||
Projection root Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_easy_stats.t1.c1, explain_easy_stats.t2.c2)]
|
||||
├─HashAgg(Build) root group by:explain_easy_stats.t2.c2, funcs:count(explain_easy_stats.t2.c2)->Column#8, funcs:firstrow(explain_easy_stats.t2.c2)->explain_easy_stats.t2.c2
|
||||
├─HashAgg(Build) root group by:explain_easy_stats.t2.c2, funcs:count(explain_easy_stats.t2.c2)->Column, funcs:firstrow(explain_easy_stats.t2.c2)->explain_easy_stats.t2.c2
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(explain_easy_stats.t2.c2))
|
||||
│ └─TableFullScan cop[tikv] table:b keep order:false
|
||||
@ -102,7 +102,7 @@ id task access object operator info
|
||||
MemTableScan root table:COLUMNS
|
||||
explain format = 'plan_tree' select c2 = (select c2 from t2 where t1.c1 = t2.c1 order by c1 limit 1) from t1;
|
||||
id task access object operator info
|
||||
Projection root eq(explain_easy_stats.t1.c2, explain_easy_stats.t2.c2)->Column#11
|
||||
Projection root eq(explain_easy_stats.t1.c2, explain_easy_stats.t2.c2)->Column
|
||||
└─Apply root CARTESIAN left outer join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false
|
||||
|
||||
@ -399,9 +399,9 @@ insert into tbl1 (id) select null; insert into tbl1 (id) select null from tbl1;
|
||||
update tbl1 set s=id%32;
|
||||
explain format = 'plan_tree' select count(*) from tbl1 where md5(s) like '02e74f10e0327ad868d138f2b4fdd6f%';
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#6)->Column#4
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#6
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] like(md5(cast(explain_generate_column_substitute.tbl1.s, var_string(20))), "02e74f10e0327ad868d138f2b4fdd6f%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:tbl1, index:expression_index(md5(`s`)) range:["02e74f10e0327ad868d138f2b4fdd6f","02e74f10e0327ad868d138f2b4fdd6g"), keep order:false, stats:pseudo
|
||||
select count(*) from tbl1 use index() where md5(s) like '02e74f10e0327ad868d138f2b4fdd6f%';
|
||||
@ -425,24 +425,24 @@ Projection root explain_generate_column_substitute.t.a, explain_generate_column
|
||||
└─TableRowIDScan(Probe) cop[tikv] table:t keep order:false
|
||||
explain format = 'plan_tree' select count(upper(b)) from t group by upper(b);
|
||||
id task access object operator info
|
||||
StreamAgg root group by:upper(explain_generate_column_substitute.t.b), funcs:count(upper(explain_generate_column_substitute.t.b))->Column#7
|
||||
StreamAgg root group by:upper(explain_generate_column_substitute.t.b), funcs:count(upper(explain_generate_column_substitute.t.b))->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:expression_index_2(upper(`b`)) keep order:true
|
||||
explain format = 'plan_tree' select max(upper(b)) from t group by upper(b);
|
||||
id task access object operator info
|
||||
StreamAgg root group by:upper(explain_generate_column_substitute.t.b), funcs:max(upper(explain_generate_column_substitute.t.b))->Column#7
|
||||
StreamAgg root group by:upper(explain_generate_column_substitute.t.b), funcs:max(upper(explain_generate_column_substitute.t.b))->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:expression_index_2(upper(`b`)) keep order:true
|
||||
explain format = 'plan_tree' select count(upper(b)) from t use index() group by upper(b);
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#10, funcs:count(Column#10)->Column#7
|
||||
└─Projection root upper(explain_generate_column_substitute.t.b)->Column#10
|
||||
HashAgg root group by:Column, funcs:count(Column)->Column
|
||||
└─Projection root upper(explain_generate_column_substitute.t.b)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false
|
||||
explain format = 'plan_tree' select max(upper(b)) from t use index() group by upper(b);
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#10, funcs:max(Column#10)->Column#7
|
||||
└─Projection root upper(explain_generate_column_substitute.t.b)->Column#10
|
||||
HashAgg root group by:Column, funcs:max(Column)->Column
|
||||
└─Projection root upper(explain_generate_column_substitute.t.b)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false
|
||||
drop table if exists t;
|
||||
|
||||
@ -6,7 +6,7 @@ create table lo(a int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (a)) ENGINE=InnoD
|
||||
load stats 's/explain_join_stats_lo.json';
|
||||
explain format = 'plan_tree' select count(*) from e, lo where lo.a=e.a and e.b=22336;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#5
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─HashJoin root inner join, equal:[eq(explain_join_stats.lo.a, explain_join_stats.e.a)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:lo keep order:false
|
||||
@ -16,7 +16,7 @@ HashAgg root funcs:count(1)->Column#5
|
||||
└─TableRowIDScan cop[tikv] table:e keep order:false
|
||||
explain format = 'plan_tree' select /*+ TIDB_INLJ(e) */ count(*) from e, lo where lo.a=e.a and e.b=22336;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#5
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─IndexJoin root inner join, inner:IndexLookUp, outer key:explain_join_stats.lo.a, inner key:explain_join_stats.e.a, equal cond:eq(explain_join_stats.lo.a, explain_join_stats.e.a)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:lo keep order:false
|
||||
|
||||
@ -70,7 +70,7 @@ Projection root explain_shard_index.test5.id, explain_shard_index.test5.a, expl
|
||||
└─Batch_Point_Get root table:test5, index:uk_expr(tidb_shard(`a`), a, b) keep order:false, desc:false
|
||||
explain format='plan_tree' select a+b from test5 where (a, b) in ((100, 100), (200, 200));
|
||||
id task access object operator info
|
||||
Projection root plus(explain_shard_index.test5.a, explain_shard_index.test5.b)->Column#5
|
||||
Projection root plus(explain_shard_index.test5.a, explain_shard_index.test5.b)->Column
|
||||
└─Batch_Point_Get root table:test5, index:uk_expr(tidb_shard(`a`), a, b) keep order:false, desc:false
|
||||
explain format='plan_tree' SELECT * FROM test3 WHERE a IN (100);
|
||||
id task access object operator info
|
||||
|
||||
@ -1739,10 +1739,10 @@ b
|
||||
c
|
||||
explain format="plan_tree" select v, count(*) from t_bin group by v;
|
||||
id task access object operator info
|
||||
Projection root expression__charset_and_collation.t_bin.v, Column#4
|
||||
└─HashAgg root group by:expression__charset_and_collation.t_bin.v, funcs:count(Column#5)->Column#4, funcs:firstrow(expression__charset_and_collation.t_bin.v)->expression__charset_and_collation.t_bin.v
|
||||
Projection root expression__charset_and_collation.t_bin.v, Column
|
||||
└─HashAgg root group by:expression__charset_and_collation.t_bin.v, funcs:count(Column)->Column, funcs:firstrow(expression__charset_and_collation.t_bin.v)->expression__charset_and_collation.t_bin.v
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:expression__charset_and_collation.t_bin.v, funcs:count(1)->Column#5
|
||||
└─HashAgg cop[tikv] group by:expression__charset_and_collation.t_bin.v, funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:t_bin keep order:false, stats:pseudo
|
||||
select v, count(*) from t_bin group by v;
|
||||
v count(*)
|
||||
@ -1755,10 +1755,10 @@ c 1
|
||||
á 1
|
||||
explain format="plan_tree" select v, count(*) from t group by v;
|
||||
id task access object operator info
|
||||
Projection root expression__charset_and_collation.t.v, Column#4
|
||||
└─HashAgg root group by:expression__charset_and_collation.t.v, funcs:count(Column#5)->Column#4, funcs:firstrow(expression__charset_and_collation.t.v)->expression__charset_and_collation.t.v
|
||||
Projection root expression__charset_and_collation.t.v, Column
|
||||
└─HashAgg root group by:expression__charset_and_collation.t.v, funcs:count(Column)->Column, funcs:firstrow(expression__charset_and_collation.t.v)->expression__charset_and_collation.t.v
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:expression__charset_and_collation.t.v, funcs:count(1)->Column#5
|
||||
└─HashAgg cop[tikv] group by:expression__charset_and_collation.t.v, funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select v, count(*) from t group by v;
|
||||
v count(*)
|
||||
@ -1865,10 +1865,10 @@ b
|
||||
c
|
||||
explain format="plan_tree" select /*+ STREAM_AGG() */ v, count(*) from t_bin group by v;
|
||||
id task access object operator info
|
||||
Projection root expression__charset_and_collation.t_bin.v, Column#4
|
||||
└─StreamAgg root group by:expression__charset_and_collation.t_bin.v, funcs:count(Column#5)->Column#4, funcs:firstrow(expression__charset_and_collation.t_bin.v)->expression__charset_and_collation.t_bin.v
|
||||
Projection root expression__charset_and_collation.t_bin.v, Column
|
||||
└─StreamAgg root group by:expression__charset_and_collation.t_bin.v, funcs:count(Column)->Column, funcs:firstrow(expression__charset_and_collation.t_bin.v)->expression__charset_and_collation.t_bin.v
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:expression__charset_and_collation.t_bin.v, funcs:count(1)->Column#5
|
||||
└─StreamAgg cop[tikv] group by:expression__charset_and_collation.t_bin.v, funcs:count(1)->Column
|
||||
└─IndexFullScan cop[tikv] table:t_bin, index:v(v) keep order:true, stats:pseudo
|
||||
select /*+ STREAM_AGG() */ v, count(*) from t_bin group by v;
|
||||
v count(*)
|
||||
@ -1881,10 +1881,10 @@ c 1
|
||||
á 1
|
||||
explain format="plan_tree" select /*+ STREAM_AGG() */ v, count(*) from t group by v;
|
||||
id task access object operator info
|
||||
Projection root expression__charset_and_collation.t.v, Column#4
|
||||
└─StreamAgg root group by:expression__charset_and_collation.t.v, funcs:count(Column#5)->Column#4, funcs:firstrow(expression__charset_and_collation.t.v)->expression__charset_and_collation.t.v
|
||||
Projection root expression__charset_and_collation.t.v, Column
|
||||
└─StreamAgg root group by:expression__charset_and_collation.t.v, funcs:count(Column)->Column, funcs:firstrow(expression__charset_and_collation.t.v)->expression__charset_and_collation.t.v
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:expression__charset_and_collation.t.v, funcs:count(1)->Column#5
|
||||
└─StreamAgg cop[tikv] group by:expression__charset_and_collation.t.v, funcs:count(1)->Column
|
||||
└─IndexFullScan cop[tikv] table:t, index:v(v) keep order:true, stats:pseudo
|
||||
select /*+ STREAM_AGG() */ v, count(*) from t group by v;
|
||||
v count(*)
|
||||
|
||||
@ -186,7 +186,7 @@ HashJoin root CARTESIAN left outer join, left side:TableReader
|
||||
explain format = 'plan_tree' select * from t1 where t1.b > 1 or t1.b in (select b from t2);
|
||||
id task access object operator info
|
||||
Projection root expression__explain.t1.id, expression__explain.t1.a, expression__explain.t1.b
|
||||
└─Selection root or(gt(expression__explain.t1.b, 1), Column#7)
|
||||
└─Selection root or(gt(expression__explain.t1.b, 1), Column)
|
||||
└─HashJoin root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(expression__explain.t1.b, expression__explain.t2.b)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
|
||||
@ -532,7 +532,7 @@ insert into t1 value (3,1,3,'a');
|
||||
insert into t2 value (1,2,date'2020-05-08');
|
||||
explain format = 'plan_tree' SELECT /*+ INL_MERGE_JOIN(t1,t2) */ COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id = t2.order_id WHERE t1.ns = 'a' AND t1.org_id IN (1) AND t1.status IN (2,6,10) AND timestampdiff(month, t2.begin_time, date'2020-05-06') = 0;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#10
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─IndexJoin root inner join, inner:IndexLookUp, outer key:expression__issues.t1.id, inner key:expression__issues.t2.order_id, equal cond:eq(expression__issues.t1.id, expression__issues.t2.order_id)
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] eq(cast(expression__issues.t1.org_id, double BINARY), 1), eq(expression__issues.t1.ns, "a"), in(expression__issues.t1.status, 2, 6, 10)
|
||||
@ -3183,9 +3183,9 @@ create table if not exists test.ast (i varchar(20));
|
||||
create table if not exists test.acc (j varchar(20), k varchar(20), l varchar(20), m varchar(20));
|
||||
explain format='plan_tree' with t as(select i, (case when b.j = '20001' then b.l else b.k end) an from test.ast a inner join test.acc b on (a.i = b.m) and a.i = 'astp2019121731703151'), t1 as (select i, group_concat(an order by an separator '; ') an from t group by i) select * from t1;
|
||||
id task access object operator info
|
||||
Projection root test.ast.i, Column#32
|
||||
└─HashAgg root group by:Column#35, funcs:group_concat(Column#34 order by Column#34 separator "; ")->Column#32, funcs:firstrow(Column#35)->test.ast.i
|
||||
└─Projection root case(eq(test.acc.j, 20001), test.acc.l, test.acc.k)->Column#34, test.ast.i->Column#35
|
||||
Projection root test.ast.i, Column
|
||||
└─HashAgg root group by:Column, funcs:group_concat(Column order by Column separator "; ")->Column, funcs:firstrow(Column)->test.ast.i
|
||||
└─Projection root case(eq(test.acc.j, 20001), test.acc.l, test.acc.k)->Column, test.ast.i->Column
|
||||
└─HashJoin root inner join, equal:[eq(test.ast.i, test.acc.m)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] eq(test.ast.i, "astp2019121731703151")
|
||||
|
||||
@ -335,7 +335,7 @@ create table t(a bigint, b bigint);
|
||||
insert into t values(1, 1);
|
||||
explain format='plan_tree' select ifnull("aaaa", a) from t;
|
||||
id task access object operator info
|
||||
Projection root aaaa->Column#4
|
||||
Projection root aaaa->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select ifnull("aaaa", a) from t;
|
||||
|
||||
@ -107,7 +107,7 @@ TableReader root data:Selection
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#6
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:max(expression__time.t.b)->Column#5
|
||||
└─StreamAgg root funcs:max(expression__time.t.b)->Column
|
||||
└─TopN root expression__time.t.b:desc, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] expression__time.t.b:desc, offset:0, count:1
|
||||
|
||||
@ -26,7 +26,7 @@ Projection root expression__vitess_hash.t.id
|
||||
└─TableRowIDScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select hex(vitess_hash(1123)) from t;
|
||||
id task access object operator info
|
||||
Projection root 31B565D41BDF8CA->Column#7
|
||||
Projection root 31B565D41BDF8CA->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:t_vitess_shard(vitess_hash(`customer_id`) >> 56) keep order:false, stats:pseudo
|
||||
drop table if exists t_int;
|
||||
|
||||
@ -211,39 +211,39 @@ index (c));
|
||||
INSERT INTO t1 (a) VALUES (2), (1), (1), (3), (NULL);
|
||||
EXPLAIN format = 'plan_tree' SELECT sum(a) FROM t1 GROUP BY b;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#7, funcs:sum(Column#6)->Column#5
|
||||
└─Projection root cast(generated_columns.t1.a, decimal(10,0) BINARY)->Column#6, generated_columns.t1.b->Column#7
|
||||
HashAgg root group by:Column, funcs:sum(Column)->Column
|
||||
└─Projection root cast(generated_columns.t1.a, decimal(10,0) BINARY)->Column, generated_columns.t1.b->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
EXPLAIN format = 'plan_tree' SELECT sum(a) FROM t1 GROUP BY c;
|
||||
id task access object operator info
|
||||
HashAgg root group by:generated_columns.t1.c, funcs:sum(Column#6)->Column#5
|
||||
HashAgg root group by:generated_columns.t1.c, funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:generated_columns.t1.c, funcs:sum(generated_columns.t1.a)->Column#6
|
||||
└─HashAgg cop[tikv] group by:generated_columns.t1.c, funcs:sum(generated_columns.t1.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
EXPLAIN format = 'plan_tree' SELECT sum(b) FROM t1 GROUP BY a;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#7, funcs:sum(Column#6)->Column#5
|
||||
└─Projection root cast(generated_columns.t1.b, decimal(10,0) BINARY)->Column#6, generated_columns.t1.a->Column#7
|
||||
HashAgg root group by:Column, funcs:sum(Column)->Column
|
||||
└─Projection root cast(generated_columns.t1.b, decimal(10,0) BINARY)->Column, generated_columns.t1.a->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
EXPLAIN format = 'plan_tree' SELECT sum(b) FROM t1 GROUP BY c;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#9, funcs:sum(Column#8)->Column#5
|
||||
└─Projection root cast(generated_columns.t1.b, decimal(10,0) BINARY)->Column#8, generated_columns.t1.c->Column#9
|
||||
HashAgg root group by:Column, funcs:sum(Column)->Column
|
||||
└─Projection root cast(generated_columns.t1.b, decimal(10,0) BINARY)->Column, generated_columns.t1.c->Column
|
||||
└─Projection root generated_columns.t1.b, generated_columns.t1.c
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
EXPLAIN format = 'plan_tree' SELECT sum(c) FROM t1 GROUP BY a;
|
||||
id task access object operator info
|
||||
HashAgg root group by:generated_columns.t1.a, funcs:sum(Column#6)->Column#5
|
||||
HashAgg root group by:generated_columns.t1.a, funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:generated_columns.t1.a, funcs:sum(generated_columns.t1.c)->Column#6
|
||||
└─HashAgg cop[tikv] group by:generated_columns.t1.a, funcs:sum(generated_columns.t1.c)->Column
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
EXPLAIN format = 'plan_tree' SELECT sum(c) FROM t1 GROUP BY b;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#7, funcs:sum(Column#6)->Column#5
|
||||
└─Projection root cast(generated_columns.t1.c, decimal(10,0) BINARY)->Column#6, generated_columns.t1.b->Column#7
|
||||
HashAgg root group by:Column, funcs:sum(Column)->Column
|
||||
└─Projection root cast(generated_columns.t1.c, decimal(10,0) BINARY)->Column, generated_columns.t1.b->Column
|
||||
└─Projection root generated_columns.t1.b, generated_columns.t1.c
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
|
||||
@ -6,18 +6,18 @@ partition p2 values less than (10));
|
||||
insert into p values (1,3), (2,3), (3,4), (4,4), (5,6), (7,9), (8,9);
|
||||
explain format='plan_tree' select count(*), max(id), min(id) from p use index(idx);
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#9)->Column#4, funcs:max(Column#10)->Column#5, funcs:min(Column#11)->Column#6
|
||||
HashAgg root funcs:count(Column)->Column, funcs:max(Column)->Column, funcs:min(Column)->Column
|
||||
└─IndexReader root partition:all index:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column#9, funcs:max(globalindex__aggregate.p.id)->Column#10, funcs:min(globalindex__aggregate.p.id)->Column#11
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column, funcs:max(globalindex__aggregate.p.id)->Column, funcs:min(globalindex__aggregate.p.id)->Column
|
||||
└─IndexFullScan cop[tikv] table:p, index:idx(id) keep order:false, stats:pseudo
|
||||
select count(*), max(id), min(id) from p use index(idx);
|
||||
count(*) max(id) min(id)
|
||||
7 8 1
|
||||
explain format='plan_tree' select count(*), max(id), min(id) from p partition(p0) use index(idx);
|
||||
id task access object operator info
|
||||
HashAgg root NULL funcs:count(Column#9)->Column#4, funcs:max(Column#10)->Column#5, funcs:min(Column#11)->Column#6
|
||||
HashAgg root NULL funcs:count(Column)->Column, funcs:max(Column)->Column, funcs:min(Column)->Column
|
||||
└─IndexReader root partition:p0 index:HashAgg
|
||||
└─HashAgg cop[tikv] NULL funcs:count(1)->Column#9, funcs:max(globalindex__aggregate.p.id)->Column#10, funcs:min(globalindex__aggregate.p.id)->Column#11
|
||||
└─HashAgg cop[tikv] NULL funcs:count(1)->Column, funcs:max(globalindex__aggregate.p.id)->Column, funcs:min(globalindex__aggregate.p.id)->Column
|
||||
└─Selection cop[tikv] NULL in(_tidb_tid, tid0)
|
||||
└─IndexFullScan cop[tikv] table:p, index:idx(id) keep order:false, stats:pseudo
|
||||
select count(*), max(id), min(id) from p partition(p0) use index(idx);
|
||||
@ -25,10 +25,10 @@ count(*) max(id) min(id)
|
||||
2 2 1
|
||||
explain format='plan_tree' select avg(id), max(id), min(id) from p use index(idx) group by c;
|
||||
id task access object operator info
|
||||
HashAgg root group by:globalindex__aggregate.p.c, funcs:avg(Column#9, Column#10)->Column#4, funcs:max(Column#11)->Column#5, funcs:min(Column#12)->Column#6
|
||||
HashAgg root group by:globalindex__aggregate.p.c, funcs:avg(Column, Column)->Column, funcs:max(Column)->Column, funcs:min(Column)->Column
|
||||
└─IndexLookUp root partition:all
|
||||
├─IndexFullScan(Build) cop[tikv] table:p, index:idx(id) keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) cop[tikv] group by:globalindex__aggregate.p.c, funcs:count(globalindex__aggregate.p.id)->Column#9, funcs:sum(globalindex__aggregate.p.id)->Column#10, funcs:max(globalindex__aggregate.p.id)->Column#11, funcs:min(globalindex__aggregate.p.id)->Column#12
|
||||
└─HashAgg(Probe) cop[tikv] group by:globalindex__aggregate.p.c, funcs:count(globalindex__aggregate.p.id)->Column, funcs:sum(globalindex__aggregate.p.id)->Column, funcs:max(globalindex__aggregate.p.id)->Column, funcs:min(globalindex__aggregate.p.id)->Column
|
||||
└─TableRowIDScan cop[tikv] table:p keep order:false, stats:pseudo
|
||||
select avg(id), max(id), min(id) from p use index(idx) group by c;
|
||||
avg(id) max(id) min(id)
|
||||
@ -38,11 +38,11 @@ avg(id) max(id) min(id)
|
||||
7.5000 8 7
|
||||
explain format='plan_tree' select avg(id), max(id), min(id) from p partition(p0) use index(idx) group by c;
|
||||
id task access object operator info
|
||||
HashAgg root NULL group by:globalindex__aggregate.p.c, funcs:avg(Column#9, Column#10)->Column#4, funcs:max(Column#11)->Column#5, funcs:min(Column#12)->Column#6
|
||||
HashAgg root NULL group by:globalindex__aggregate.p.c, funcs:avg(Column, Column)->Column, funcs:max(Column)->Column, funcs:min(Column)->Column
|
||||
└─IndexLookUp root partition:p0 NULL
|
||||
├─Selection(Build) cop[tikv] NULL in(_tidb_tid, tid0)
|
||||
│ └─IndexFullScan cop[tikv] table:p, index:idx(id) keep order:false, stats:pseudo
|
||||
└─HashAgg(Probe) cop[tikv] NULL group by:globalindex__aggregate.p.c, funcs:count(globalindex__aggregate.p.id)->Column#9, funcs:sum(globalindex__aggregate.p.id)->Column#10, funcs:max(globalindex__aggregate.p.id)->Column#11, funcs:min(globalindex__aggregate.p.id)->Column#12
|
||||
└─HashAgg(Probe) cop[tikv] NULL group by:globalindex__aggregate.p.c, funcs:count(globalindex__aggregate.p.id)->Column, funcs:sum(globalindex__aggregate.p.id)->Column, funcs:max(globalindex__aggregate.p.id)->Column, funcs:min(globalindex__aggregate.p.id)->Column
|
||||
└─TableRowIDScan cop[tikv] table:p keep order:false, stats:pseudo
|
||||
select avg(id), max(id), min(id) from p partition(p0) use index(idx) group by c;
|
||||
avg(id) max(id) min(id)
|
||||
@ -50,17 +50,17 @@ avg(id) max(id) min(id)
|
||||
alter table p add unique index idx1(c, id) global;
|
||||
explain format='plan_tree' select count(*), max(id), min(id) from p use index(idx1);
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#10)->Column#4, funcs:max(Column#11)->Column#5, funcs:min(Column#12)->Column#6
|
||||
HashAgg root funcs:count(Column)->Column, funcs:max(Column)->Column, funcs:min(Column)->Column
|
||||
└─IndexReader root partition:all index:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column#10, funcs:max(globalindex__aggregate.p.id)->Column#11, funcs:min(globalindex__aggregate.p.id)->Column#12
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column, funcs:max(globalindex__aggregate.p.id)->Column, funcs:min(globalindex__aggregate.p.id)->Column
|
||||
└─IndexFullScan cop[tikv] table:p, index:idx1(c, id) keep order:false, stats:pseudo
|
||||
select count(*), max(id), min(id) from p use index(idx1);
|
||||
count(*) max(id) min(id)
|
||||
7 8 1
|
||||
explain format='plan_tree' select avg(id), max(id), min(id) from p use index(idx1) group by c;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#26, funcs:avg(Column#23)->Column#4, funcs:max(Column#24)->Column#5, funcs:min(Column#25)->Column#6
|
||||
└─Projection root cast(globalindex__aggregate.p.id, decimal(10,0) BINARY)->Column#23, globalindex__aggregate.p.id->Column#24, globalindex__aggregate.p.id->Column#25, globalindex__aggregate.p.c->Column#26
|
||||
HashAgg root group by:Column, funcs:avg(Column)->Column, funcs:max(Column)->Column, funcs:min(Column)->Column
|
||||
└─Projection root cast(globalindex__aggregate.p.id, decimal(10,0) BINARY)->Column, globalindex__aggregate.p.id->Column, globalindex__aggregate.p.id->Column, globalindex__aggregate.p.c->Column
|
||||
└─IndexReader root partition:all index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:p, index:idx1(c, id) keep order:false, stats:pseudo
|
||||
select avg(id), max(id), min(id) from p use index(idx1) group by c;
|
||||
|
||||
@ -11,7 +11,7 @@ explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#9))
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column))
|
||||
└─HashJoin root CARTESIAN left outer semi join, left side:IndexMerge, other cond:eq(index_merge.t1.c3, index_merge.t1.c3)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -31,7 +31,7 @@ explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#9))
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column))
|
||||
└─HashJoin root Null-aware anti left outer semi join, left side:IndexMerge, equal:[eq(index_merge.t1.c3, index_merge.t1.c3)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -57,7 +57,7 @@ Sort root index_merge.t1.c1
|
||||
└─TableRowIDScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#10
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:max(index_merge.t1.c3)->Column#9
|
||||
└─StreamAgg root funcs:max(index_merge.t1.c3)->Column
|
||||
└─TopN root index_merge.t1.c3:desc, offset:0, count:1
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] index_merge.t1.c3:desc, offset:0, count:1
|
||||
@ -75,7 +75,7 @@ explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#10))
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column))
|
||||
└─HashJoin root left outer semi join, left side:IndexMerge, equal:[eq(index_merge.t1.c1, index_merge.t2.c1)]
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
@ -95,7 +95,7 @@ explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#10))
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column))
|
||||
└─HashJoin root anti left outer semi join, left side:IndexMerge, equal:[eq(index_merge.t1.c1, index_merge.t2.c1)]
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
@ -121,9 +121,9 @@ Sort root index_merge.t1.c1
|
||||
└─TableRowIDScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#20
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:count(Column#17)->Column#9
|
||||
└─StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#17
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
select /*+ use_index_merge(t1) */ * from t1 where c1 < 10 or c2 < 10 and c3 = (select count(1) from t2) order by 1;
|
||||
c1 c2 c3
|
||||
@ -136,11 +136,11 @@ c1 c2 c3
|
||||
explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c1 < 10 or c2 < 10 and c3 > ANY(select count(1) from t2) order by 1;
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(and(lt(index_merge.t1.c2, 10), or(gt(index_merge.t1.c3, Column#10), if(ne(Column#11, 0), NULL, 0))), and(ne(Column#12, 0), if(isnull(index_merge.t1.c3), NULL, 1))))
|
||||
├─StreamAgg(Build) root funcs:min(Column#9)->Column#10, funcs:sum(0)->Column#11, funcs:count(1)->Column#12
|
||||
│ └─StreamAgg root funcs:count(Column#25)->Column#9
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(and(lt(index_merge.t1.c2, 10), or(gt(index_merge.t1.c3, Column), if(ne(Column, 0), NULL, 0))), and(ne(Column, 0), if(isnull(index_merge.t1.c3), NULL, 1))))
|
||||
├─StreamAgg(Build) root funcs:min(Column)->Column, funcs:sum(0)->Column, funcs:count(1)->Column
|
||||
│ └─StreamAgg root funcs:count(Column)->Column
|
||||
│ └─IndexReader root index:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column#25
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
└─IndexMerge(Probe) root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
@ -158,11 +158,11 @@ c1 c2 c3
|
||||
explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c1 < 10 or c2 < 10 and c3 > SOME(select count(1) from t2) order by 1;
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(and(lt(index_merge.t1.c2, 10), or(gt(index_merge.t1.c3, Column#10), if(ne(Column#11, 0), NULL, 0))), and(ne(Column#12, 0), if(isnull(index_merge.t1.c3), NULL, 1))))
|
||||
├─StreamAgg(Build) root funcs:min(Column#9)->Column#10, funcs:sum(0)->Column#11, funcs:count(1)->Column#12
|
||||
│ └─StreamAgg root funcs:count(Column#25)->Column#9
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(and(lt(index_merge.t1.c2, 10), or(gt(index_merge.t1.c3, Column), if(ne(Column, 0), NULL, 0))), and(ne(Column, 0), if(isnull(index_merge.t1.c3), NULL, 1))))
|
||||
├─StreamAgg(Build) root funcs:min(Column)->Column, funcs:sum(0)->Column, funcs:count(1)->Column
|
||||
│ └─StreamAgg root funcs:count(Column)->Column
|
||||
│ └─IndexReader root index:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column#25
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
└─IndexMerge(Probe) root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
@ -180,11 +180,11 @@ c1 c2 c3
|
||||
explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c1 < 10 or c2 < 10 and c3 > ALL(select count(1) from t2) order by 1;
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), or(and(gt(index_merge.t1.c3, Column#10), if(ne(Column#11, 0), NULL, 1)), or(eq(Column#12, 0), if(isnull(index_merge.t1.c3), NULL, 0)))))
|
||||
├─StreamAgg(Build) root funcs:max(Column#9)->Column#10, funcs:sum(0)->Column#11, funcs:count(1)->Column#12
|
||||
│ └─StreamAgg root funcs:count(Column#25)->Column#9
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), or(and(gt(index_merge.t1.c3, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(index_merge.t1.c3), NULL, 0)))))
|
||||
├─StreamAgg(Build) root funcs:max(Column)->Column, funcs:sum(0)->Column, funcs:count(1)->Column
|
||||
│ └─StreamAgg root funcs:count(Column)->Column
|
||||
│ └─IndexReader root index:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column#25
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
└─IndexMerge(Probe) root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
@ -201,12 +201,12 @@ c1 c2 c3
|
||||
explain format = 'plan_tree' select /*+ use_index_merge(t1) */ c1, (select sum(c2) from t2) from t1 where c1 < 10 or c2 < 10 and c3 > ALL(select count(1) from t2) order by 1;
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, ScalarQueryCol#25(15)->Column#26
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), or(and(gt(index_merge.t1.c3, Column#14), if(ne(Column#15, 0), NULL, 1)), or(eq(Column#16, 0), if(isnull(index_merge.t1.c3), NULL, 0)))))
|
||||
├─StreamAgg(Build) root funcs:max(Column#13)->Column#14, funcs:sum(0)->Column#15, funcs:count(1)->Column#16
|
||||
│ └─StreamAgg root funcs:count(Column#39)->Column#13
|
||||
└─Projection root index_merge.t1.c1, ScalarQueryCol#25(15)->Column
|
||||
└─HashJoin root CARTESIAN inner join, other cond:or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), or(and(gt(index_merge.t1.c3, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(index_merge.t1.c3), NULL, 0)))))
|
||||
├─StreamAgg(Build) root funcs:max(Column)->Column, funcs:sum(0)->Column, funcs:count(1)->Column
|
||||
│ └─StreamAgg root funcs:count(Column)->Column
|
||||
│ └─IndexReader root index:StreamAgg
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column#39
|
||||
│ └─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo
|
||||
└─IndexMerge(Probe) root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
@ -214,9 +214,9 @@ Sort root index_merge.t1.c1
|
||||
└─TableRowIDScan(Probe) cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#25
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:sum(Column#24)->Column#22
|
||||
└─StreamAgg root funcs:sum(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:sum(index_merge.t2.c2)->Column#24
|
||||
└─StreamAgg cop[tikv] funcs:sum(index_merge.t2.c2)->Column
|
||||
└─IndexFullScan cop[tikv] table:t2, index:c2(c2) keep order:false, stats:pseudo
|
||||
select /*+ use_index_merge(t1) */ c1, (select sum(c2) from t2) from t1 where c1 < 10 or c2 < 10 and c3 > ALL(select count(1) from t2) order by 1;
|
||||
c1 (select sum(c2) from t2)
|
||||
@ -230,7 +230,7 @@ explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where c
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#13))
|
||||
└─Selection root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column))
|
||||
└─HashJoin root CARTESIAN left outer semi join, left side:IndexMerge, other cond:eq(index_merge.t1.c3, index_merge.t2.c1)
|
||||
├─HashJoin(Build) root inner join, equal:[eq(index_merge.t2.c2, index_merge.t2.c3)]
|
||||
│ ├─HashAgg(Build) root group by:index_merge.t2.c3, funcs:firstrow(index_merge.t2.c3)->index_merge.t2.c3
|
||||
@ -474,8 +474,8 @@ c1 c2 c3
|
||||
///// MEMORY Table
|
||||
explain format = 'plan_tree' select count(c1) from (select /*+ use_index_merge(t_alias), stream_agg() */ count(1) c1 from information_schema.statements_summary where sum_latency >= 0 or max_latency >= 0 order by 1) dt;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#121)->Column#122
|
||||
└─StreamAgg root funcs:count(1)->Column#121
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─StreamAgg root funcs:count(1)->Column
|
||||
└─MemTableScan root table:STATEMENTS_SUMMARY
|
||||
show warnings;
|
||||
Level Code Message
|
||||
@ -502,9 +502,9 @@ c1 c2 c3
|
||||
///// GROUP BY
|
||||
explain format = 'plan_tree' select /*+ use_index_merge(t1) */ sum(c1) from t1 where (c1 < 10 or c2 < 10) and c3 < 10 group by c1 order by 1;
|
||||
id task access object operator info
|
||||
Sort root Column#5
|
||||
└─HashAgg root group by:Column#13, funcs:sum(Column#12)->Column#5
|
||||
└─Projection root cast(index_merge.t1.c1, decimal(10,0) BINARY)->Column#12, index_merge.t1.c1->Column#13
|
||||
Sort root Column
|
||||
└─HashAgg root group by:Column, funcs:sum(Column)->Column
|
||||
└─Projection root cast(index_merge.t1.c1, decimal(10,0) BINARY)->Column, index_merge.t1.c1->Column
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c2(c2) range:[-inf,10), keep order:false, stats:pseudo
|
||||
@ -525,17 +525,17 @@ explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where t
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3
|
||||
└─Apply root inner join, equal:[eq(Column#10, Column#9)]
|
||||
├─Projection(Build) root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3, cast(index_merge.t1.c1, decimal(10,0) BINARY)->Column#10
|
||||
└─Apply root inner join, equal:[eq(Column, Column)]
|
||||
├─Projection(Build) root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3, cast(index_merge.t1.c1, decimal(10,0) BINARY)->Column
|
||||
│ └─IndexMerge root type: union
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:t1, index:c2(c2) range:[-inf,-1), keep order:false, stats:pseudo
|
||||
│ └─Selection(Probe) cop[tikv] lt(index_merge.t1.c3, 10)
|
||||
│ └─TableRowIDScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─StreamAgg root group by:index_merge.t2.c1, funcs:avg(Column#17, Column#18)->Column#9
|
||||
└─StreamAgg root group by:index_merge.t2.c1, funcs:avg(Column, Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:index_merge.t2.c1, funcs:count(index_merge.t2.c1)->Column#17, funcs:sum(index_merge.t2.c1)->Column#18
|
||||
└─StreamAgg cop[tikv] group by:index_merge.t2.c1, funcs:count(index_merge.t2.c1)->Column, funcs:sum(index_merge.t2.c1)->Column
|
||||
└─IndexRangeScan cop[tikv] table:t2, index:c1(c1) range: decided by [eq(index_merge.t1.c1, index_merge.t2.c1)], keep order:true, stats:pseudo
|
||||
select /*+ use_index_merge(t1) */ * from t1 where t1.c1 = (select avg(t2.c1) from t2 where t1.c1 = t2.c1 group by t2.c1) and (c1 < 10 or c2 < -1) and c3 < 10 order by 1;
|
||||
c1 c2 c3
|
||||
@ -548,16 +548,16 @@ explain format = 'plan_tree' select /*+ use_index_merge(t1) */ * from t1 where t
|
||||
id task access object operator info
|
||||
Sort root index_merge.t1.c1
|
||||
└─Projection root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3
|
||||
└─Apply root inner join, equal:[eq(Column#11, Column#9)]
|
||||
├─Projection(Build) root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3, cast(index_merge.t1.c1, decimal(10,0) BINARY)->Column#11
|
||||
└─Apply root inner join, equal:[eq(Column, Column)]
|
||||
├─Projection(Build) root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3, cast(index_merge.t1.c1, decimal(10,0) BINARY)->Column
|
||||
│ └─IndexMerge root type: union
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
│ ├─IndexRangeScan(Build) cop[tikv] table:t1, index:c2(c2) range:[-inf,-1), keep order:false, stats:pseudo
|
||||
│ └─Selection(Probe) cop[tikv] lt(index_merge.t1.c3, 10)
|
||||
│ └─TableRowIDScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─TopN(Probe) root index_merge.t2.c1, offset:2, count:1
|
||||
└─HashAgg root group by:Column#23, funcs:avg(Column#22)->Column#9, funcs:firstrow(Column#23)->index_merge.t2.c1
|
||||
└─Projection root cast(index_merge.t2.c1, decimal(10,0) BINARY)->Column#22, index_merge.t2.c1->Column#23
|
||||
└─HashAgg root group by:Column, funcs:avg(Column)->Column, funcs:firstrow(Column)->index_merge.t2.c1
|
||||
└─Projection root cast(index_merge.t2.c1, decimal(10,0) BINARY)->Column, index_merge.t2.c1->Column
|
||||
└─IndexMerge root type: union
|
||||
├─Selection(Build) cop[tikv] eq(index_merge.t1.c1, index_merge.t2.c1)
|
||||
│ └─IndexRangeScan cop[tikv] table:t2, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo
|
||||
@ -861,13 +861,13 @@ c1
|
||||
105
|
||||
explain format = 'plan_tree' with recursive cte1 as (select 1 c1, 1 c2, 1 c3 UNION ALL select /*+ use_index_merge(t_alias) */ c1 + 1, c2 + 1, c3 + 1 from cte1 t_alias where c1 < 10 or c2 < 10 and c3 < 10) select * from cte1 order by 1;
|
||||
id task access object operator info
|
||||
Sort root Column#16
|
||||
Sort root Column
|
||||
└─CTEFullScan root CTE:cte1 data:CTE_0
|
||||
CTE_0 root Recursive CTE
|
||||
├─Projection(Seed Part) root 1->Column#4, 1->Column#5, 1->Column#6
|
||||
├─Projection(Seed Part) root 1->Column, 1->Column, 1->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Recursive Part) root cast(plus(Column#7, 1), bigint BINARY)->Column#13, cast(plus(Column#8, 1), bigint BINARY)->Column#14, cast(plus(Column#9, 1), bigint BINARY)->Column#15
|
||||
└─Selection root or(lt(Column#7, 10), and(lt(Column#8, 10), lt(Column#9, 10)))
|
||||
└─Projection(Recursive Part) root cast(plus(Column, 1), bigint BINARY)->Column, cast(plus(Column, 1), bigint BINARY)->Column, cast(plus(Column, 1), bigint BINARY)->Column
|
||||
└─Selection root or(lt(Column, 10), and(lt(Column, 10), lt(Column, 10)))
|
||||
└─CTETable root Scan on CTE_0
|
||||
show warnings;
|
||||
Level Code Message
|
||||
|
||||
@ -54,11 +54,11 @@ count(*)
|
||||
3
|
||||
explain format='plan_tree' SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_SCHEMA= 'mysql' or TABLE_SCHEMA = 'test') and (TABLE_NAME = 't1' or TABLE_NAME = 't2');
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#28
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─MemTableScan root table:TABLES table_name:["t1","t2"], table_schema:["mysql","test"]
|
||||
explain format='plan_tree' SELECT count(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA in ('mysql', 'test') and TABLE_NAME in ('t1', 't2');
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#28
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─MemTableScan root table:TABLES table_name:["t1","t2"], table_schema:["mysql","test"]
|
||||
SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME in ('t1', 't2') and TABLE_SCHEMA = 'mysql';
|
||||
count(*)
|
||||
|
||||
@ -194,7 +194,7 @@ select (a, b) != all (select a, b from naaj_B) from naaj_A;
|
||||
explain format = 'plan_tree' select * from naaj_A where (a, b) != all (select a, b from naaj_B);
|
||||
id task access object operator info
|
||||
Projection root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c
|
||||
└─Selection root Column#9
|
||||
└─Selection root Column
|
||||
└─HashJoin root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:naaj_B keep order:false, stats:pseudo
|
||||
@ -228,7 +228,7 @@ select (a, b) != all (select a, b from naaj_B where naaj_A.c > naaj_B.c) from na
|
||||
explain format = 'plan_tree' select * from naaj_A where (a, b) != all (select a, b from naaj_B where naaj_A.c > naaj_B.c);
|
||||
id task access object operator info
|
||||
Projection root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c
|
||||
└─Selection root Column#9
|
||||
└─Selection root Column
|
||||
└─HashJoin root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:naaj_B keep order:false, stats:pseudo
|
||||
@ -250,7 +250,7 @@ select (a, b) != all (select a, b from naaj_B where naaj_A.a != naaj_B.a) from n
|
||||
explain format = 'plan_tree' select * from naaj_A where (a, b) != all (select a, b from naaj_B where naaj_A.a != naaj_B.a);
|
||||
id task access object operator info
|
||||
Projection root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c
|
||||
└─Selection root Column#9
|
||||
└─Selection root Column
|
||||
└─HashJoin root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:naaj_B keep order:false, stats:pseudo
|
||||
@ -325,7 +325,7 @@ select (a, b) != all (select a, b from naaj_B where naaj_A.c > naaj_B.c) from na
|
||||
explain format = 'plan_tree' select * from naaj_A where (a, b) != all (select a, b from naaj_B where naaj_A.c > naaj_B.c);
|
||||
id task access object operator info
|
||||
Projection root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c
|
||||
└─Selection root Column#9
|
||||
└─Selection root Column
|
||||
└─HashJoin root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:naaj_B keep order:false, stats:pseudo
|
||||
@ -347,7 +347,7 @@ select (a, b) != all (select a, b from naaj_B where naaj_A.c = naaj_B.c) from na
|
||||
explain format = 'plan_tree' select * from naaj_A where (a, b) != all (select a, b from naaj_B where naaj_A.c = naaj_B.c);
|
||||
id task access object operator info
|
||||
Projection root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c
|
||||
└─Selection root Column#9
|
||||
└─Selection root Column
|
||||
└─HashJoin root anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:naaj_B keep order:false, stats:pseudo
|
||||
@ -371,10 +371,10 @@ a b c
|
||||
1 1 1
|
||||
explain format='plan_tree' select (a+1,b*2) not in (select a, b from naaj_B) from naaj_A;
|
||||
id task access object operator info
|
||||
HashJoin root Null-aware anti left outer semi join, left side:Projection, equal:[eq(Column#14, naaj.naaj_b.a) eq(Column#15, naaj.naaj_b.b)]
|
||||
HashJoin root Null-aware anti left outer semi join, left side:Projection, equal:[eq(Column, naaj.naaj_b.a) eq(Column, naaj.naaj_b.b)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:naaj_B keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root plus(naaj.naaj_a.a, 1)->Column#14, mul(naaj.naaj_a.b, 2)->Column#15
|
||||
└─Projection(Probe) root plus(naaj.naaj_a.a, 1)->Column, mul(naaj.naaj_a.b, 2)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:naaj_A keep order:false, stats:pseudo
|
||||
select (a+1,b*2) not in (select a, b from naaj_B) from naaj_A;
|
||||
@ -386,11 +386,11 @@ select (a+1,b*2) not in (select a, b from naaj_B) from naaj_A;
|
||||
0
|
||||
explain format='plan_tree' select * from naaj_A where (a+1,b*2) not in (select a+1, b-1 from naaj_B);
|
||||
id task access object operator info
|
||||
HashJoin root Null-aware anti semi join, left side:Projection, equal:[eq(Column#13, Column#9) eq(Column#14, Column#10)]
|
||||
├─Projection(Build) root plus(naaj.naaj_b.a, 1)->Column#9, minus(naaj.naaj_b.b, 1)->Column#10
|
||||
HashJoin root Null-aware anti semi join, left side:Projection, equal:[eq(Column, Column) eq(Column, Column)]
|
||||
├─Projection(Build) root plus(naaj.naaj_b.a, 1)->Column, minus(naaj.naaj_b.b, 1)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:naaj_B keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c, plus(naaj.naaj_a.a, 1)->Column#13, mul(naaj.naaj_a.b, 2)->Column#14
|
||||
└─Projection(Probe) root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c, plus(naaj.naaj_a.a, 1)->Column, mul(naaj.naaj_a.b, 2)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:naaj_A keep order:false, stats:pseudo
|
||||
select * from naaj_A where (a+1,b*2) not in (select a, b from naaj_B);
|
||||
@ -424,7 +424,7 @@ insert into chqin values (1,1,1),(2,2,2),(3,3,3);
|
||||
insert into chqin1 values (4,4,4),(5,5,5),(6,6,6);
|
||||
explain format='plan_tree' SELECT -1405353984 FROM chqin t1 WHERE t1.f1 not IN ( SELECT a1.f2 FROM chqin1 a1 WHERE ( 1 >= t1.id ) ) ;
|
||||
id task access object operator info
|
||||
Projection root -1405353984->Column#9
|
||||
Projection root -1405353984->Column
|
||||
└─HashJoin root CARTESIAN anti semi join, left side:TableReader, left cond:[ge(1, naaj.chqin.id)], other cond:eq(naaj.chqin.f1, naaj.chqin1.f2)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:a1 keep order:false, stats:pseudo
|
||||
|
||||
@ -7,7 +7,7 @@ Level Code Message
|
||||
EXPLAIN FORMAT='plan_tree' SELECT * FROM t1 JOIN (SELECT ((v0.c0) LIKE (((v0.c0) + (v0.c0)))) AS col_0 FROM v0) as subQuery1 ON (subQuery1.col_0);
|
||||
id task access object operator info
|
||||
HashJoin root CARTESIAN inner join
|
||||
├─Projection(Build) root like(<nil>, cast(plus(cast(<nil>, double BINARY), cast(<nil>, double BINARY)), var_string(370)), 92)->Column#6
|
||||
├─Projection(Build) root like(<nil>, cast(plus(cast(<nil>, double BINARY), cast(<nil>, double BINARY)), var_string(370)), 92)->Column
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] like(NULL, cast(plus(cast(NULL, double BINARY), cast(NULL, double BINARY)), var_string(370)), 92), null_rejected.t1.c0
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
set session tidb_enable_cascades_planner = 1;
|
||||
explain format="plan_tree" select 1;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#1
|
||||
Projection root 1->Column
|
||||
└─TableDual root rows:1
|
||||
select 1;
|
||||
1
|
||||
@ -155,8 +155,8 @@ explain format="plan_tree" select b from t order by a+b;
|
||||
id task access object operator info
|
||||
Projection root planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b
|
||||
└─Sort root Column#4
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column#4
|
||||
└─Sort root Column
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select b from t order by a+b;
|
||||
@ -169,8 +169,8 @@ explain format="plan_tree" select b from t order by b, a+b, a;
|
||||
id task access object operator info
|
||||
Projection root planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b
|
||||
└─Sort root planner__cascades__integration.t.b, Column#4, planner__cascades__integration.t.a
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column#4
|
||||
└─Sort root planner__cascades__integration.t.b, Column, planner__cascades__integration.t.a
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select b from t order by b, a+b, a;
|
||||
@ -188,18 +188,18 @@ set @@session.tidb_hash_join_concurrency = 5;
|
||||
set @@session.tidb_distsql_scan_concurrency = 15;
|
||||
explain format="plan_tree" select sum(a) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#4)->Column#3
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(planner__cascades__integration.t.a)->Column#4
|
||||
└─HashAgg cop[tikv] funcs:sum(planner__cascades__integration.t.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select sum(a) from t;
|
||||
sum(a)
|
||||
10
|
||||
explain format="plan_tree" select max(a), min(b) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:max(Column#5)->Column#3, funcs:min(Column#6)->Column#4
|
||||
HashAgg root funcs:max(Column)->Column, funcs:min(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:max(planner__cascades__integration.t.a)->Column#5, funcs:min(planner__cascades__integration.t.b)->Column#6
|
||||
└─HashAgg cop[tikv] funcs:max(planner__cascades__integration.t.a)->Column, funcs:min(planner__cascades__integration.t.b)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select max(a), min(b) from t;
|
||||
max(a) min(b)
|
||||
@ -207,10 +207,10 @@ max(a) min(b)
|
||||
explain format="plan_tree" select b, avg(a) from t group by b order by b;
|
||||
id task access object operator info
|
||||
Sort root planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.b, Column#3
|
||||
└─HashAgg root group by:planner__cascades__integration.t.b, funcs:avg(Column#4, Column#5)->Column#3, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.b, Column
|
||||
└─HashAgg root group by:planner__cascades__integration.t.b, funcs:avg(Column, Column)->Column, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.b, funcs:count(planner__cascades__integration.t.a)->Column#4, funcs:sum(planner__cascades__integration.t.a)->Column#5
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.b, funcs:count(planner__cascades__integration.t.a)->Column, funcs:sum(planner__cascades__integration.t.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select b, avg(a) from t group by b order by b;
|
||||
b avg(a)
|
||||
@ -221,10 +221,10 @@ b avg(a)
|
||||
explain format="plan_tree" select b, sum(a) from t group by b order by b;
|
||||
id task access object operator info
|
||||
Sort root planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.b, Column#3
|
||||
└─HashAgg root group by:planner__cascades__integration.t.b, funcs:sum(Column#4)->Column#3, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.b, Column
|
||||
└─HashAgg root group by:planner__cascades__integration.t.b, funcs:sum(Column)->Column, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.b, funcs:sum(planner__cascades__integration.t.a)->Column#4
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.b, funcs:sum(planner__cascades__integration.t.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select b, sum(a) from t group by b order by b;
|
||||
b sum(a)
|
||||
@ -234,11 +234,11 @@ b sum(a)
|
||||
44 4
|
||||
explain format="plan_tree" select b, avg(a) from t group by b having sum(a) > 1 order by b;
|
||||
id task access object operator info
|
||||
Projection root planner__cascades__integration.t.b, Column#3->Column#6
|
||||
Projection root planner__cascades__integration.t.b, Column
|
||||
└─Sort root planner__cascades__integration.t.b
|
||||
└─Selection root gt(Column#4, 1)
|
||||
└─HashAgg root group by:Column#13, funcs:avg(Column#11)->Column#3, funcs:sum(Column#12)->Column#4, funcs:firstrow(Column#13)->planner__cascades__integration.t.b
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column#11, cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column#12, planner__cascades__integration.t.b->Column#13
|
||||
└─Selection root gt(Column, 1)
|
||||
└─HashAgg root group by:Column, funcs:avg(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->planner__cascades__integration.t.b
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column, cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column, planner__cascades__integration.t.b->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select b, avg(a) from t group by b having sum(a) > 1 order by b;
|
||||
@ -248,11 +248,11 @@ b avg(a)
|
||||
44 4.0000
|
||||
explain format="plan_tree" select max(a+b) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(Column#5)->Column#3
|
||||
└─Projection root plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column#5
|
||||
StreamAgg root funcs:max(Column)->Column
|
||||
└─Projection root plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b
|
||||
└─TopN root Column#4:desc, offset:0, count:1
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column#4
|
||||
└─TopN root Column:desc, offset:0, count:1
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b):desc, offset:0, count:1
|
||||
└─Selection cop[tikv] not(isnull(plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)))
|
||||
@ -262,8 +262,8 @@ max(a+b)
|
||||
48
|
||||
explain format="plan_tree" select sum(a) from t group by a, a+b order by a;
|
||||
id task access object operator info
|
||||
Projection root Column#3->Column#4
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(32,0) BINARY)->Column#3, planner__cascades__integration.t.a
|
||||
Projection root Column
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(32,0) BINARY)->Column, planner__cascades__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:true, stats:pseudo
|
||||
select sum(a) from t group by a, a+b order by a;
|
||||
@ -275,10 +275,10 @@ sum(a)
|
||||
explain format="plan_tree" select b, sum(a) from t group by b having b > 1 order by b;
|
||||
id task access object operator info
|
||||
Sort root planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.b, Column#3
|
||||
└─HashAgg root group by:planner__cascades__integration.t.b, funcs:sum(Column#4)->Column#3, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─Projection root planner__cascades__integration.t.b, Column
|
||||
└─HashAgg root group by:planner__cascades__integration.t.b, funcs:sum(Column)->Column, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.b, funcs:sum(planner__cascades__integration.t.a)->Column#4
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.b, funcs:sum(planner__cascades__integration.t.a)->Column
|
||||
└─Selection cop[tikv] gt(planner__cascades__integration.t.b, 1)
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select b, sum(a) from t group by b having b > 1 order by b;
|
||||
@ -289,11 +289,11 @@ b sum(a)
|
||||
44 4
|
||||
explain format="plan_tree" select c, sum(a) from (select a+b as c, a from t) t1 group by c having c > 1 order by c;
|
||||
id task access object operator info
|
||||
Sort root Column#3
|
||||
└─Projection root Column#3, Column#4
|
||||
└─HashAgg root group by:Column#7, funcs:sum(Column#8)->Column#4, funcs:firstrow(Column#7)->Column#3
|
||||
Sort root Column
|
||||
└─Projection root Column, Column
|
||||
└─HashAgg root group by:Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b), funcs:sum(planner__cascades__integration.t.a)->Column#8
|
||||
└─HashAgg cop[tikv] group by:plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b), funcs:sum(planner__cascades__integration.t.a)->Column
|
||||
└─Selection cop[tikv] gt(plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b), 1)
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select c, sum(a) from (select a+b as c, a from t) t1 group by c having c > 1 order by c;
|
||||
@ -304,7 +304,7 @@ c sum(a)
|
||||
48 4
|
||||
explain format="plan_tree" select max(a.a) from t a left join t b on a.a = b.a;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(planner__cascades__integration.t.a)->Column#5
|
||||
StreamAgg root funcs:max(planner__cascades__integration.t.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─TableReader root data:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -314,9 +314,9 @@ max(a.a)
|
||||
4
|
||||
explain format="plan_tree" select avg(a.b) from t a left join t b on a.a = b.a;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:avg(Column#6, Column#7)->Column#5
|
||||
HashAgg root funcs:avg(Column, Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(planner__cascades__integration.t.b)->Column#6, funcs:sum(planner__cascades__integration.t.b)->Column#7
|
||||
└─HashAgg cop[tikv] funcs:count(planner__cascades__integration.t.b)->Column, funcs:sum(planner__cascades__integration.t.b)->Column
|
||||
└─TableFullScan cop[tikv] table:a keep order:false, stats:pseudo
|
||||
select avg(a.b) from t a left join t b on a.a = b.a;
|
||||
avg(a.b)
|
||||
@ -333,8 +333,8 @@ a max(t1.b)
|
||||
4 44
|
||||
explain format="plan_tree" select t1.a, sum(distinct t1.b) from t as t1 left join (select * from t) as t2 on t1.b = t2.b group by t1.a order by a;
|
||||
id task access object operator info
|
||||
Projection root planner__cascades__integration.t.a, Column#5
|
||||
└─Projection root cast(planner__cascades__integration.t.b, decimal(32,0) BINARY)->Column#5, planner__cascades__integration.t.a
|
||||
Projection root planner__cascades__integration.t.a, Column
|
||||
└─Projection root cast(planner__cascades__integration.t.b, decimal(32,0) BINARY)->Column, planner__cascades__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:true, stats:pseudo
|
||||
select t1.a, sum(distinct t1.b) from t as t1 left join (select * from t) as t2 on t1.b = t2.b group by t1.a order by a;
|
||||
@ -355,8 +355,8 @@ a max(t2.b)
|
||||
4 44
|
||||
explain format="plan_tree" select t3.a, max(t3.b) from (select t1.a, t1.b from t as t1 left join t as t2 on t1.b = t2.b) t3 group by t3.a order by a;
|
||||
id task access object operator info
|
||||
Projection root planner__cascades__integration.t.a, Column#5
|
||||
└─Projection root planner__cascades__integration.t.b->Column#5, planner__cascades__integration.t.a
|
||||
Projection root planner__cascades__integration.t.a, Column
|
||||
└─Projection root planner__cascades__integration.t.b->Column, planner__cascades__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:true, stats:pseudo
|
||||
select t3.a, max(t3.b) from (select t1.a, t1.b from t as t1 left join t as t2 on t1.b = t2.b) t3 group by t3.a order by a;
|
||||
@ -367,7 +367,7 @@ a max(t3.b)
|
||||
4 44
|
||||
explain format="plan_tree" select max(a) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:max(planner__cascades__integration.t.a)->Column#3
|
||||
StreamAgg root funcs:max(planner__cascades__integration.t.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─TableReader root data:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -377,53 +377,53 @@ max(a)
|
||||
4
|
||||
explain format="plan_tree" select sum(case when a > 0 and a <= 1000 then b else 0 end) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#4)->Column#3
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b, 0))->Column#4
|
||||
└─HashAgg cop[tikv] funcs:sum(case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b, 0))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select sum(case when a > 0 and a <= 1000 then b else 0 end) from t;
|
||||
sum(case when a > 0 and a <= 1000 then b else 0 end)
|
||||
110
|
||||
explain format="plan_tree" select sum(case when a > 0 then (case when a <= 1000 then b end) else 0 end) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#4)->Column#3
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(case(gt(planner__cascades__integration.t.a, 0), case(le(planner__cascades__integration.t.a, 1000), planner__cascades__integration.t.b), 0))->Column#4
|
||||
└─HashAgg cop[tikv] funcs:sum(case(gt(planner__cascades__integration.t.a, 0), case(le(planner__cascades__integration.t.a, 1000), planner__cascades__integration.t.b), 0))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select sum(case when a > 0 then (case when a <= 1000 then b end) else 0 end) from t;
|
||||
sum(case when a > 0 then (case when a <= 1000 then b end) else 0 end)
|
||||
110
|
||||
explain format="plan_tree" select sum(case when a <= 0 or a > 1000 then 0.0 else b end) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#4)->Column#3
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(case(or(le(planner__cascades__integration.t.a, 0), gt(planner__cascades__integration.t.a, 1000)), 0.0, cast(planner__cascades__integration.t.b, decimal(12,1) BINARY)))->Column#4
|
||||
└─HashAgg cop[tikv] funcs:sum(case(or(le(planner__cascades__integration.t.a, 0), gt(planner__cascades__integration.t.a, 1000)), 0.0, cast(planner__cascades__integration.t.b, decimal(12,1) BINARY)))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select sum(case when a <= 0 or a > 1000 then 0.0 else b end) from t;
|
||||
sum(case when a <= 0 or a > 1000 then 0.0 else b end)
|
||||
110.0
|
||||
explain format="plan_tree" select count(case when a > 0 and a <= 1000 then b end) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#4)->Column#3
|
||||
HashAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b))->Column#4
|
||||
└─HashAgg cop[tikv] funcs:count(case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(case when a > 0 and a <= 1000 then b end) from t;
|
||||
count(case when a > 0 and a <= 1000 then b end)
|
||||
4
|
||||
explain format="plan_tree" select count(case when a <= 0 or a > 1000 then null else b end) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#4)->Column#3
|
||||
HashAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(case(or(le(planner__cascades__integration.t.a, 0), gt(planner__cascades__integration.t.a, 1000)), NULL, planner__cascades__integration.t.b))->Column#4
|
||||
└─HashAgg cop[tikv] funcs:count(case(or(le(planner__cascades__integration.t.a, 0), gt(planner__cascades__integration.t.a, 1000)), NULL, planner__cascades__integration.t.b))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(case when a <= 0 or a > 1000 then null else b end) from t;
|
||||
count(case when a <= 0 or a > 1000 then null else b end)
|
||||
4
|
||||
explain format="plan_tree" select count(distinct case when a > 0 and a <= 1000 then b end) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(distinct Column#6)->Column#3
|
||||
└─Projection root case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b)->Column#6
|
||||
HashAgg root funcs:count(distinct Column)->Column
|
||||
└─Projection root case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(distinct case when a > 0 and a <= 1000 then b end) from t;
|
||||
@ -431,8 +431,8 @@ count(distinct case when a > 0 and a <= 1000 then b end)
|
||||
4
|
||||
explain format="plan_tree" select approx_count_distinct(case when a > 0 and a <= 1000 then b end) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_count_distinct(Column#4)->Column#3
|
||||
└─Projection root case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b)->Column#4
|
||||
HashAgg root funcs:approx_count_distinct(Column)->Column
|
||||
└─Projection root case(and(gt(planner__cascades__integration.t.a, 0), le(planner__cascades__integration.t.a, 1000)), planner__cascades__integration.t.b)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_count_distinct(case when a > 0 and a <= 1000 then b end) from t;
|
||||
@ -440,9 +440,9 @@ approx_count_distinct(case when a > 0 and a <= 1000 then b end)
|
||||
4
|
||||
explain format="plan_tree" select count(b), sum(b), avg(b), b, max(b), min(b), bit_and(b), bit_or(b), bit_xor(b) from t group by a having sum(b) >= 0 and count(b) >= 0 order by b;
|
||||
id task access object operator info
|
||||
Projection root Column#3->Column#11, Column#4->Column#12, Column#5->Column#13, planner__cascades__integration.t.b, Column#6->Column#15, Column#7->Column#16, Column#8->Column#17, Column#9->Column#18, Column#10->Column#19
|
||||
Projection root Column, Column, Column, planner__cascades__integration.t.b, Column, Column, Column, Column, Column
|
||||
└─Sort root planner__cascades__integration.t.b
|
||||
└─Projection root if(isnull(planner__cascades__integration.t.b), 0, 1)->Column#3, cast(planner__cascades__integration.t.b, decimal(32,0) BINARY)->Column#4, cast(planner__cascades__integration.t.b, decimal(15,4) BINARY)->Column#5, planner__cascades__integration.t.b, planner__cascades__integration.t.b->Column#6, planner__cascades__integration.t.b->Column#7, ifnull(cast(planner__cascades__integration.t.b, bigint UNSIGNED BINARY), 18446744073709551615)->Column#8, ifnull(cast(planner__cascades__integration.t.b, bigint UNSIGNED BINARY), 0)->Column#9, ifnull(cast(planner__cascades__integration.t.b, bigint UNSIGNED BINARY), 0)->Column#10, cast(planner__cascades__integration.t.b, decimal(32,0) BINARY)->Column#4, if(isnull(planner__cascades__integration.t.b), 0, 1)->Column#3
|
||||
└─Projection root if(isnull(planner__cascades__integration.t.b), 0, 1)->Column, cast(planner__cascades__integration.t.b, decimal(32,0) BINARY)->Column, cast(planner__cascades__integration.t.b, decimal(15,4) BINARY)->Column, planner__cascades__integration.t.b, planner__cascades__integration.t.b->Column, planner__cascades__integration.t.b->Column, ifnull(cast(planner__cascades__integration.t.b, bigint UNSIGNED BINARY), 18446744073709551615)->Column, ifnull(cast(planner__cascades__integration.t.b, bigint UNSIGNED BINARY), 0)->Column, ifnull(cast(planner__cascades__integration.t.b, bigint UNSIGNED BINARY), 0)->Column, cast(planner__cascades__integration.t.b, decimal(32,0) BINARY)->Column, if(isnull(planner__cascades__integration.t.b), 0, 1)->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] ge(cast(planner__cascades__integration.t.b, decimal(32,0) BINARY), 0), ge(if(isnull(planner__cascades__integration.t.b), 0, 1), 0)
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -455,8 +455,8 @@ count(b) sum(b) avg(b) b max(b) min(b) bit_and(b) bit_or(b) bit_xor(b)
|
||||
explain format="plan_tree" select group_concat(a, b), min(b), avg(a / b), a from t group by (a+b), a order by a;
|
||||
id task access object operator info
|
||||
Sort root planner__cascades__integration.t.a
|
||||
└─HashAgg root group by:Column#11, Column#12, funcs:group_concat(Column#7, Column#8 separator ",")->Column#3, funcs:min(Column#9)->Column#4, funcs:avg(Column#10)->Column#5, funcs:firstrow(Column#11)->planner__cascades__integration.t.a
|
||||
└─Projection root cast(planner__cascades__integration.t.a, var_string(20))->Column#7, cast(planner__cascades__integration.t.b, var_string(20))->Column#8, planner__cascades__integration.t.b->Column#9, div(cast(planner__cascades__integration.t.a, decimal(10,0) BINARY), cast(planner__cascades__integration.t.b, decimal(10,0) BINARY))->Column#10, planner__cascades__integration.t.a->Column#11, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column#12
|
||||
└─HashAgg root group by:Column, Column, funcs:group_concat(Column, Column separator ",")->Column, funcs:min(Column)->Column, funcs:avg(Column)->Column, funcs:firstrow(Column)->planner__cascades__integration.t.a
|
||||
└─Projection root cast(planner__cascades__integration.t.a, var_string(20))->Column, cast(planner__cascades__integration.t.b, var_string(20))->Column, planner__cascades__integration.t.b->Column, div(cast(planner__cascades__integration.t.a, decimal(10,0) BINARY), cast(planner__cascades__integration.t.b, decimal(10,0) BINARY))->Column, planner__cascades__integration.t.a->Column, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select group_concat(a, b), min(b), avg(a / b), a from t group by (a+b), a order by a;
|
||||
@ -467,9 +467,9 @@ group_concat(a, b) min(b) avg(a / b) a
|
||||
444 44 0.09090909 4
|
||||
explain format="plan_tree" select approx_percentile(a, 50) from t order by b;
|
||||
id task access object operator info
|
||||
Projection root Column#3->Column#4
|
||||
Projection root Column
|
||||
└─Sort root planner__cascades__integration.t.b
|
||||
└─HashAgg root funcs:approx_percentile(planner__cascades__integration.t.a, 50)->Column#3, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─HashAgg root funcs:approx_percentile(planner__cascades__integration.t.a, 50)->Column, funcs:firstrow(planner__cascades__integration.t.b)->planner__cascades__integration.t.b
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_percentile(a, 50) from t order by b;
|
||||
@ -485,8 +485,8 @@ set session tidb_enable_cascades_planner = 1;
|
||||
set @@session.tidb_opt_distinct_agg_push_down = 1;
|
||||
explain format="plan_tree" select /*+ HASH_AGG() */ avg(distinct a) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:avg(distinct Column#6)->Column#5
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column#6
|
||||
HashAgg root funcs:avg(distinct Column)->Column
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.a,
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -495,20 +495,20 @@ avg(distinct a)
|
||||
1.5000
|
||||
explain format="plan_tree" select /*+ HASH_AGG() */ a, count(distinct a) from t;
|
||||
id task access object operator info
|
||||
Projection root planner__cascades__integration.t.a, Column#5
|
||||
└─HashAgg root funcs:count(distinct planner__cascades__integration.t.a)->Column#5, funcs:firstrow(Column#6)->planner__cascades__integration.t.a
|
||||
Projection root planner__cascades__integration.t.a, Column
|
||||
└─HashAgg root funcs:count(distinct planner__cascades__integration.t.a)->Column, funcs:firstrow(Column)->planner__cascades__integration.t.a
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.a, funcs:firstrow(planner__cascades__integration.t.a)->Column#6
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.a, funcs:firstrow(planner__cascades__integration.t.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select /*+ HASH_AGG() */ a, count(distinct a) from t;
|
||||
a count(distinct a)
|
||||
1 2
|
||||
explain format="plan_tree" select /*+ HASH_AGG() */ avg(b), c, avg(b), count(distinct A, B), count(distinct A), count(distinct c), sum(b) from t group by c;
|
||||
id task access object operator info
|
||||
Projection root Column#5, planner__cascades__integration.t.c, Column#5, Column#6, Column#7, Column#8, Column#9
|
||||
└─HashAgg root group by:planner__cascades__integration.t.c, funcs:avg(Column#10, Column#11)->Column#5, funcs:count(distinct planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column#6, funcs:count(distinct planner__cascades__integration.t.a)->Column#7, funcs:count(distinct planner__cascades__integration.t.c)->Column#8, funcs:sum(Column#12)->Column#9, funcs:firstrow(planner__cascades__integration.t.c)->planner__cascades__integration.t.c
|
||||
Projection root Column, planner__cascades__integration.t.c, Column, Column, Column, Column, Column
|
||||
└─HashAgg root group by:planner__cascades__integration.t.c, funcs:avg(Column, Column)->Column, funcs:count(distinct planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column, funcs:count(distinct planner__cascades__integration.t.a)->Column, funcs:count(distinct planner__cascades__integration.t.c)->Column, funcs:sum(Column)->Column, funcs:firstrow(planner__cascades__integration.t.c)->planner__cascades__integration.t.c
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.a, planner__cascades__integration.t.b, planner__cascades__integration.t.c, funcs:count(planner__cascades__integration.t.b)->Column#10, funcs:sum(planner__cascades__integration.t.b)->Column#11, funcs:sum(planner__cascades__integration.t.b)->Column#12
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.a, planner__cascades__integration.t.b, planner__cascades__integration.t.c, funcs:count(planner__cascades__integration.t.b)->Column, funcs:sum(planner__cascades__integration.t.b)->Column, funcs:sum(planner__cascades__integration.t.b)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select /*+ HASH_AGG() */ avg(b), c, avg(b), count(distinct A, B), count(distinct A), count(distinct c), sum(b) from t group by c;
|
||||
avg(b) c avg(b) count(distinct A, B) count(distinct A) count(distinct c) sum(b)
|
||||
@ -517,7 +517,7 @@ avg(b) c avg(b) count(distinct A, B) count(distinct A) count(distinct c) sum(b)
|
||||
2.0000 NULL 2.0000 1 1 0 2
|
||||
explain format="plan_tree" select /*+ STREAM_AGG() */ count(distinct c) from t group by c;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:planner__cascades__integration.t.c,
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:true, stats:pseudo
|
||||
@ -528,7 +528,7 @@ count(distinct c)
|
||||
1
|
||||
explain format="plan_tree" select /*+ STREAM_AGG() */ count(distinct c) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
StreamAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:false, stats:pseudo
|
||||
select /*+ STREAM_AGG() */ count(distinct c) from t;
|
||||
@ -536,7 +536,7 @@ count(distinct c)
|
||||
2
|
||||
explain format="plan_tree" select /*+ HASH_AGG() */ count(distinct c) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
HashAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.c,
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:false, stats:pseudo
|
||||
@ -545,7 +545,7 @@ count(distinct c)
|
||||
2
|
||||
explain format="plan_tree" select count(distinct c) from t group by c;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:planner__cascades__integration.t.c,
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:true, stats:pseudo
|
||||
@ -556,7 +556,7 @@ count(distinct c)
|
||||
1
|
||||
explain format="plan_tree" select count(distinct c) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
HashAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__cascades__integration.t.c,
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:false, stats:pseudo
|
||||
@ -573,8 +573,8 @@ set session tidb_enable_cascades_planner = 1;
|
||||
set @@session.tidb_opt_distinct_agg_push_down = 0;
|
||||
explain format="plan_tree" select /*+ HASH_AGG(), AGG_TO_COP() */ avg(distinct a) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:avg(distinct Column#6)->Column#5
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column#6
|
||||
HashAgg root funcs:avg(distinct Column)->Column
|
||||
└─Projection root cast(planner__cascades__integration.t.a, decimal(10,0) BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select /*+ HASH_AGG(), AGG_TO_COP() */ avg(distinct a) from t;
|
||||
@ -582,8 +582,8 @@ avg(distinct a)
|
||||
1.5000
|
||||
explain format="plan_tree" select /*+ HASH_AGG(), AGG_TO_COP() */ a, count(distinct a) from t;
|
||||
id task access object operator info
|
||||
Projection root planner__cascades__integration.t.a, Column#5
|
||||
└─HashAgg root funcs:count(distinct planner__cascades__integration.t.a)->Column#5, funcs:firstrow(planner__cascades__integration.t.a)->planner__cascades__integration.t.a
|
||||
Projection root planner__cascades__integration.t.a, Column
|
||||
└─HashAgg root funcs:count(distinct planner__cascades__integration.t.a)->Column, funcs:firstrow(planner__cascades__integration.t.a)->planner__cascades__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select /*+ HASH_AGG(), AGG_TO_COP() */ a, count(distinct a) from t;
|
||||
@ -591,9 +591,9 @@ a count(distinct a)
|
||||
1 2
|
||||
explain format="plan_tree" select /*+ HASH_AGG(), AGG_TO_COP() */ avg(b), c, avg(b), count(distinct A, B), count(distinct A), count(distinct c), sum(b) from t group by c;
|
||||
id task access object operator info
|
||||
Projection root Column#5, planner__cascades__integration.t.c, Column#5, Column#6, Column#7, Column#8, Column#9
|
||||
└─HashAgg root group by:Column#18, funcs:avg(Column#14)->Column#5, funcs:count(distinct Column#15, Column#16)->Column#6, funcs:count(distinct Column#17)->Column#7, funcs:count(distinct Column#18)->Column#8, funcs:sum(Column#19)->Column#9, funcs:firstrow(Column#20)->planner__cascades__integration.t.c
|
||||
└─Projection root cast(planner__cascades__integration.t.b, decimal(10,0) BINARY)->Column#14, planner__cascades__integration.t.a->Column#15, planner__cascades__integration.t.b->Column#16, planner__cascades__integration.t.a->Column#17, planner__cascades__integration.t.c->Column#18, cast(planner__cascades__integration.t.b, decimal(10,0) BINARY)->Column#19, planner__cascades__integration.t.c->Column#20
|
||||
Projection root Column, planner__cascades__integration.t.c, Column, Column, Column, Column, Column
|
||||
└─HashAgg root group by:Column, funcs:avg(Column)->Column, funcs:count(distinct Column, Column)->Column, funcs:count(distinct Column)->Column, funcs:count(distinct Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->planner__cascades__integration.t.c
|
||||
└─Projection root cast(planner__cascades__integration.t.b, decimal(10,0) BINARY)->Column, planner__cascades__integration.t.a->Column, planner__cascades__integration.t.b->Column, planner__cascades__integration.t.a->Column, planner__cascades__integration.t.c->Column, cast(planner__cascades__integration.t.b, decimal(10,0) BINARY)->Column, planner__cascades__integration.t.c->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select /*+ HASH_AGG(), AGG_TO_COP() */ avg(b), c, avg(b), count(distinct A, B), count(distinct A), count(distinct c), sum(b) from t group by c;
|
||||
@ -603,7 +603,7 @@ avg(b) c avg(b) count(distinct A, B) count(distinct A) count(distinct c) sum(b)
|
||||
2.0000 NULL 2.0000 1 1 0 2
|
||||
explain format="plan_tree" select /*+ STREAM_AGG(), AGG_TO_COP() */ count(distinct c) from t group by c;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:true, stats:pseudo
|
||||
select /*+ STREAM_AGG(), AGG_TO_COP() */ count(distinct c) from t group by c;
|
||||
@ -613,7 +613,7 @@ count(distinct c)
|
||||
1
|
||||
explain format="plan_tree" select /*+ STREAM_AGG(), AGG_TO_COP() */ count(distinct c) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
StreamAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:false, stats:pseudo
|
||||
select /*+ STREAM_AGG(), AGG_TO_COP() */ count(distinct c) from t;
|
||||
@ -621,7 +621,7 @@ count(distinct c)
|
||||
2
|
||||
explain format="plan_tree" select /*+ HASH_AGG(), AGG_TO_COP() */ count(distinct c) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
HashAgg root funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:false, stats:pseudo
|
||||
select /*+ HASH_AGG(), AGG_TO_COP() */ count(distinct c) from t;
|
||||
@ -629,7 +629,7 @@ count(distinct c)
|
||||
2
|
||||
explain format="plan_tree" select /*+ AGG_TO_COP() */ count(distinct c) from t group by c;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column#5
|
||||
StreamAgg root group by:planner__cascades__integration.t.c, funcs:count(distinct planner__cascades__integration.t.c)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:c(c) keep order:true, stats:pseudo
|
||||
select /*+ AGG_TO_COP() */ count(distinct c) from t group by c;
|
||||
@ -682,7 +682,7 @@ a
|
||||
3
|
||||
explain format="plan_tree" select * from ((select a as aa from t t1) union all (select b as aa from t t2)) as t3 order by aa;
|
||||
id task access object operator info
|
||||
Sort root Column#5
|
||||
Sort root Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -712,10 +712,10 @@ a b lag(a,1) over (order by b)
|
||||
4 44 3
|
||||
explain format="plan_tree" select * from (select a+1 as c, a+b as d from t) as t1 order by c+d limit 10;
|
||||
id task access object operator info
|
||||
Projection root plus(planner__cascades__integration.t.a, 1)->Column#3, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column#4
|
||||
Projection root plus(planner__cascades__integration.t.a, 1)->Column, plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)->Column
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b
|
||||
└─TopN root Column#5, offset:0, count:10
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(plus(planner__cascades__integration.t.a, 1), plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b))->Column#5
|
||||
└─TopN root Column, offset:0, count:10
|
||||
└─Projection root planner__cascades__integration.t.a, planner__cascades__integration.t.b, plus(plus(planner__cascades__integration.t.a, 1), plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b))->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] plus(plus(planner__cascades__integration.t.a, 1), plus(planner__cascades__integration.t.a, planner__cascades__integration.t.b)), offset:0, count:10
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -832,7 +832,7 @@ insert into t2 values (1, 11), (2, 22), (3, 33);
|
||||
set session tidb_enable_cascades_planner = 1;
|
||||
explain format="plan_tree" select a = (select a from t2 where t1.b = t2.b order by a limit 1) from t1;
|
||||
id task access object operator info
|
||||
Projection root eq(planner__cascades__integration.t1.a, planner__cascades__integration.t2.a)->Column#7
|
||||
Projection root eq(planner__cascades__integration.t1.a, planner__cascades__integration.t2.a)->Column
|
||||
└─Apply root CARTESIAN left outer join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -849,11 +849,11 @@ a = (select a from t2 where t1.b = t2.b order by a limit 1)
|
||||
NULL
|
||||
explain format="plan_tree" select sum(a), (select t1.a from t1 where t1.a = t2.a limit 1), (select t1.b from t1 where t1.b = t2.b limit 1) from t2;
|
||||
id task access object operator info
|
||||
Projection root Column#7, planner__cascades__integration.t1.a, planner__cascades__integration.t1.b
|
||||
Projection root Column, planner__cascades__integration.t1.a, planner__cascades__integration.t1.b
|
||||
└─Apply root CARTESIAN left outer join, left side:Apply
|
||||
├─Apply(Build) root CARTESIAN left outer join, left side:StreamAgg
|
||||
│ ├─StreamAgg(Build) root funcs:sum(Column#12)->Column#7, funcs:firstrow(Column#13)->planner__cascades__integration.t2.a, funcs:firstrow(Column#14)->planner__cascades__integration.t2.b
|
||||
│ │ └─Projection root cast(planner__cascades__integration.t2.a, decimal(10,0) BINARY)->Column#12, planner__cascades__integration.t2.a->Column#13, planner__cascades__integration.t2.b->Column#14
|
||||
│ ├─StreamAgg(Build) root funcs:sum(Column)->Column, funcs:firstrow(Column)->planner__cascades__integration.t2.a, funcs:firstrow(Column)->planner__cascades__integration.t2.b
|
||||
│ │ └─Projection root cast(planner__cascades__integration.t2.a, decimal(10,0) BINARY)->Column, planner__cascades__integration.t2.a->Column, planner__cascades__integration.t2.b->Column
|
||||
│ │ └─TableReader root data:TableFullScan
|
||||
│ │ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
│ └─Limit(Probe) root offset:0, count:1
|
||||
@ -890,8 +890,8 @@ a
|
||||
set session tidb_enable_cascades_planner = 1;
|
||||
explain format="plan_tree" select USER, DB, COMMAND, TIME, STATE, INFO, `DIGEST` from information_schema.processlist where DB = "planner__cascades__integration";
|
||||
id task access object operator info
|
||||
Projection root Column#2, Column#4, Column#5, Column#6, Column#7, Column#8, Column#9
|
||||
└─Selection root eq(Column#4, "planner__cascades__integration")
|
||||
Projection root Column, Column, Column, Column, Column, Column, Column
|
||||
└─Selection root eq(Column, "planner__cascades__integration")
|
||||
└─MemTableScan root table:PROCESSLIST
|
||||
select USER, DB, COMMAND, TIME, STATE, INFO, `DIGEST` from information_schema.processlist where DB = "planner__cascades__integration";
|
||||
USER DB COMMAND TIME STATE INFO DIGEST
|
||||
|
||||
@ -32,12 +32,12 @@ a b
|
||||
4 4
|
||||
explain format='plan_tree' select t1.a from t1 group by t1.a having (a, count(1)) in (select a, b from t2);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__expression_rewriter.t2.a, planner__core__casetest__expression_rewriter.t1.a) eq(planner__core__casetest__expression_rewriter.t2.b, Column#7)]
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__expression_rewriter.t2.a, planner__core__casetest__expression_rewriter.t1.a) eq(planner__core__casetest__expression_rewriter.t2.b, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__expression_rewriter.t2.a, planner__core__casetest__expression_rewriter.t2.b, funcs:firstrow(planner__core__casetest__expression_rewriter.t2.a)->planner__core__casetest__expression_rewriter.t2.a, funcs:firstrow(planner__core__casetest__expression_rewriter.t2.b)->planner__core__casetest__expression_rewriter.t2.b
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__expression_rewriter.t2.a)), not(isnull(planner__core__casetest__expression_rewriter.t2.b))
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false
|
||||
└─HashAgg(Probe) root group by:planner__core__casetest__expression_rewriter.t1.a, funcs:count(1)->Column#7, funcs:firstrow(planner__core__casetest__expression_rewriter.t1.a)->planner__core__casetest__expression_rewriter.t1.a
|
||||
└─HashAgg(Probe) root group by:planner__core__casetest__expression_rewriter.t1.a, funcs:count(1)->Column, funcs:firstrow(planner__core__casetest__expression_rewriter.t1.a)->planner__core__casetest__expression_rewriter.t1.a
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] not(isnull(planner__core__casetest__expression_rewriter.t1.a))
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false
|
||||
@ -46,10 +46,10 @@ a
|
||||
1
|
||||
explain format='plan_tree' select t1.a from t1 group by t1.a having (a, count(1)) not in (select a, b from t2);
|
||||
id task access object operator info
|
||||
HashJoin root Null-aware anti semi join, left side:HashAgg, equal:[eq(planner__core__casetest__expression_rewriter.t1.a, planner__core__casetest__expression_rewriter.t2.a) eq(Column#7, planner__core__casetest__expression_rewriter.t2.b)]
|
||||
HashJoin root Null-aware anti semi join, left side:HashAgg, equal:[eq(planner__core__casetest__expression_rewriter.t1.a, planner__core__casetest__expression_rewriter.t2.a) eq(Column, planner__core__casetest__expression_rewriter.t2.b)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false
|
||||
└─HashAgg(Probe) root group by:planner__core__casetest__expression_rewriter.t1.a, funcs:count(1)->Column#7, funcs:firstrow(planner__core__casetest__expression_rewriter.t1.a)->planner__core__casetest__expression_rewriter.t1.a
|
||||
└─HashAgg(Probe) root group by:planner__core__casetest__expression_rewriter.t1.a, funcs:count(1)->Column, funcs:firstrow(planner__core__casetest__expression_rewriter.t1.a)->planner__core__casetest__expression_rewriter.t1.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false
|
||||
select t1.a from t1 group by t1.a having (a, count(1)) not in (select a, b from t2);
|
||||
@ -62,7 +62,7 @@ insert into t values ('2006-08-27 21:57:57', 0x373037343631313230);
|
||||
analyze table t all columns;
|
||||
explain format='plan_tree' select bit_or(a * b) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:bit_or(Column#6)->Column#4
|
||||
StreamAgg root funcs:bit_or(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:bit_or(cast(mul(cast(planner__core__casetest__expression_rewriter.t.a, double BINARY), cast(planner__core__casetest__expression_rewriter.t.b, double BINARY)), bigint BINARY))->Column#6
|
||||
└─StreamAgg cop[tikv] funcs:bit_or(cast(mul(cast(planner__core__casetest__expression_rewriter.t.a, double BINARY), cast(planner__core__casetest__expression_rewriter.t.b, double BINARY)), bigint BINARY))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false
|
||||
|
||||
@ -267,7 +267,7 @@ TopN root planner__core__casetest__hint__hint.t.a, offset:0, count:1
|
||||
└─TableRangeScan cop[tikv] table:t range:[-inf,10), keep order:false, stats:pseudo
|
||||
explain format='plan_tree' WITH CTE AS (select /*+ order_index(t1, idx_a) */ * from t1 where a<10 order by a limit 1) SELECT * FROM CTE WHERE CTE.a <18 union select * from cte where cte.b > 1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#8, Column#9, funcs:firstrow(Column#8)->Column#8, funcs:firstrow(Column#9)->Column#9
|
||||
HashAgg root group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Selection root lt(planner__core__casetest__hint__hint.t1.a, 18)
|
||||
│ └─CTEFullScan root CTE:cte data:CTE_0
|
||||
@ -282,7 +282,7 @@ CTE_0 root Non-Recursive CTE
|
||||
└─TableRowIDScan(Probe) cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' WITH CTE AS (select /*+ order_index(t, primary) */ * from t where a<10 order by a limit 1) SELECT * FROM CTE WHERE CTE.a <18 union select * from cte where cte.b > 1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#7, Column#8, funcs:firstrow(Column#7)->Column#7, funcs:firstrow(Column#8)->Column#8
|
||||
HashAgg root group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Selection root lt(planner__core__casetest__hint__hint.t.a, 18)
|
||||
│ └─CTEFullScan root CTE:cte data:CTE_0
|
||||
@ -296,7 +296,7 @@ CTE_0 root Non-Recursive CTE
|
||||
└─TableRangeScan cop[tikv] table:t range:[-inf,10), keep order:true, stats:pseudo
|
||||
explain format='plan_tree' WITH CTE AS (select /*+ no_order_index(t1, idx_a) */ * from t1 where a<10 order by a limit 1) SELECT * FROM CTE WHERE CTE.a <18 union select * from cte where cte.b > 1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#8, Column#9, funcs:firstrow(Column#8)->Column#8, funcs:firstrow(Column#9)->Column#9
|
||||
HashAgg root group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Selection root lt(planner__core__casetest__hint__hint.t1.a, 18)
|
||||
│ └─CTEFullScan root CTE:cte data:CTE_0
|
||||
@ -311,7 +311,7 @@ CTE_0 root Non-Recursive CTE
|
||||
└─TableRowIDScan(Probe) cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' WITH CTE AS (select /*+ no_order_index(t, primary) */ * from t where a<10 order by a limit 1) SELECT * FROM CTE WHERE CTE.a <18 union select * from cte where cte.b > 1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#7, Column#8, funcs:firstrow(Column#7)->Column#7, funcs:firstrow(Column#8)->Column#8
|
||||
HashAgg root group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Selection root lt(planner__core__casetest__hint__hint.t.a, 18)
|
||||
│ └─CTEFullScan root CTE:cte data:CTE_0
|
||||
@ -365,8 +365,8 @@ create definer='root'@'localhost' view v1 as select t.a, t.b from t join (select
|
||||
create definer='root'@'localhost' view v2 as select t.a, t.b from t join (select count(*) as a from t1 join v1 on t1.b=v1.b group by v1.a) tt on t.a = tt.a;
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v@sel_1 .@sel_2), merge_join(t1@qb_v_2) */ * from v;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#10)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#10
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t1.b, right key:planner__core__casetest__hint__hint.t2.b
|
||||
│ ├─Sort(Build) root planner__core__casetest__hint__hint.t2.b
|
||||
│ │ └─TableReader root data:Selection
|
||||
@ -381,9 +381,9 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v@sel_1 .@sel_2), merge_join(t1@qb_v_2), stream_agg(@qb_v_2), qb_name(qb_v_1, v@sel_1 .@sel_1), merge_join(t@qb_v_1) */ * from v;
|
||||
id task access object operator info
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column#10
|
||||
├─Sort(Build) root Column#10
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#10
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column
|
||||
├─Sort(Build) root Column
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t1.b, right key:planner__core__casetest__hint__hint.t2.b
|
||||
│ ├─Sort(Build) root planner__core__casetest__hint__hint.t2.b
|
||||
@ -400,10 +400,10 @@ MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, ri
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v1@sel_1 . v@sel_2 .@sel_2), merge_join(t1@qb_v_2) */ * from v1;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#17)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#17
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#16)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#16
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t1.b, right key:planner__core__casetest__hint__hint.t2.b
|
||||
│ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t2.b
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
@ -425,10 +425,10 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v1@sel_1 . v@sel_2 .@sel_2), merge_join(t1@qb_v_2), stream_agg(@qb_v_2), qb_name(qb_v_1, v1@sel_1 . v@sel_2 .@sel_1), merge_join(t@qb_v_1) */ * from v1;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#17)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#17
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#16)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#16
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ │ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t1.b, right key:planner__core__casetest__hint__hint.t2.b
|
||||
│ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t2.b
|
||||
@ -453,12 +453,12 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v2@sel_1 . v1@sel_2 . v@sel_2 .@sel_2), merge_join(t1@qb_v_2) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#24)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#24
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#23)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#23
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#22)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#22
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t1.b, right key:planner__core__casetest__hint__hint.t2.b
|
||||
│ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t2.b
|
||||
│ │ │ │ └─TableReader root data:Selection
|
||||
@ -487,12 +487,12 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v2@sel_1 . v1@sel_2 . v@sel_2 .@sel_2), merge_join(t1@qb_v_2), stream_agg(@qb_v_2), qb_name(qb_v_1, v2@sel_1 . v1@sel_2 . v@sel_2 .@sel_1), merge_join(t@qb_v_1) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#24)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#24
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#23)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#23
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#22)]
|
||||
│ │ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#22
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ │ │ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t1.b, right key:planner__core__casetest__hint__hint.t2.b
|
||||
│ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t2.b
|
||||
@ -524,10 +524,10 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v1_2, v1@sel_1 .@sel_2), merge_join(t1@qb_v1_2) */ * from v1;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#17)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#17
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#16)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#16
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t1.b, planner__core__casetest__hint__hint.t2.b)]
|
||||
│ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__hint__hint.t1.b))
|
||||
@ -549,12 +549,12 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v1_2, v1@sel_1 .@sel_2), merge_join(t1@qb_v1_2), stream_agg(@qb_v1_2), qb_name(qb_v1_1, v1@sel_1 .@sel_1), merge_join(t@qb_v1_1) */ * from v1;
|
||||
id task access object operator info
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column#17
|
||||
├─Sort(Build) root Column#17
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#17
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column
|
||||
├─Sort(Build) root Column
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─Sort root planner__core__casetest__hint__hint.t.a
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#16)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#16
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t1.b, planner__core__casetest__hint__hint.t2.b)]
|
||||
│ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__hint__hint.t1.b))
|
||||
@ -577,12 +577,12 @@ MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, ri
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v1_2, v2@sel_1 . v1@sel_2 .@sel_2), merge_join(t1@qb_v1_2) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#24)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#24
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#23)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#23
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#22)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#22
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t1.b, planner__core__casetest__hint__hint.t2.b)]
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__hint__hint.t1.b))
|
||||
@ -611,13 +611,13 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v1_2, v2@sel_1 . v1@sel_2 .@sel_2), merge_join(t1@qb_v1_2), stream_agg(@qb_v1_2), qb_name(qb_v1_1, v2@sel_1 . v1@sel_2 .@sel_1), merge_join(t@qb_v1_1) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#24)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#24
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#23)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#23
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─Sort root planner__core__casetest__hint__hint.t.a
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#22)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#22
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t1.b, planner__core__casetest__hint__hint.t2.b)]
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__hint__hint.t1.b))
|
||||
@ -648,12 +648,12 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v2_2, v2@sel_1 .@sel_2), merge_join(t1@qb_v2_2) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#24)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#24
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#23)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#23
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#22)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#22
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t1.b, planner__core__casetest__hint__hint.t2.b)]
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__hint__hint.t1.b))
|
||||
@ -682,14 +682,14 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v2_2, v2@sel_1 .@sel_2), merge_join(t1@qb_v2_2), stream_agg(@qb_v2_2), qb_name(qb_v2_1, v2), merge_join(t@qb_v2_1) */ * from v2;
|
||||
id task access object operator info
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column#24
|
||||
├─Sort(Build) root Column#24
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#24
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column
|
||||
├─Sort(Build) root Column
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─Sort root planner__core__casetest__hint__hint.t.a
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#23)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#23
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#22)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#22
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t1.b, planner__core__casetest__hint__hint.t2.b)]
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
│ │ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__hint__hint.t1.b))
|
||||
@ -732,8 +732,8 @@ create definer='root'@'localhost' view v3 as select /*+ merge_join(t) */ t.a, t.
|
||||
create definer='root'@'localhost' view v4 as select * from t4 where a > 2 and b > 3;
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v, v@sel_1 .@sel_2), qb_name(qb_v, v@sel_1 .@sel_1), merge_join(t1@qb_v) */ * from v;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#13)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -754,10 +754,10 @@ Level Code Message
|
||||
Warning 1815 Duplicate query block name qb_v for view's query block hint, only the first one is effective
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v, v1@sel_1 .v@sel_2 .@sel_2), qb_name(qb_v, v1@sel_1 .v@sel_2 .@sel_1), merge_join(t1@qb_v) */ * from v1;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -785,12 +785,12 @@ Level Code Message
|
||||
Warning 1815 Duplicate query block name qb_v for view's query block hint, only the first one is effective
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v, v2@sel_1 .v1@sel_2 .v@sel_2 .@sel_2), qb_name(qb_v, v2@sel_1 .v1@sel_2 .v@sel_2 .@sel_1), merge_join(t1@qb_v) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ │ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -825,10 +825,10 @@ Level Code Message
|
||||
Warning 1815 Duplicate query block name qb_v for view's query block hint, only the first one is effective
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v1_2, v@sel_1 .@sel_2), merge_join(t1@qb_v1_2) */ * from v1;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -854,12 +854,12 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v1_2 is unused, please check whether the table list in the qb_name hint qb_v1_2 is correct
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v1_2, v2@sel_1 . v@sel_1 .@sel_2), merge_join(t1@qb_v1_2) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -892,12 +892,12 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v1_2 is unused, please check whether the table list in the qb_name hint qb_v1_2 is correct
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v2_2, vv@sel_1 .@sel_2), merge_join(t1@qb_v2_2) */ * from v2 vv;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -930,12 +930,12 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v2_2, v2@sel_1 .@sel_2), merge_join(t1@qb_v2_2) */ * from v2 vv;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -968,8 +968,8 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v2_2 is unused, please check whether the table list in the qb_name hint qb_v2_2 is correct
|
||||
explain format='plan_tree' select * from (select /*+ qb_name(qb_v_2, v@sel_1 .@sel_2), merge_join(t1@qb_v_2) */ * from v) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#13)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ ├─TableReader(Build) root data:Selection
|
||||
@ -988,8 +988,8 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v_2 is unused, please check whether the table list in the qb_name hint qb_v_2 is correct
|
||||
explain format='plan_tree' select * from (select /*+ qb_name(qb_v_2, v.@sel_2), merge_join(t1@qb_v_2), stream_agg(@qb_v_2), qb_name(qb_v_1, v@sel_1 .@sel1), merge_join(t@qb_v_1) */ * from v) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#13)]
|
||||
├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
@ -1011,10 +1011,10 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v_1 is unused, please check whether the table list in the qb_name hint qb_v_1 is correct
|
||||
explain format='plan_tree' select * from (select /*+ qb_name(qb_v_2, v1@sel_1 . v@sel_2 .@sel_2), merge_join(t1@qb_v_2) */ * from v1) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -1040,10 +1040,10 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v_2 is unused, please check whether the table list in the qb_name hint qb_v_2 is correct
|
||||
explain format='plan_tree' select * from (select /*+ qb_name(qb_v_2, v1.v@sel_2 .@sel_2), merge_join(t1@qb_v_2), stream_agg(@qb_v_2), qb_name(qb_v_1, v1@sel_1 . v@sel_2 .@sel_1), merge_join(t@qb_v_1) */ * from v1) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
@ -1072,8 +1072,8 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v_1 is unused, please check whether the table list in the qb_name hint qb_v_1 is correct
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v@sel_2 .@sel_2) */ * from (select /*+ merge_join(t1@qb_v_2) */ * from v) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#13)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -1092,8 +1092,8 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v@sel_2 .@sel_2), qb_name(qb_v_1, v@sel_2 .@sel1) */ * from (select /*+ merge_join(t1@qb_v_2), stream_agg(@qb_v_2), merge_join(t@qb_v_1) */ * from v) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#13)]
|
||||
├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
@ -1115,10 +1115,10 @@ Level Code Message
|
||||
Warning 1815 The qb_name hint qb_v_1 is unused, please check whether the table list in the qb_name hint qb_v_1 is correct
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v1@sel_2 . v@sel_2 .@sel_2) */ * from (select /*+ merge_join(t1@qb_v_2) */ * from v1) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -1144,10 +1144,10 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v1@sel_2 . v@sel_2 .@sel_2), qb_name(qb_v_1, v1@sel_2 . v@sel_2 .@sel_1) */ * from (select /*+ merge_join(t1@qb_v_2), stream_agg(@qb_v_2), merge_join(t@qb_v_1) */ * from v1) t;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─StreamAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
@ -1176,12 +1176,12 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v1_2, v2. v1@sel_2 .@sel_2), qb_name(qb_v1_1, v2@sel_1 . v1@sel_2 .@sel_1), merge_join(t1@qb_v1_2, t@qb_v1_1), merge_join(t1@qb_v1_2) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -1216,12 +1216,12 @@ Level Code Message
|
||||
Warning 1815 Only one query block name is allowed in a view hint, otherwise the hint will be invalid
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v2@sel_1 . v1@sel_2 . v@sel_2 .@sel_2), qb_name(qb_v_1, v2@sel_1 . v1@sel_2 . v@sel_2 .@sel_1), merge_join(t1@qb_v_2, t3@qb_v_2) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t2.a, right key:planner__core__casetest__hint__hint.t3.a
|
||||
│ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t3.a
|
||||
│ │ │ │ └─TableReader root data:Selection
|
||||
@ -1256,12 +1256,12 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v2@sel_1 . v1@sel_2 . v@sel_2 .@sel_2), qb_name(qb_v_1, v2@sel_1 . v1@sel_2 . v@sel_2 .@sel_1), merge_join(@qb_v_2 t1, t3) */ * from v2;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t2.a, right key:planner__core__casetest__hint__hint.t3.a
|
||||
│ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t3.a
|
||||
│ │ │ │ └─TableReader root data:Selection
|
||||
@ -1296,8 +1296,8 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v .@sel_2), merge_join(t1@qb_v_2) */ * from v;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#13)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -1316,9 +1316,9 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_1, v@sel_1), merge_join(t@qb_v_1) */ * from v;
|
||||
id task access object operator info
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column#13
|
||||
├─Sort(Build) root Column#13
|
||||
│ └─HashAgg root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column
|
||||
├─Sort(Build) root Column
|
||||
│ └─HashAgg root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ ├─TableReader(Build) root data:Selection
|
||||
@ -1336,10 +1336,10 @@ MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, ri
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_2, v1 .v@sel_2 .@sel_2), merge_join(t1@qb_v_2) */ * from v1;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -1365,10 +1365,10 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v_1, v1 .v@sel_2), merge_join(t@qb_v_1) */ * from v1;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#20)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#20
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#19)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#19
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -1394,8 +1394,8 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ merge_join(t1@qb_v_2), qb_name(qb_v_2, v@sel_1 .@sel_2) */ * from v;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#13)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─MergeJoin(Build) root inner join, left key:planner__core__casetest__hint__hint.t2.b, right key:planner__core__casetest__hint__hint.t1.b
|
||||
│ │ ├─Sort(Build) root planner__core__casetest__hint__hint.t1.b
|
||||
@ -1414,9 +1414,9 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Co
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ merge_join(t@qb_v_1), stream_agg(@qb_v_2), qb_name(qb_v_2, v@sel_1 .@sel_2), qb_name(qb_v_1, v@sel_1 .@sel_1) */ * from v;
|
||||
id task access object operator info
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column#13
|
||||
├─Sort(Build) root Column#13
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#13
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column
|
||||
├─Sort(Build) root Column
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ └─Sort root planner__core__casetest__hint__hint.t2.a
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
@ -1435,14 +1435,14 @@ MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, ri
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v3_2, v3@sel_1 .@sel_2), merge_join(t1@qb_v3_2) */ * from v3;
|
||||
id task access object operator info
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column#27
|
||||
├─Sort(Build) root Column#27
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:Column
|
||||
├─Sort(Build) root Column
|
||||
│ └─StreamAgg root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─Sort root planner__core__casetest__hint__hint.t.a
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -1476,12 +1476,12 @@ MergeJoin root inner join, left key:planner__core__casetest__hint__hint.t.a, ri
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ qb_name(qb_v3_2, v3@sel_1 .@sel_2), merge_join(t1@qb_v3_2), hash_agg(@qb_v3_2), qb_name(qb_v3_1, v3@sel_1 .@sel_1), hash_join(t@qb_v3_1) */ * from v3;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#27)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#27
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#26)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column#26
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column#25)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.a, funcs:count(1)->Column
|
||||
│ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, Column)]
|
||||
│ │ ├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t2.a, funcs:count(1)->Column
|
||||
│ │ │ └─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.a, planner__core__casetest__hint__hint.t3.a)]
|
||||
│ │ │ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__hint__hint.t2.b, planner__core__casetest__hint__hint.t1.b)]
|
||||
│ │ │ │ ├─TableReader(Build) root data:Selection
|
||||
@ -1683,11 +1683,11 @@ Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints.
|
||||
explain format='plan_tree' select * from t t1, (select /*+ HASH_AGG() */ b, max(a) from t t2 group by b) t2 where t1.b = t2.b order by t1.b;
|
||||
id task access object operator info
|
||||
Sort root planner__core__casetest__hint__hint.t.b
|
||||
└─Projection root planner__core__casetest__hint__hint.t.a, planner__core__casetest__hint__hint.t.b, planner__core__casetest__hint__hint.t.c, planner__core__casetest__hint__hint.t.b, Column#7
|
||||
└─Projection root planner__core__casetest__hint__hint.t.a, planner__core__casetest__hint__hint.t.b, planner__core__casetest__hint__hint.t.c, planner__core__casetest__hint__hint.t.b, Column
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__hint__hint.t.b, planner__core__casetest__hint__hint.t.b)]
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.b, funcs:max(Column#14)->Column#7, funcs:firstrow(planner__core__casetest__hint__hint.t.b)->planner__core__casetest__hint__hint.t.b
|
||||
├─HashAgg(Build) root group by:planner__core__casetest__hint__hint.t.b, funcs:max(Column)->Column, funcs:firstrow(planner__core__casetest__hint__hint.t.b)->planner__core__casetest__hint__hint.t.b
|
||||
│ └─IndexReader root index:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__hint__hint.t.b, funcs:max(planner__core__casetest__hint__hint.t.a)->Column#14
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__hint__hint.t.b, funcs:max(planner__core__casetest__hint__hint.t.a)->Column
|
||||
│ └─IndexFullScan cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:Selection
|
||||
└─Selection cop[tikv] not(isnull(planner__core__casetest__hint__hint.t.b))
|
||||
|
||||
@ -323,8 +323,8 @@ a b c d a b c d
|
||||
3 333 3.3000000000 13 3 333 3.3000000000 13
|
||||
explain format='plan_tree' select /*+ inl_merge_join(t1,t2) */ t2.a, t2.c, t2.d from t t1 left join t t2 on t1.a = t2.c;
|
||||
id task access object operator info
|
||||
HashJoin root left outer join, left side:Projection, equal:[eq(Column#9, planner__core__casetest__index__index.t.c)]
|
||||
├─Projection(Build) root cast(planner__core__casetest__index__index.t.a, decimal(10,0) BINARY)->Column#9
|
||||
HashJoin root left outer join, left side:Projection, equal:[eq(Column, planner__core__casetest__index__index.t.c)]
|
||||
├─Projection(Build) root cast(planner__core__casetest__index__index.t.a, decimal(10,0) BINARY)->Column
|
||||
│ └─IndexReader root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:c(c) keep order:false
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
@ -361,10 +361,10 @@ explain format='plan_tree' select * from t2 where c1 < all(select /*+ use_index
|
||||
id task access object operator info
|
||||
Sort root planner__core__casetest__index__index.t2.c1
|
||||
└─Projection root planner__core__casetest__index__index.t2.c1, planner__core__casetest__index__index.t2.c2, planner__core__casetest__index__index.t2.c3
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.t2.c1, Column#8), if(ne(Column#9, 0), NULL, 1)), or(eq(Column#10, 0), if(isnull(planner__core__casetest__index__index.t2.c1), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.t2.c1, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(planner__core__casetest__index__index.t2.c1), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__index__index.t1.c1)->Column#8, funcs:sum(0)->Column#9, funcs:count(1)->Column#10
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__index__index.t1.c1)->Column, funcs:sum(0)->Column, funcs:count(1)->Column
|
||||
└─IndexMerge root type: union
|
||||
├─Selection(Build) cop[tikv] eq(planner__core__casetest__index__index.t2.c3, 10)
|
||||
│ └─TableRangeScan cop[tikv] table:t1 range:[10,10], keep order:false, stats:pseudo
|
||||
@ -380,10 +380,10 @@ explain format='plan_tree' select * from t2 where c1 < all(select /*+ use_index
|
||||
id task access object operator info
|
||||
Sort root planner__core__casetest__index__index.t2.c1
|
||||
└─Projection root planner__core__casetest__index__index.t2.c1, planner__core__casetest__index__index.t2.c2, planner__core__casetest__index__index.t2.c3
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.t2.c1, Column#8), if(ne(Column#9, 0), NULL, 1)), or(eq(Column#10, 0), if(isnull(planner__core__casetest__index__index.t2.c1), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.t2.c1, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(planner__core__casetest__index__index.t2.c1), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__index__index.t1.c1)->Column#8, funcs:sum(0)->Column#9, funcs:count(1)->Column#10
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__index__index.t1.c1)->Column, funcs:sum(0)->Column, funcs:count(1)->Column
|
||||
└─IndexMerge root type: union
|
||||
├─Selection(Build) cop[tikv] eq(planner__core__casetest__index__index.t2.c3, 10)
|
||||
│ └─TableRangeScan cop[tikv] table:t1 range:[10,10], keep order:false, stats:pseudo
|
||||
@ -398,10 +398,10 @@ explain format='plan_tree' select * from t2 where c1 < all(select /*+ use_index
|
||||
id task access object operator info
|
||||
Sort root planner__core__casetest__index__index.t2.c1
|
||||
└─Projection root planner__core__casetest__index__index.t2.c1, planner__core__casetest__index__index.t2.c2, planner__core__casetest__index__index.t2.c3
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.t2.c1, Column#8), if(ne(Column#9, 0), NULL, 1)), or(eq(Column#10, 0), if(isnull(planner__core__casetest__index__index.t2.c1), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.t2.c1, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(planner__core__casetest__index__index.t2.c1), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__index__index.t1.c1)->Column#8, funcs:sum(0)->Column#9, funcs:count(1)->Column#10
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__index__index.t1.c1)->Column, funcs:sum(0)->Column, funcs:count(1)->Column
|
||||
└─IndexMerge root type: union
|
||||
├─Selection(Build) cop[tikv] eq(planner__core__casetest__index__index.t1.c1, planner__core__casetest__index__index.t2.c3)
|
||||
│ └─TableRangeScan cop[tikv] table:t1 range:[10,+inf], keep order:false, stats:pseudo
|
||||
@ -416,11 +416,11 @@ c1 c2 c3
|
||||
explain format='plan_tree' select c_int from tt1 where c_decimal < all (select /*+ use_index_merge(tt2) */ c_decimal from tt2 where tt1.c_int = tt2.c_int and tt1.c_datetime > tt2.c_datetime and tt2.c_decimal = 9.060 or tt2.c_str <= 'interesting shtern' and tt1.c_int = tt2.c_int) order by 1;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__index__index.tt1.c_int
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.tt1.c_decimal, Column#9), if(ne(Column#10, 0), NULL, 1)), or(eq(Column#11, 0), if(isnull(planner__core__casetest__index__index.tt1.c_decimal), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(lt(planner__core__casetest__index__index.tt1.c_decimal, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(planner__core__casetest__index__index.tt1.c_decimal), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tt1 keep order:true, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:min(Column#14)->Column#9, funcs:sum(Column#15)->Column#10, funcs:count(1)->Column#11
|
||||
└─Projection root planner__core__casetest__index__index.tt2.c_decimal->Column#14, cast(isnull(planner__core__casetest__index__index.tt2.c_decimal), decimal(20,0) BINARY)->Column#15
|
||||
└─StreamAgg(Probe) root funcs:min(Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column
|
||||
└─Projection root planner__core__casetest__index__index.tt2.c_decimal->Column, cast(isnull(planner__core__casetest__index__index.tt2.c_decimal), decimal(20,0) BINARY)->Column
|
||||
└─IndexMerge root type: union
|
||||
├─Selection(Build) cop[tikv] eq(planner__core__casetest__index__index.tt1.c_int, planner__core__casetest__index__index.tt2.c_int)
|
||||
│ └─IndexRangeScan cop[tikv] table:tt2, index:c_decimal(c_decimal) range:[9.060000,9.060000], keep order:false, stats:pseudo
|
||||
@ -436,11 +436,11 @@ c_int
|
||||
explain format='plan_tree' select c_int from tt1 where c_decimal > all (select /*+ use_index_merge(tt2) */ c_decimal from tt2 where tt2.c_int = 7 and tt2.c_int < tt1.c_decimal or tt2.c_str >= 'zzzzzzzzzzzzzzzzzzz' and tt1.c_int = tt2.c_int) order by 1;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__index__index.tt1.c_int
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(planner__core__casetest__index__index.tt1.c_decimal, Column#9), if(ne(Column#10, 0), NULL, 1)), or(eq(Column#11, 0), if(isnull(planner__core__casetest__index__index.tt1.c_decimal), NULL, 0)))
|
||||
└─Apply root CARTESIAN inner join, other cond:or(and(gt(planner__core__casetest__index__index.tt1.c_decimal, Column), if(ne(Column, 0), NULL, 1)), or(eq(Column, 0), if(isnull(planner__core__casetest__index__index.tt1.c_decimal), NULL, 0)))
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tt1 keep order:true, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:max(Column#14)->Column#9, funcs:sum(Column#15)->Column#10, funcs:count(1)->Column#11
|
||||
└─Projection root planner__core__casetest__index__index.tt2.c_decimal->Column#14, cast(isnull(planner__core__casetest__index__index.tt2.c_decimal), decimal(20,0) BINARY)->Column#15
|
||||
└─StreamAgg(Probe) root funcs:max(Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column
|
||||
└─Projection root planner__core__casetest__index__index.tt2.c_decimal->Column, cast(isnull(planner__core__casetest__index__index.tt2.c_decimal), decimal(20,0) BINARY)->Column
|
||||
└─IndexMerge root type: union
|
||||
├─Selection(Build) cop[tikv] lt(7, planner__core__casetest__index__index.tt1.c_decimal)
|
||||
│ └─TableRangeScan cop[tikv] table:tt2 range:[7,7], keep order:false, stats:pseudo
|
||||
|
||||
@ -110,14 +110,14 @@ set tidb_enable_clustered_index='ON';
|
||||
create table cluster_index_t(a int, b int, c int, primary key (a, b));
|
||||
explain format='plan_tree' (select max(a) from t) union (select min(a) from t);
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─StreamAgg root funcs:max(planner__core__casetest__integration.t.a)->Column#2
|
||||
├─StreamAgg root funcs:max(planner__core__casetest__integration.t.a)->Column
|
||||
│ └─Limit root offset:0, count:1
|
||||
│ └─TableReader root data:Limit
|
||||
│ └─Limit cop[tikv] offset:0, count:1
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:true, desc, stats:pseudo
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__integration.t.a)->Column#4
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__integration.t.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─TableReader root data:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -125,12 +125,12 @@ HashAgg root group by:Column#5, funcs:firstrow(Column#5)->Column#5
|
||||
explain format='plan_tree' select min(a), max(a) from cluster_index_t;
|
||||
id task access object operator info
|
||||
HashJoin root CARTESIAN inner join
|
||||
├─StreamAgg(Build) root funcs:max(planner__core__casetest__integration.cluster_index_t.a)->Column#5
|
||||
├─StreamAgg(Build) root funcs:max(planner__core__casetest__integration.cluster_index_t.a)->Column
|
||||
│ └─Limit root offset:0, count:1
|
||||
│ └─TableReader root data:Limit
|
||||
│ └─Limit cop[tikv] offset:0, count:1
|
||||
│ └─TableFullScan cop[tikv] table:cluster_index_t keep order:true, desc, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__integration.cluster_index_t.a)->Column#4
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__integration.cluster_index_t.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─TableReader root data:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -138,28 +138,28 @@ HashJoin root CARTESIAN inner join
|
||||
explain format='plan_tree' select min(b), max(b) from cluster_index_t where a = 1;
|
||||
id task access object operator info
|
||||
HashJoin root CARTESIAN inner join
|
||||
├─StreamAgg(Build) root funcs:max(planner__core__casetest__integration.cluster_index_t.b)->Column#5
|
||||
├─StreamAgg(Build) root funcs:max(planner__core__casetest__integration.cluster_index_t.b)->Column
|
||||
│ └─Limit root offset:0, count:1
|
||||
│ └─TableReader root data:Limit
|
||||
│ └─Limit cop[tikv] offset:0, count:1
|
||||
│ └─TableRangeScan cop[tikv] table:cluster_index_t range:[1,1], keep order:true, desc, stats:pseudo
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__integration.cluster_index_t.b)->Column#4
|
||||
└─StreamAgg(Probe) root funcs:min(planner__core__casetest__integration.cluster_index_t.b)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─TableReader root data:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
└─TableRangeScan cop[tikv] table:cluster_index_t range:[1,1], keep order:true, stats:pseudo
|
||||
explain format='plan_tree' select min(a), max(a) from cluster_index_t where b = 1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#4, funcs:max(Column#9)->Column#5
|
||||
StreamAgg root funcs:min(Column)->Column, funcs:max(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:min(planner__core__casetest__integration.cluster_index_t.a)->Column#8, funcs:max(planner__core__casetest__integration.cluster_index_t.a)->Column#9
|
||||
└─StreamAgg cop[tikv] funcs:min(planner__core__casetest__integration.cluster_index_t.a)->Column, funcs:max(planner__core__casetest__integration.cluster_index_t.a)->Column
|
||||
└─Selection cop[tikv] eq(planner__core__casetest__integration.cluster_index_t.b, 1)
|
||||
└─TableFullScan cop[tikv] table:cluster_index_t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select min(b), max(b) from cluster_index_t where b = 1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:min(Column#8)->Column#4, funcs:max(Column#9)->Column#5
|
||||
StreamAgg root funcs:min(Column)->Column, funcs:max(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:min(planner__core__casetest__integration.cluster_index_t.b)->Column#8, funcs:max(planner__core__casetest__integration.cluster_index_t.b)->Column#9
|
||||
└─StreamAgg cop[tikv] funcs:min(planner__core__casetest__integration.cluster_index_t.b)->Column, funcs:max(planner__core__casetest__integration.cluster_index_t.b)->Column
|
||||
└─Selection cop[tikv] eq(planner__core__casetest__integration.cluster_index_t.b, 1)
|
||||
└─TableFullScan cop[tikv] table:cluster_index_t keep order:false, stats:pseudo
|
||||
set tidb_enable_clustered_index=DEFAULT;
|
||||
@ -175,16 +175,16 @@ Projection root planner__core__casetest__integration.t.b
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─Selection(Probe) root not(isnull(planner__core__casetest__integration.t.a))
|
||||
└─Projection root planner__core__casetest__integration.t.a
|
||||
└─TopN root Column#7, offset:0, count:1
|
||||
└─Projection root planner__core__casetest__integration.t.a, plus(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)->Column#7
|
||||
└─TopN root Column, offset:0, count:1
|
||||
└─Projection root planner__core__casetest__integration.t.a, plus(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)->Column
|
||||
└─TableReader root data:TopN
|
||||
└─TopN cop[tikv] plus(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a), offset:0, count:1
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select t1.a from t t1 order by (t1.b = 1 and exists (select 1 from t t2 where t1.b = t2.b)) limit 1;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__integration.t.a
|
||||
└─TopN root Column#13, offset:0, count:1
|
||||
└─Projection root planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.b, Column#11, and(eq(planner__core__casetest__integration.t.b, 1), Column#11)->Column#13
|
||||
└─TopN root Column, offset:0, count:1
|
||||
└─Projection root planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.b, Column, and(eq(planner__core__casetest__integration.t.b, 1), Column)->Column
|
||||
└─HashJoin root left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.b)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
@ -192,10 +192,10 @@ Projection root planner__core__casetest__integration.t.a
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select b+b as x from t) t1, t t2 where t1.x=t2.b order by t1.x limit 1;
|
||||
id task access object operator info
|
||||
TopN root Column#4, offset:0, count:1
|
||||
└─Projection root Column#4, planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.b
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__integration.t.b, Column#4)]
|
||||
├─Projection(Build) root plus(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.b)->Column#4
|
||||
TopN root Column, offset:0, count:1
|
||||
└─Projection root Column, planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.b
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__integration.t.b, Column)]
|
||||
├─Projection(Build) root plus(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.b)->Column
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(plus(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.b)))
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -207,7 +207,7 @@ create table t(a int, b int);
|
||||
insert into t values(1, 1), (2, 1), (3, 2), (4, 2), (5, 2);
|
||||
explain format='plan_tree' select approx_percentile(a, 50) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 50)->Column#4
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 50)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_percentile(a, 50) from t;
|
||||
@ -215,7 +215,7 @@ approx_percentile(a, 50)
|
||||
3
|
||||
explain format='plan_tree' select approx_percentile(a, 10) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 10)->Column#4
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 10)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_percentile(a, 10) from t;
|
||||
@ -223,7 +223,7 @@ approx_percentile(a, 10)
|
||||
1
|
||||
explain format='plan_tree' select approx_percentile(a, 10+70) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 80)->Column#4
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 80)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_percentile(a, 10+70) from t;
|
||||
@ -231,7 +231,7 @@ approx_percentile(a, 10+70)
|
||||
4
|
||||
explain format='plan_tree' select approx_percentile(a, 10*10) from t;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 100)->Column#4
|
||||
HashAgg root funcs:approx_percentile(planner__core__casetest__integration.t.a, 100)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_percentile(a, 10*10) from t;
|
||||
@ -239,9 +239,9 @@ approx_percentile(a, 10*10)
|
||||
5
|
||||
explain format='plan_tree' select approx_percentile(a, 50) from t group by b order by b;
|
||||
id task access object operator info
|
||||
Projection root Column#4->Column#5
|
||||
Projection root Column
|
||||
└─Sort root planner__core__casetest__integration.t.b
|
||||
└─HashAgg root group by:planner__core__casetest__integration.t.b, funcs:approx_percentile(planner__core__casetest__integration.t.a, 50)->Column#4, funcs:firstrow(planner__core__casetest__integration.t.b)->planner__core__casetest__integration.t.b
|
||||
└─HashAgg root group by:planner__core__casetest__integration.t.b, funcs:approx_percentile(planner__core__casetest__integration.t.a, 50)->Column, funcs:firstrow(planner__core__casetest__integration.t.b)->planner__core__casetest__integration.t.b
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select approx_percentile(a, 50) from t group by b order by b;
|
||||
@ -253,8 +253,8 @@ create table t(a int);
|
||||
insert into t values(1),(1),(2);
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(*) c from t group by a order by c limit 1;
|
||||
id task access object operator info
|
||||
TopN root Column#3, offset:0, count:1
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column#3
|
||||
TopN root Column, offset:0, count:1
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column
|
||||
└─Sort root planner__core__casetest__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -263,8 +263,8 @@ c
|
||||
1
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(*) c from t group by a order by c;
|
||||
id task access object operator info
|
||||
Sort root Column#3
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column#3
|
||||
Sort root Column
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column
|
||||
└─Sort root planner__core__casetest__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -275,7 +275,7 @@ c
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(*) c from t group by a order by a limit 1;
|
||||
id task access object operator info
|
||||
Limit root offset:0, count:1
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column#3, funcs:firstrow(planner__core__casetest__integration.t.a)->planner__core__casetest__integration.t.a
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column, funcs:firstrow(planner__core__casetest__integration.t.a)->planner__core__casetest__integration.t.a
|
||||
└─Sort root planner__core__casetest__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -284,8 +284,8 @@ c
|
||||
2
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(*) c from t group by a order by a;
|
||||
id task access object operator info
|
||||
Projection root Column#3->Column#4
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column#3, funcs:firstrow(planner__core__casetest__integration.t.a)->planner__core__casetest__integration.t.a
|
||||
Projection root Column
|
||||
└─StreamAgg root group by:planner__core__casetest__integration.t.a, funcs:count(1)->Column, funcs:firstrow(planner__core__casetest__integration.t.a)->planner__core__casetest__integration.t.a
|
||||
└─Sort root planner__core__casetest__integration.t.a
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -522,7 +522,7 @@ create table t(c int);
|
||||
insert t values(10), (8), (7), (9), (11);
|
||||
explain format='plan_tree' select count(*) from test t1 where exists (select value from test t2 where t1.id = t2.id limit 1);
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#7
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─HashJoin root semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.test.id, planner__core__casetest__integration.test.id)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__integration.test.id))
|
||||
@ -532,7 +532,7 @@ HashAgg root funcs:count(1)->Column#7
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select count(*) from test t1 where exists (select value from test t2 where t1.id = t2.id);
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#7
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─HashJoin root semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.test.id, planner__core__casetest__integration.test.id)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__integration.test.id))
|
||||
@ -542,7 +542,7 @@ HashAgg root funcs:count(1)->Column#7
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select count(*) from test t1 where exists (select value from test t2 where t1.id = t2.id limit 1,2);
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(1)->Column#7
|
||||
HashAgg root funcs:count(1)->Column
|
||||
└─Apply root CARTESIAN semi join, left side:TableReader
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -623,7 +623,7 @@ KEY i6 (key6)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
||||
explain format='plan_tree' SELECT /*+ use_index_merge(t1)*/ COUNT(*) FROM t1 WHERE (key4=42 AND key6 IS NOT NULL) OR (key1=4 AND key3=6);
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#10
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:i4(key4) range:[42,42], keep order:false, stats:pseudo
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:i1(key1) range:[4,4], keep order:false, stats:pseudo
|
||||
@ -971,7 +971,7 @@ select @@tidb_enable_index_merge;
|
||||
set tidb_enable_index_merge = on;
|
||||
explain format='plan_tree' select /*+ use_index_merge(t1) */ 1 from t1 where c1 = 'de' or c2 = '10' and from_base64(to_base64(c1)) = 'ab';
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─Selection root or(eq(planner__core__casetest__integration.t1.c1, "de"), and(eq(planner__core__casetest__integration.t1.c2, "10"), eq(from_base64(to_base64(planner__core__casetest__integration.t1.c1)), "ab")))
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:["de","de"], keep order:false, stats:pseudo
|
||||
@ -982,7 +982,7 @@ select /*+ use_index_merge(t1) */ 1 from t1 where c1 = 'de' or c2 = '10' and fro
|
||||
1
|
||||
explain format='plan_tree' select /*+ use_index_merge(t1) */ 1 from t1 where c1 = 'ab' or c2 = '10' and char_length(left(c1, 10)) = 10;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─Selection root or(eq(planner__core__casetest__integration.t1.c1, "ab"), and(eq(planner__core__casetest__integration.t1.c2, "10"), eq(char_length(left(planner__core__casetest__integration.t1.c1, 10)), 10)))
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t1, index:c1(c1) range:["ab","ab"], keep order:false, stats:pseudo
|
||||
@ -993,7 +993,7 @@ select /*+ use_index_merge(t1) */ 1 from t1 where c1 = 'ab' or c2 = '10' and cha
|
||||
1
|
||||
explain format='plan_tree' select /*+ use_index_merge(tt1) */ 1 from tt1 where c1 = 'de' or c2 = '10' and from_base64(to_base64(c3)) = '10';
|
||||
id task access object operator info
|
||||
Projection root 1->Column#6
|
||||
Projection root 1->Column
|
||||
└─Selection root or(eq(planner__core__casetest__integration.tt1.c1, "de"), and(eq(planner__core__casetest__integration.tt1.c2, "10"), eq(from_base64(to_base64(planner__core__casetest__integration.tt1.c3)), "10")))
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:tt1, index:idx_0(c1) range:["de","de"], keep order:false, stats:pseudo
|
||||
@ -1004,7 +1004,7 @@ select /*+ use_index_merge(tt1) */ 1 from tt1 where c1 = 'de' or c2 = '10' and f
|
||||
1
|
||||
explain format='plan_tree' select /*+ use_index_merge( tt2 ) */ 1 from tt2 where tt2.c1 in (-3896405) or tt2.pk in (1, 53330) and to_base64(left(pk, 5));
|
||||
id task access object operator info
|
||||
Projection root 1->Column#3
|
||||
Projection root 1->Column
|
||||
└─Selection root or(eq(planner__core__casetest__integration.tt2.c1, -3896405), and(in(planner__core__casetest__integration.tt2.pk, 1, 53330), istrue_with_null(cast(to_base64(left(cast(planner__core__casetest__integration.tt2.pk, var_string(20)), 5)), double BINARY))))
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:tt2, index:c1(c1) range:[-3896405,-3896405], keep order:false, stats:pseudo
|
||||
@ -1015,7 +1015,7 @@ select /*+ use_index_merge( tt2 ) */ 1 from tt2 where tt2.c1 in (-3896405) or tt
|
||||
1
|
||||
explain format='plan_tree' select /*+ use_index_merge(tt3) */ 1 from tt3 where c1 < -10 or c2 < 10 and reverse(c3) = '2';
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─Selection root or(lt(planner__core__casetest__integration.tt3.c1, -10), and(lt(planner__core__casetest__integration.tt3.c2, 10), eq(reverse(cast(planner__core__casetest__integration.tt3.c3, var_string(20))), "2")))
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:tt3, index:c1(c1) range:[-inf,-10), keep order:false, stats:pseudo
|
||||
@ -1026,7 +1026,7 @@ select /*+ use_index_merge(tt3) */ 1 from tt3 where c1 < -10 or c2 < 10 and reve
|
||||
1
|
||||
explain format='plan_tree' select 1 from t1 where c1 = 'de' or c2 = '10' and from_base64(to_base64(c1)) = 'ab';
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─Selection root or(eq(planner__core__casetest__integration.t1.c1, "de"), and(eq(planner__core__casetest__integration.t1.c2, "10"), eq(from_base64(to_base64(planner__core__casetest__integration.t1.c1)), "ab")))
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
@ -1063,27 +1063,27 @@ create sequence s1;
|
||||
create sequence s2;
|
||||
explain format='plan_tree' select 1 from s1;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#1
|
||||
Projection root 1->Column
|
||||
└─TableDual root rows:1
|
||||
explain format='plan_tree' select count(1) from s1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#1
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─TableDual root rows:1
|
||||
explain format='plan_tree' select count(*) from s1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#1
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─TableDual root rows:1
|
||||
explain format='plan_tree' select sum(1) from s1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(1)->Column#1
|
||||
StreamAgg root funcs:sum(1)->Column
|
||||
└─TableDual root rows:1
|
||||
explain format='plan_tree' select count(1) as cnt from s1 union select count(1) as cnt from s2;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─StreamAgg root funcs:count(1)->Column#1
|
||||
├─StreamAgg root funcs:count(1)->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─StreamAgg root funcs:count(1)->Column#2
|
||||
└─StreamAgg root funcs:count(1)->Column
|
||||
└─TableDual root rows:1
|
||||
set tidb_cost_model_version=2;
|
||||
drop table if exists t;
|
||||
@ -1207,52 +1207,52 @@ create table ta(a int, b int);
|
||||
set sql_mode='';
|
||||
explain format='plan_tree' select floor(dt.rn/2) rownum, count(c1) from (select @rownum := @rownum + 1 rn, c1 from (select @rownum := -1) drn, t1) dt group by floor(dt.rn/2) order by rownum;
|
||||
id task access object operator info
|
||||
Sort root Column#6
|
||||
└─Projection root floor(div(cast(Column#4, decimal(20,0) BINARY), 2))->Column#6, Column#5
|
||||
└─HashAgg root group by:Column#13, funcs:count(Column#11)->Column#5, funcs:firstrow(Column#12)->Column#4
|
||||
└─Projection root planner__core__casetest__integration.t1.c1->Column#11, Column#4->Column#12, floor(div(cast(Column#4, decimal(20,0) BINARY), 2))->Column#13
|
||||
└─Projection root setvar(rownum, plus(getvar(rownum), 1))->Column#4, planner__core__casetest__integration.t1.c1
|
||||
Sort root Column
|
||||
└─Projection root floor(div(cast(Column, decimal(20,0) BINARY), 2))->Column, Column
|
||||
└─HashAgg root group by:Column, funcs:count(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Projection root planner__core__casetest__integration.t1.c1->Column, Column, floor(div(cast(Column, decimal(20,0) BINARY), 2))->Column
|
||||
└─Projection root setvar(rownum, plus(getvar(rownum), 1))->Column, planner__core__casetest__integration.t1.c1
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─Projection(Build) root setvar(rownum, -1)->Column#1
|
||||
├─Projection(Build) root setvar(rownum, -1)->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select @n:=@n+1 as e from ta group by e;
|
||||
id task access object operator info
|
||||
Projection root setvar(n, plus(getvar(n), 1))->Column#4
|
||||
└─HashAgg root group by:Column#8, funcs:firstrow(1)->Column#7
|
||||
└─Projection root setvar(n, plus(cast(getvar(n), double BINARY), 1))->Column#8
|
||||
Projection root setvar(n, plus(getvar(n), 1))->Column
|
||||
└─HashAgg root group by:Column, funcs:firstrow(1)->Column
|
||||
└─Projection root setvar(n, plus(cast(getvar(n), double BINARY), 1))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:ta keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select @n:=@n+a as e from ta group by e;
|
||||
id task access object operator info
|
||||
Projection root setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column#4
|
||||
└─HashAgg root group by:Column#7, funcs:firstrow(Column#6)->planner__core__casetest__integration.ta.a
|
||||
└─Projection root planner__core__casetest__integration.ta.a->Column#6, setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column#7
|
||||
Projection root setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column
|
||||
└─HashAgg root group by:Column, funcs:firstrow(Column)->planner__core__casetest__integration.ta.a
|
||||
└─Projection root planner__core__casetest__integration.ta.a->Column, setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:ta keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select @n:=@n+1 as e from ta) tt group by e;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#4, funcs:firstrow(Column#4)->Column#4
|
||||
└─Projection root setvar(n, plus(getvar(n), 1))->Column#4
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Projection root setvar(n, plus(getvar(n), 1))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:ta keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select @n:=@n+a as e from ta) tt group by e;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#4, funcs:firstrow(Column#4)->Column#4
|
||||
└─Projection root setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column#4
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Projection root setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:ta keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select a from ta group by @n:=@n+1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#5, funcs:firstrow(Column#4)->planner__core__casetest__integration.ta.a
|
||||
└─Projection root planner__core__casetest__integration.ta.a->Column#4, setvar(n, plus(getvar(n), 1))->Column#5
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->planner__core__casetest__integration.ta.a
|
||||
└─Projection root planner__core__casetest__integration.ta.a->Column, setvar(n, plus(getvar(n), 1))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:ta keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select a from ta group by @n:=@n+a;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#5, funcs:firstrow(Column#4)->planner__core__casetest__integration.ta.a
|
||||
└─Projection root planner__core__casetest__integration.ta.a->Column#4, setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column#5
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->planner__core__casetest__integration.ta.a
|
||||
└─Projection root planner__core__casetest__integration.ta.a->Column, setvar(n, plus(getvar(n), cast(planner__core__casetest__integration.ta.a, double BINARY)))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:ta keep order:false, stats:pseudo
|
||||
set sql_mode=default;
|
||||
@ -1271,50 +1271,50 @@ create table t8 (a int key);
|
||||
create definer=`root`@`127.0.0.1` view v4 as (select a from t7) union (select a from t8);
|
||||
explain format='plan_tree' select * from v1 where a = 1; -- the condition should be downcast through both side and go get point;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Point_Get root table:t1 handle:1
|
||||
└─Projection root cast(planner__core__casetest__integration.t2.a, bigint BINARY)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t2.a, bigint BINARY)->Column
|
||||
└─Point_Get root table:t2 handle:1
|
||||
select * from v1 where a = 1; -- the condition should be downcast through both side and go get point;
|
||||
a
|
||||
explain format='plan_tree' select * from v1 where a = '1test'; -- the condition should be downcast through both side and go get point too;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Point_Get root table:t1 handle:1
|
||||
└─Projection root cast(planner__core__casetest__integration.t2.a, bigint BINARY)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t2.a, bigint BINARY)->Column
|
||||
└─Point_Get root table:t2 handle:1
|
||||
select * from v1 where a = '1test'; -- the condition should be downcast through both side and go get point too;
|
||||
a
|
||||
explain format='plan_tree' select * from v1 where a > 1; -- the condition should be downcast through both side and go range scan;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableRangeScan
|
||||
│ └─TableRangeScan cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo
|
||||
└─Projection root cast(planner__core__casetest__integration.t2.a, bigint BINARY)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t2.a, bigint BINARY)->Column
|
||||
└─TableReader root data:TableRangeScan
|
||||
└─TableRangeScan cop[tikv] table:t2 range:(1,+inf], keep order:false, stats:pseudo
|
||||
select * from v1 where a > 1; -- the condition should be downcast through both side and go range scan;
|
||||
a
|
||||
explain format='plan_tree' select * from v2 where a = 'test';
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Point_Get root table:t3, clustered index:PRIMARY(a)
|
||||
└─Projection root cast(planner__core__casetest__integration.t4.a, varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t4.a, varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─Point_Get root table:t4, clustered index:PRIMARY(a)
|
||||
select * from v2 where a = 'test';
|
||||
a
|
||||
explain format='plan_tree' select * from v2 where a = 1;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] eq(cast(planner__core__casetest__integration.t3.a, double BINARY), 1)
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─Projection root cast(planner__core__casetest__integration.t4.a, varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t4.a, varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] eq(cast(cast(planner__core__casetest__integration.t4.a, varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin), double BINARY), 1)
|
||||
└─TableFullScan cop[tikv] table:t4 keep order:false, stats:pseudo
|
||||
@ -1322,21 +1322,21 @@ select * from v2 where a = 1;
|
||||
a
|
||||
explain format='plan_tree' select * from v2 where a > 'test';
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableRangeScan
|
||||
│ └─TableRangeScan cop[tikv] table:t3 range:("test",+inf], keep order:false, stats:pseudo
|
||||
└─Projection root cast(planner__core__casetest__integration.t4.a, varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t4.a, varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableRangeScan
|
||||
└─TableRangeScan cop[tikv] table:t4 range:("test",+inf], keep order:false, stats:pseudo
|
||||
select * from v2 where a > 'test';
|
||||
a
|
||||
explain format='plan_tree' select * from v3 where a = 'test' -- the condition shouldn't be downcast through both side and go get point;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Point_Get root table:t5, clustered index:PRIMARY(a)
|
||||
└─Projection root cast(planner__core__casetest__integration.t6.a, char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t6.a, char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] eq(cast(planner__core__casetest__integration.t6.a, char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin), "test")
|
||||
└─TableFullScan cop[tikv] table:t6 keep order:false, stats:pseudo
|
||||
@ -1344,11 +1344,11 @@ select * from v3 where a = 'test' -- the condition shouldn't be downcast through
|
||||
a
|
||||
explain format='plan_tree' select * from v3 where a > 'test' -- the condition shouldn't be downcast through both side and go get point too;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableRangeScan
|
||||
│ └─TableRangeScan cop[tikv] table:t5 range:("test",+inf], keep order:false, stats:pseudo
|
||||
└─Projection root cast(planner__core__casetest__integration.t6.a, char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#3
|
||||
└─Projection root cast(planner__core__casetest__integration.t6.a, char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] gt(cast(planner__core__casetest__integration.t6.a, char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin), "test")
|
||||
└─TableFullScan cop[tikv] table:t6 keep order:false, stats:pseudo
|
||||
@ -1356,23 +1356,23 @@ select * from v3 where a > 'test' -- the condition shouldn't be downcast through
|
||||
a
|
||||
explain format='plan_tree' select * from v4 where a = 'test' -- diff column union may have precision loss couldn't downcast the condition to get the range;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Point_Get root table:t7, clustered index:PRIMARY(a)
|
||||
└─Selection root eq(Column#3, "test")
|
||||
└─Projection root cast(planner__core__casetest__integration.t8.a, varchar(100) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#3
|
||||
└─Selection root eq(Column, "test")
|
||||
└─Projection root cast(planner__core__casetest__integration.t8.a, varchar(100) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t8 keep order:false, stats:pseudo
|
||||
select * from v4 where a = 'test' -- diff column union may have precision loss couldn't downcast the condition to get the range;
|
||||
a
|
||||
explain format='plan_tree' select * from v4 where a > 'test' -- diff column union may have precision loss couldn't downcast the condition to get the range;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#3, funcs:firstrow(Column#3)->Column#3
|
||||
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableRangeScan
|
||||
│ └─TableRangeScan cop[tikv] table:t7 range:("test",+inf], keep order:false, stats:pseudo
|
||||
└─Selection root gt(Column#3, "test")
|
||||
└─Projection root cast(planner__core__casetest__integration.t8.a, varchar(100) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#3
|
||||
└─Selection root gt(Column, "test")
|
||||
└─Projection root cast(planner__core__casetest__integration.t8.a, varchar(100) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t8 keep order:false, stats:pseudo
|
||||
select * from v4 where a > 'test' -- diff column union may have precision loss couldn't downcast the condition to get the range;
|
||||
@ -1382,7 +1382,7 @@ drop table if exists t;
|
||||
create table t (id int, value decimal(10,5));
|
||||
explain format='plan_tree' select count(*) from t join (select t.id, t.value v1 from t join t t1 on t.id = t1.id order by t.value limit 1) v on v.id = t.id and v.v1 = t.value;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#10
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__integration.t.id, planner__core__casetest__integration.t.id) eq(planner__core__casetest__integration.t.value, planner__core__casetest__integration.t.value)]
|
||||
├─Selection(Build) root not(isnull(planner__core__casetest__integration.t.id)), not(isnull(planner__core__casetest__integration.t.value))
|
||||
│ └─TopN root planner__core__casetest__integration.t.value, offset:0, count:1
|
||||
@ -1398,7 +1398,7 @@ StreamAgg root funcs:count(1)->Column#10
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select count(*) from t join (select t.id, t.value v1 from t join t t1 on t.id = t1.id order by t.value limit 1) v on v.id = t.id and v.v1 = t.value;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#10
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__integration.t.id, planner__core__casetest__integration.t.id) eq(planner__core__casetest__integration.t.value, planner__core__casetest__integration.t.value)]
|
||||
├─Selection(Build) root not(isnull(planner__core__casetest__integration.t.id)), not(isnull(planner__core__casetest__integration.t.value))
|
||||
│ └─TopN root planner__core__casetest__integration.t.value, offset:0, count:1
|
||||
@ -1826,13 +1826,13 @@ create table tt(a bigint, b bigint, c bigint, d bigint, e bigint, primary key(c,
|
||||
explain format='plan_tree' update tt, (select 1 as c1 ,2 as c2 ,3 as c3, 4 as c4 union all select 2,3,4,5 union all select 3,4,5,6) tmp set tt.a=tmp.c1, tt.b=tmp.c2 where tt.c=tmp.c3 and tt.d=tmp.c4 and (tt.c,tt.d) in ((11,111),(22,222),(33,333),(44,444));
|
||||
id task access object operator info
|
||||
Update root N/A
|
||||
└─IndexJoin root inner join, inner:TableReader, outer key:Column#20, Column#21, inner key:test.tt.c, test.tt.d, equal cond:eq(Column#20, test.tt.c), eq(Column#21, test.tt.d)
|
||||
└─IndexJoin root inner join, inner:TableReader, outer key:Column, Column, inner key:test.tt.c, test.tt.d, equal cond:eq(Column, test.tt.c), eq(Column, test.tt.d)
|
||||
├─Union(Build) root
|
||||
│ ├─Projection root 1->Column#18, 2->Column#19, 3->Column#20, 4->Column#21
|
||||
│ ├─Projection root 1->Column, 2->Column, 3->Column, 4->Column
|
||||
│ │ └─TableDual root rows:1
|
||||
│ ├─Projection root 2->Column#18, 3->Column#19, 4->Column#20, 5->Column#21
|
||||
│ ├─Projection root 2->Column, 3->Column, 4->Column, 5->Column
|
||||
│ │ └─TableDual root rows:1
|
||||
│ └─Projection root 3->Column#18, 4->Column#19, 5->Column#20, 6->Column#21
|
||||
│ └─Projection root 3->Column, 4->Column, 5->Column, 6->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─TableReader(Probe) root data:Selection
|
||||
└─Selection cop[tikv] or(or(and(eq(test.tt.c, 11), eq(test.tt.d, 111)), and(eq(test.tt.c, 22), eq(test.tt.d, 222))), or(and(eq(test.tt.c, 33), eq(test.tt.d, 333)), and(eq(test.tt.c, 44), eq(test.tt.d, 444))))
|
||||
|
||||
@ -20,15 +20,15 @@ PartitionUnion root
|
||||
└─TableFullScan cop[tikv] table:tlist, partition:p1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select avg(a) from tlist;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:avg(Column#4, Column#5)->Column#3
|
||||
HashAgg root funcs:avg(Column, Column)->Column
|
||||
└─PartitionUnion root
|
||||
├─HashAgg root funcs:count(Column#6)->Column#4, funcs:sum(Column#7)->Column#5
|
||||
├─HashAgg root funcs:count(Column)->Column, funcs:sum(Column)->Column
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] funcs:count(list_push_down.tlist.a)->Column#6, funcs:sum(list_push_down.tlist.a)->Column#7
|
||||
│ └─HashAgg cop[tikv] funcs:count(list_push_down.tlist.a)->Column, funcs:sum(list_push_down.tlist.a)->Column
|
||||
│ └─TableFullScan cop[tikv] table:tlist, partition:p0 keep order:false, stats:pseudo
|
||||
└─HashAgg root funcs:count(Column#10)->Column#4, funcs:sum(Column#11)->Column#5
|
||||
└─HashAgg root funcs:count(Column)->Column, funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(list_push_down.tlist.a)->Column#10, funcs:sum(list_push_down.tlist.a)->Column#11
|
||||
└─HashAgg cop[tikv] funcs:count(list_push_down.tlist.a)->Column, funcs:sum(list_push_down.tlist.a)->Column
|
||||
└─TableFullScan cop[tikv] table:tlist, partition:p1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select a from tlist limit 10;
|
||||
id task access object operator info
|
||||
@ -65,15 +65,15 @@ PartitionUnion root
|
||||
└─TableFullScan cop[tikv] table:tcollist, partition:p1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select avg(a) from tcollist;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:avg(Column#4, Column#5)->Column#3
|
||||
HashAgg root funcs:avg(Column, Column)->Column
|
||||
└─PartitionUnion root
|
||||
├─HashAgg root funcs:count(Column#6)->Column#4, funcs:sum(Column#7)->Column#5
|
||||
├─HashAgg root funcs:count(Column)->Column, funcs:sum(Column)->Column
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] funcs:count(list_push_down.tcollist.a)->Column#6, funcs:sum(list_push_down.tcollist.a)->Column#7
|
||||
│ └─HashAgg cop[tikv] funcs:count(list_push_down.tcollist.a)->Column, funcs:sum(list_push_down.tcollist.a)->Column
|
||||
│ └─TableFullScan cop[tikv] table:tcollist, partition:p0 keep order:false, stats:pseudo
|
||||
└─HashAgg root funcs:count(Column#10)->Column#4, funcs:sum(Column#11)->Column#5
|
||||
└─HashAgg root funcs:count(Column)->Column, funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(list_push_down.tcollist.a)->Column#10, funcs:sum(list_push_down.tcollist.a)->Column#11
|
||||
└─HashAgg cop[tikv] funcs:count(list_push_down.tcollist.a)->Column, funcs:sum(list_push_down.tcollist.a)->Column
|
||||
└─TableFullScan cop[tikv] table:tcollist, partition:p1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select a from tcollist limit 10;
|
||||
id task access object operator info
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -89,7 +89,7 @@ TableReader root data:Selection
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select 1 from t A, t B where A.f <> 3 and B.f in (1,2,3) and A.f <> 1 and A.f <> 2 -- on different columns. No simplification should be done.;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#7
|
||||
Projection root 1->Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] in(planner__core__casetest__predicate_simplification.t.f, 1, 2, 3)
|
||||
@ -99,7 +99,7 @@ Projection root 1->Column#7
|
||||
└─TableFullScan cop[tikv] table:A keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select 1 from t A, t B where B.f <> 2 and A.f <> 3 and B.f in (1,2,3) and A.f in (3,1,4) and A.f <> 1 and A.f <> 2 -- simplification for two columns.;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#7
|
||||
Projection root 1->Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] in(planner__core__casetest__predicate_simplification.t.f, 4)
|
||||
@ -114,10 +114,10 @@ TableReader root data:Selection
|
||||
└─TableFullScan cop[tikv] table:ts keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select count(*) cnt from ts where f <> '1' and f in ('1','2','3') group by a having cnt > 100 -- aggregate ;
|
||||
id task access object operator info
|
||||
Selection root gt(Column#4, 100)
|
||||
└─HashAgg root group by:planner__core__casetest__predicate_simplification.ts.a, funcs:count(Column#5)->Column#4
|
||||
Selection root gt(Column, 100)
|
||||
└─HashAgg root group by:planner__core__casetest__predicate_simplification.ts.a, funcs:count(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__predicate_simplification.ts.a, funcs:count(1)->Column#5
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__predicate_simplification.ts.a, funcs:count(1)->Column
|
||||
└─Selection cop[tikv] in(planner__core__casetest__predicate_simplification.ts.f, "2", "3")
|
||||
└─TableFullScan cop[tikv] table:ts keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select f from t where f <> NULL and f in (1,2,3) -- Special case of NULL with no simplification.;
|
||||
@ -297,55 +297,55 @@ INSERT INTO t1 (a1, b1, c1) VALUES (1, 2, 3), (4, NULL, 5), (NULL, 6, 7), (8,
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 OR b1 > 10;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 AND b1 > 10;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__predicate_simplification.t1.b1, 10)
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 0 OR b1 > 10;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__predicate_simplification.t1.b1, 10)
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 0 AND b1 > 10;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─TableDual root rows:0
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 )) ;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#10
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 ;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 0 AND (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 )) ;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#9
|
||||
Projection root 1->Column
|
||||
└─TableDual root rows:0
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 0 ;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
Projection root 1->Column
|
||||
└─TableDual root rows:0
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE a1 > 5 OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 )) ;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#10
|
||||
└─Selection root or(gt(planner__core__casetest__predicate_simplification.t1.a1, 5), Column#9)
|
||||
Projection root 1->Column
|
||||
└─Selection root or(gt(planner__core__casetest__predicate_simplification.t1.a1, 5), Column)
|
||||
└─HashJoin root left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__predicate_simplification.t1.a1, planner__core__casetest__predicate_simplification.t2.a2)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
@ -354,7 +354,7 @@ Projection root 1->Column#10
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 OR a1 in (select a2 from t2);
|
||||
id task access object operator info
|
||||
Projection root 1->Column#9
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
@ -363,7 +363,7 @@ WHERE
|
||||
(1 OR (1 OR (1 OR EXISTS(SELECT 1 FROM t2 WHERE b2 = b1) OR EXISTS(SELECT 1 FROM t2 WHERE a2 = a1)))) OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ) AND EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ))
|
||||
;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#25
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
@ -372,7 +372,7 @@ WHERE
|
||||
(1 OR (0 OR (1 OR EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ) OR EXISTS(SELECT 1 FROM t2 WHERE a2 = a1)) OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ) AND EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ))))
|
||||
;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#25
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
@ -381,7 +381,7 @@ WHERE
|
||||
(0 OR (0 OR (1 OR EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ) OR EXISTS(SELECT 1 FROM t2 WHERE a2 = a1)) OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ) AND EXISTS(SELECT 1 FROM t2 WHERE a2 = a1 ))))
|
||||
;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#25
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
@ -389,10 +389,10 @@ SELECT 1 FROM t1 AS tab WHERE 1 = 1 OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1))
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1));
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─Projection root 1->Column#21
|
||||
├─Projection root 1->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
└─Projection root 1->Column#21
|
||||
└─Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
@ -400,27 +400,27 @@ SELECT 1 FROM t1 AS tab WHERE 1 = 0 OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1))
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 OR (EXISTS(SELECT 1 FROM t2 WHERE a2 = a1));
|
||||
id task access object operator info
|
||||
Union root
|
||||
├─Projection root 1->Column#21
|
||||
│ └─Selection root Column#9
|
||||
├─Projection root 1->Column
|
||||
│ └─Selection root Column
|
||||
│ └─HashJoin root left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__predicate_simplification.t1.a1, planner__core__casetest__predicate_simplification.t2.a2)]
|
||||
│ ├─TableReader(Build) root data:TableFullScan
|
||||
│ │ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
│ └─TableReader(Probe) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
└─Projection root 1->Column#21
|
||||
└─Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 1 OR (EXISTS(SELECT /*+ NO_DECORRELATE() */ 1 FROM t2 WHERE a2 = a1 )) ;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#10
|
||||
Projection root 1->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tab keep order:false, stats:pseudo
|
||||
explain format='plan_tree'
|
||||
SELECT 1 FROM t1 AS tab WHERE 1 = 0 AND (EXISTS(SELECT /*+ NO_DECORRELATE() */ 1 FROM t2 WHERE a2 = a1 ))
|
||||
;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#9
|
||||
Projection root 1->Column
|
||||
└─TableDual root rows:0
|
||||
explain format='plan_tree'
|
||||
SELECT * FROM t1 WHERE (1 = 1 OR a1 = 1) OR (b1 = 2);
|
||||
@ -675,8 +675,8 @@ r0
|
||||
249.0000
|
||||
explain format='plan_tree' SELECT AVG(DISTINCT `t910beff5`.`col_40`) AS `r0` FROM `t910beff5` WHERE `t910beff5`.`col_41`>='D1$9+VTpEe)' OR `t910beff5`.`col_41` BETWEEN 'znRD*2pkmtm4' AND 'PBueg(&tWY%dzsT(_' GROUP BY `t910beff5`.`col_40`,`t910beff5`.`col_41` HAVING `t910beff5`.`col_41`='cwx!P4xaX)U';
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#7, Column#8, funcs:avg(distinct Column#6)->Column#4
|
||||
└─Projection root cast(planner__core__casetest__predicate_simplification.t910beff5.col_40, decimal(3,0) UNSIGNED BINARY)->Column#6, planner__core__casetest__predicate_simplification.t910beff5.col_40->Column#7, planner__core__casetest__predicate_simplification.t910beff5.col_41->Column#8
|
||||
HashAgg root group by:Column, Column, funcs:avg(distinct Column)->Column
|
||||
└─Projection root cast(planner__core__casetest__predicate_simplification.t910beff5.col_40, decimal(3,0) UNSIGNED BINARY)->Column, planner__core__casetest__predicate_simplification.t910beff5.col_40->Column, planner__core__casetest__predicate_simplification.t910beff5.col_41->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] eq(planner__core__casetest__predicate_simplification.t910beff5.col_41, "cwx!P4xaX)U"), or(ge(planner__core__casetest__predicate_simplification.t910beff5.col_41, "D1$9+VTpEe)"), and(ge(planner__core__casetest__predicate_simplification.t910beff5.col_41, "znRD*2pkmtm4"), le(planner__core__casetest__predicate_simplification.t910beff5.col_41, "PBueg(&tWY%dzsT(_")))
|
||||
└─TableFullScan cop[tikv] table:t910beff5 keep order:false, stats:pseudo
|
||||
@ -699,10 +699,10 @@ UNIQUE KEY idx_14 (col_72,col_71) /*!80000 INVISIBLE */
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci;
|
||||
explain format='plan_tree' select /*+ NO_HASH_JOIN( t43fc4f8a , st_57 */ avg( distinct st_57.r1 ) as r0 from t43fc4f8a , ( select /*+ use_index( tlcf30036b ) */ /*+ agg_to_cop() */ elt(2, tlcf30036b.col_72 , tlcf30036b.col_72 ) as r0 , bit_or( tlcf30036b.col_71 ) as r1 from tlcf30036b where IsNull( tlcf30036b.col_71 ) and not( tlcf30036b.col_72 in ( '1980-08-05' ,'2033-10-20' ,'2030-06-22' ,'1972-04-20' ) ) group by tlcf30036b.col_72 having tlcf30036b.col_72 in ( '2004-03-24' ,'2006-02-04' ,'1993-06-20' ,null ) and not( tlcf30036b.col_72 < '2026-03-29' ) order by r0,r1 ) st_57 where st_57.r1 in ( 13307631398032338238 ,10696905560280898882 ,5314440087685082217 ,17229250596274672311 ) group by t43fc4f8a.col_51,t43fc4f8a.col_49 having t43fc4f8a.col_49 <=> 11261 order by r0 limit 562300838;
|
||||
id task access object operator info
|
||||
TopN root Column#13, offset:0, count:562300838
|
||||
└─HashAgg root group by:Column#16, Column#17, funcs:avg(distinct Column#15)->Column#13
|
||||
└─Projection root cast(Column#9, decimal(20,0) UNSIGNED BINARY)->Column#15, planner__core__casetest__predicate_simplification.t43fc4f8a.col_51->Column#16, planner__core__casetest__predicate_simplification.t43fc4f8a.col_49->Column#17
|
||||
└─Projection root planner__core__casetest__predicate_simplification.t43fc4f8a.col_49, planner__core__casetest__predicate_simplification.t43fc4f8a.col_51, Column#9
|
||||
TopN root Column, offset:0, count:562300838
|
||||
└─HashAgg root group by:Column, Column, funcs:avg(distinct Column)->Column
|
||||
└─Projection root cast(Column, decimal(20,0) UNSIGNED BINARY)->Column, planner__core__casetest__predicate_simplification.t43fc4f8a.col_51->Column, planner__core__casetest__predicate_simplification.t43fc4f8a.col_49->Column
|
||||
└─Projection root planner__core__casetest__predicate_simplification.t43fc4f8a.col_49, planner__core__casetest__predicate_simplification.t43fc4f8a.col_51, Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─TableDual(Build) root rows:0
|
||||
└─TableReader(Probe) root partition:all data:Selection
|
||||
|
||||
@ -48,81 +48,81 @@ TableReader root data:TableFullScan
|
||||
explain format = 'plan_tree' select a->'$.key0' from t2;
|
||||
id task access object operator info
|
||||
TableReader root data:Projection
|
||||
└─Projection cop[tikv] json_extract(planner__core__casetest__pushdown__push_down.t2.a, $.key0)->Column#3
|
||||
└─Projection cop[tikv] json_extract(planner__core__casetest__pushdown__push_down.t2.a, $.key0)->Column
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select a->>'$.key0' from t2;
|
||||
id task access object operator info
|
||||
TableReader root data:Projection
|
||||
└─Projection cop[tikv] json_unquote(cast(json_extract(planner__core__casetest__pushdown__push_down.t2.a, $.key0), var_string(16777216)))->Column#3
|
||||
└─Projection cop[tikv] json_unquote(cast(json_extract(planner__core__casetest__pushdown__push_down.t2.a, $.key0), var_string(16777216)))->Column
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_length(a) from t2;
|
||||
id task access object operator info
|
||||
TableReader root data:Projection
|
||||
└─Projection cop[tikv] json_length(planner__core__casetest__pushdown__push_down.t2.a)->Column#3
|
||||
└─Projection cop[tikv] json_length(planner__core__casetest__pushdown__push_down.t2.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_valid(a) from t2;
|
||||
id task access object operator info
|
||||
TableReader root data:Projection
|
||||
└─Projection cop[tikv] json_valid(planner__core__casetest__pushdown__push_down.t2.a)->Column#3
|
||||
└─Projection cop[tikv] json_valid(planner__core__casetest__pushdown__push_down.t2.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_type(a) from t2;
|
||||
id task access object operator info
|
||||
TableReader root data:Projection
|
||||
└─Projection cop[tikv] json_type(planner__core__casetest__pushdown__push_down.t2.a)->Column#3
|
||||
└─Projection cop[tikv] json_type(planner__core__casetest__pushdown__push_down.t2.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_depth(a) from t2;
|
||||
id task access object operator info
|
||||
Projection root json_depth(planner__core__casetest__pushdown__push_down.t2.a)->Column#3
|
||||
Projection root json_depth(planner__core__casetest__pushdown__push_down.t2.a)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_contains(a, '$.key0')from t2;
|
||||
id task access object operator info
|
||||
TableReader root data:Projection
|
||||
└─Projection cop[tikv] json_contains(planner__core__casetest__pushdown__push_down.t2.a, cast($.key0, json BINARY))->Column#3
|
||||
└─Projection cop[tikv] json_contains(planner__core__casetest__pushdown__push_down.t2.a, cast($.key0, json BINARY))->Column
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_contains_path(a, 'one', '$.key0', '$.key1') from t2;
|
||||
id task access object operator info
|
||||
Projection root json_contains_path(planner__core__casetest__pushdown__push_down.t2.a, one, $.key0, $.key1)->Column#3
|
||||
Projection root json_contains_path(planner__core__casetest__pushdown__push_down.t2.a, one, $.key0, $.key1)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_keys(a) from t2;
|
||||
id task access object operator info
|
||||
Projection root json_keys(planner__core__casetest__pushdown__push_down.t2.a)->Column#3
|
||||
Projection root json_keys(planner__core__casetest__pushdown__push_down.t2.a)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select 'ab' MEMBER OF(a) from t2;
|
||||
id task access object operator info
|
||||
TableReader root data:Projection
|
||||
└─Projection cop[tikv] json_memberof(cast(ab, json BINARY), planner__core__casetest__pushdown__push_down.t2.a)->Column#3
|
||||
└─Projection cop[tikv] json_memberof(cast(ab, json BINARY), planner__core__casetest__pushdown__push_down.t2.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_overlaps(a, a) from t2;
|
||||
id task access object operator info
|
||||
Projection root json_overlaps(planner__core__casetest__pushdown__push_down.t2.a, planner__core__casetest__pushdown__push_down.t2.a)->Column#3
|
||||
Projection root json_overlaps(planner__core__casetest__pushdown__push_down.t2.a, planner__core__casetest__pushdown__push_down.t2.a)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_search(a, 'one', 'key0') from t2;
|
||||
id task access object operator info
|
||||
Projection root json_search(planner__core__casetest__pushdown__push_down.t2.a, one, key0)->Column#3
|
||||
Projection root json_search(planner__core__casetest__pushdown__push_down.t2.a, one, key0)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select json_unquote(a) from t2;
|
||||
id task access object operator info
|
||||
Projection root json_unquote(cast(planner__core__casetest__pushdown__push_down.t2.a, var_string(4294967295)))->Column#3
|
||||
Projection root json_unquote(cast(planner__core__casetest__pushdown__push_down.t2.a, var_string(4294967295)))->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select i * 2 from t;
|
||||
id task access object operator info
|
||||
Projection root mul(planner__core__casetest__pushdown__push_down.t.i, 2)->Column#13
|
||||
Projection root mul(planner__core__casetest__pushdown__push_down.t.i, 2)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select DATE_FORMAT(t, '%Y-%m-%d %H') as date from t;
|
||||
id task access object operator info
|
||||
Projection root date_format(planner__core__casetest__pushdown__push_down.t.t, %Y-%m-%d %H)->Column#13
|
||||
Projection root date_format(planner__core__casetest__pushdown__push_down.t.t, %Y-%m-%d %H)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select md5(s) from t;
|
||||
id task access object operator info
|
||||
Projection root md5(planner__core__casetest__pushdown__push_down.t.s)->Column#13
|
||||
Projection root md5(planner__core__casetest__pushdown__push_down.t.s)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select c from t where a+1=3;
|
||||
@ -133,55 +133,55 @@ Projection root planner__core__casetest__pushdown__push_down.t.c
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select /*+ hash_agg()*/ count(b) from (select id + 1 as b from t)A;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#16)->Column#14
|
||||
HashAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column#16
|
||||
└─HashAgg cop[tikv] funcs:count(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select /*+ hash_agg()*/ count(*) from (select id + 1 as b from t)A;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#15)->Column#14
|
||||
HashAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column#15
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select /*+ hash_agg()*/ sum(b) from (select id + 1 as b from t)A;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#16)->Column#14
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column#16
|
||||
└─HashAgg cop[tikv] funcs:sum(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select /*+ stream_agg()*/ count(b) from (select id + 1 as b from t)A;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#16)->Column#14
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column#16
|
||||
└─StreamAgg cop[tikv] funcs:count(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select /*+ stream_agg()*/ count(*) from (select id + 1 as b from t)A;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#15)->Column#14
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#15
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select /*+ stream_agg()*/ sum(b) from (select id + 1 as b from t)A;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:sum(Column#16)->Column#14
|
||||
StreamAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:sum(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column#16
|
||||
└─StreamAgg cop[tikv] funcs:sum(plus(planner__core__casetest__pushdown__push_down.t.id, 1))->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select * from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(Column#13, Column#26)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#26
|
||||
HashJoin root inner join, equal:[eq(Column, Column)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(minus(planner__core__casetest__pushdown__push_down.t.id, 2)))
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#13
|
||||
└─Projection(Probe) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] not(isnull(minus(planner__core__casetest__pushdown__push_down.t.id, 2)))
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select * from t join (select id-2 as b from t) A on A.b=t.id;
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column#25)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#25
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(minus(planner__core__casetest__pushdown__push_down.t.id, 2)))
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -190,8 +190,8 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__pushdown__push_dow
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select * from t left join (select id-2 as b from t) A on A.b=t.id;
|
||||
id task access object operator info
|
||||
HashJoin root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column#25)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#25
|
||||
HashJoin root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(minus(planner__core__casetest__pushdown__push_down.t.id, 2)))
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -199,8 +199,8 @@ HashJoin root left outer join, left side:TableReader, equal:[eq(planner__core__
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select * from t right join (select id-2 as b from t) A on A.b=t.id;
|
||||
id task access object operator info
|
||||
HashJoin root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column#25)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#25
|
||||
HashJoin root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:Selection
|
||||
@ -208,13 +208,13 @@ HashJoin root right outer join, left side:TableReader, equal:[eq(planner__core_
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select A.b, B.b from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b;
|
||||
id task access object operator info
|
||||
Projection root Column#26, Column#13
|
||||
└─HashJoin root inner join, equal:[eq(Column#13, Column#26)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#26
|
||||
Projection root Column, Column
|
||||
└─HashJoin root inner join, equal:[eq(Column, Column)]
|
||||
├─Projection(Build) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(minus(planner__core__casetest__pushdown__push_down.t.id, 2)))
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#13
|
||||
└─Projection(Probe) root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] not(isnull(minus(planner__core__casetest__pushdown__push_down.t.id, 2)))
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -236,7 +236,7 @@ HashJoin root anti semi join, left side:TableReader, equal:[eq(planner__core__c
|
||||
└─TableFullScan cop[tikv] table:A keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' SELECT FROM_UNIXTIME(name,'%Y-%m-%d') FROM t;
|
||||
id task access object operator info
|
||||
Projection root from_unixtime(cast(planner__core__casetest__pushdown__push_down.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column#13
|
||||
Projection root from_unixtime(cast(planner__core__casetest__pushdown__push_down.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
CREATE TABLE `t4a8656d1` (
|
||||
@ -255,16 +255,16 @@ KEY `idx_4` (`col_1`(4))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci;
|
||||
explain format='plan_tree' select 1, r0 as col_754 from ( select format(t4a8656d1.col_74, 1) as r0 from t4a8656d1 join tld47bc815 on t4a8656d1.col_74 = tld47bc815.col_1 where JSON_OVERLAPS(t4a8656d1.col_73, '[0.035131302371695955]') group by t4a8656d1.col_74, t4a8656d1.col_73 ) as subquery where IsNull(subquery.r0);
|
||||
id task access object operator info
|
||||
Projection root 1->Column#10, Column#9
|
||||
└─Projection root format(cast(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, double BINARY), 1)->Column#9
|
||||
Projection root 1->Column, Column
|
||||
└─Projection root format(cast(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, double BINARY), 1)->Column
|
||||
└─HashAgg root group by:planner__core__casetest__pushdown__push_down.t4a8656d1.col_73, planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, funcs:firstrow(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74)->planner__core__casetest__pushdown__push_down.t4a8656d1.col_74
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, Column#13)]
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, Column)]
|
||||
├─Selection(Build) root isnull(format(cast(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, double BINARY), 1)), json_overlaps(planner__core__casetest__pushdown__push_down.t4a8656d1.col_73, cast("[0.035131302371695955]", json BINARY))
|
||||
│ └─IndexMerge root type: union
|
||||
│ ├─Selection(Build) cop[tikv]
|
||||
│ │ └─IndexRangeScan cop[tikv] table:t4a8656d1, index:idx_39(cast(`col_73` as double array), col_74) range:[0.035131302371695955,0.035131302371695955], keep order:false, stats:pseudo
|
||||
│ └─TableRowIDScan(Probe) cop[tikv] table:t4a8656d1 keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root cast(planner__core__casetest__pushdown__push_down.tld47bc815.col_1, datetime(6) BINARY)->Column#13
|
||||
└─Projection(Probe) root cast(planner__core__casetest__pushdown__push_down.tld47bc815.col_1, datetime(6) BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tld47bc815 keep order:false, stats:pseudo
|
||||
DROP TABLE IF EXISTS final_test_v2;
|
||||
|
||||
@ -9,20 +9,20 @@ drop table if exists td;
|
||||
create table td(a int, b int as (a+1) stored, primary key(b,a));
|
||||
explain format='plan_tree' select * from (select rank() over () as rank_order from t) DT where rank_order <= 3 -- rank not supported in pattern yet;
|
||||
id task access object operator info
|
||||
Projection root Column#6
|
||||
└─Selection root le(Column#6, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root rank()->Column#6 over()
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select b, row_number() over () as rownumber from t) DT where rownumber <= 3 and b > 5 -- pattern is not applicable with complex filter on top of window;
|
||||
id task access object operator info
|
||||
Selection root gt(planner__core__casetest__rule__rule_derive_topn_from_window.t.b, 5), le(Column#6, 3)
|
||||
Selection root gt(planner__core__casetest__rule__rule_derive_topn_from_window.t.b, 5), le(Column, 3)
|
||||
└─Window root row_number()->Column#6 over(rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select b, row_number() over () as rownumber from t) DT where rownumber > 3 -- pattern is not applicable with filter is not < or <=;
|
||||
id task access object operator info
|
||||
Selection root gt(Column#6, 3)
|
||||
Selection root gt(Column, 3)
|
||||
└─Window root row_number()->Column#6 over(rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
@ -40,26 +40,26 @@ Selection root le(planner__core__casetest__rule__rule_derive_topn_from_window.t
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select a,b, row_number() over () as rownumber from t) DT where 3 >= rownumber -- pattern is not applicable with filter is not < or <=;
|
||||
id task access object operator info
|
||||
Selection root ge(3, Column#6)
|
||||
Selection root ge(3, Column)
|
||||
└─Window root row_number()->Column#6 over(rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select a,b, row_number() over () as rownumber from t) DT where rownumber <= -4 -- pattern is not applicable with filter constant negative;
|
||||
id task access object operator info
|
||||
Selection root le(Column#6, -4)
|
||||
Selection root le(Column, -4)
|
||||
└─Window root row_number()->Column#6 over(rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select row_number() over () as rownumber from t) DT where rownumber <= 3 and rownumber >= 2 -- pattern is not applicable with complex filter;
|
||||
id task access object operator info
|
||||
Projection root Column#6
|
||||
└─Selection root ge(Column#6, 2), le(Column#6, 3)
|
||||
Projection root Column
|
||||
└─Selection root ge(Column, 2), le(Column, 3)
|
||||
└─Window root row_number()->Column#6 over(rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select row_number() over (partition by a) from t -- pattern missing filter on row number;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[IndexReader]
|
||||
└─Window root row_number()->Column#6 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.t.a
|
||||
@ -68,8 +68,8 @@ Projection root Column#6->Column#7
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select row_number() over () as rownumber1, row_number() over (partition by a) as rownumber2 from t) DT where rownumber1 <= 3 -- pattern not applicable with multiple window functions;
|
||||
id task access object operator info
|
||||
Projection root Column#8, Column#7
|
||||
└─Selection root le(Column#8, 3)
|
||||
Projection root Column, Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#8 over(rows between current row and current row)
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[IndexReader]
|
||||
└─Window root row_number()->Column#7 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
@ -79,8 +79,8 @@ Projection root Column#8, Column#7
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by a) as rownumber from t) DT where rownumber <= 3 -- pattern is not applicable with partition by not prefix of PK;
|
||||
id task access object operator info
|
||||
Projection root Column#6
|
||||
└─Selection root le(Column#6, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[IndexReader]
|
||||
└─Window root row_number()->Column#6 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.t.a
|
||||
@ -89,8 +89,8 @@ Projection root Column#6
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by a) as rownumber from tt) DT where rownumber <= 3 -- pattern is not applicable with no clustered index on table;
|
||||
id task access object operator info
|
||||
Projection root Column#6
|
||||
└─Selection root le(Column#6, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[IndexReader]
|
||||
└─Window root row_number()->Column#6 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.tt.a rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.tt.a
|
||||
@ -99,8 +99,8 @@ Projection root Column#6
|
||||
└─IndexFullScan cop[tikv] table:tt, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by a) as rownumber from ti) DT where rownumber <= 3 -- pattern is not applicable. ti clustered on 'c' and partition by 'a';
|
||||
id task access object operator info
|
||||
Projection root Column#6
|
||||
└─Selection root le(Column#6, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[TableReader]
|
||||
└─Window root row_number()->Column#6 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.ti.a rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.ti.a
|
||||
@ -109,8 +109,8 @@ Projection root Column#6
|
||||
└─TableFullScan cop[tikv] table:ti keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select a, row_number() over (partition by c) as rownumber from ti) DT where rownumber <= 1 -- pattern is applicable. ti clustered on 'c' and partition by 'c' - not supported yet;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_derive_topn_from_window.ti.a, Column#6
|
||||
└─Selection root le(Column#6, 1)
|
||||
Projection root planner__core__casetest__rule__rule_derive_topn_from_window.ti.a, Column
|
||||
└─Selection root le(Column, 1)
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[TableReader]
|
||||
└─Window root row_number()->Column#6 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.ti.c rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.ti.c
|
||||
@ -119,22 +119,22 @@ Projection root planner__core__casetest__rule__rule_derive_topn_from_window.ti.
|
||||
└─TableFullScan cop[tikv] table:ti keep order:false, stats:pseudo
|
||||
explain format='plan_tree' with agg_t as (select count(*) cnt, a from t group by a) select * from (select row_number() over () as rownumber from agg_t) DT where rownumber <= 3 -- pattern on non-data source;
|
||||
id task access object operator info
|
||||
Projection root Column#14
|
||||
└─Selection root le(Column#14, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#14 over(rows between current row and current row)
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_derive_topn_from_window.t.a, funcs:count(Column#18)->Column#16
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_derive_topn_from_window.t.a, funcs:count(Column)->Column
|
||||
└─IndexReader root index:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_derive_topn_from_window.t.a, funcs:count(1)->Column#18
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_derive_topn_from_window.t.a, funcs:count(1)->Column
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by a+1) as rownumber from td) DT where rownumber <= 1 -- pattern is not applicable with expression in partition by;
|
||||
id task access object operator info
|
||||
Projection root Column#6
|
||||
└─Selection root le(Column#6, 1)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 1)
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[Projection]
|
||||
└─Window root row_number()->Column#6 over(partition by Column#5 rows between current row and current row)
|
||||
└─Sort root Column#5
|
||||
└─Window root row_number()->Column#6 over(partition by Column rows between current row and current row)
|
||||
└─Sort root Column
|
||||
└─ShuffleReceiver root
|
||||
└─Projection root plus(planner__core__casetest__rule__rule_derive_topn_from_window.td.a, 1)->Column#5
|
||||
└─Projection root plus(planner__core__casetest__rule__rule_derive_topn_from_window.td.a, 1)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:td, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
set tidb_opt_derive_topn=1;
|
||||
@ -158,7 +158,7 @@ insert into ti select *,a from t;
|
||||
insert into td(a) select a from t;
|
||||
explain format='plan_tree' select * from (select a,b, row_number() over (order by a) as rownumber from t) DT where rownumber <= 3.5 -- pattern is applicable with N rounded down to an integer. No partition by;
|
||||
id task access object operator info
|
||||
Selection root le(Column#5, 3)
|
||||
Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(order by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─TopN root planner__core__casetest__rule__rule_derive_topn_from_window.t.a, offset:0, count:3
|
||||
└─IndexReader root index:TopN
|
||||
@ -171,8 +171,8 @@ a b rownumber
|
||||
3 2 3
|
||||
explain format='plan_tree' select * from (select row_number() over (order by a) as rownumber from t) DT where rownumber <= 3 -- pattern is applicable. No partition by;
|
||||
id task access object operator info
|
||||
Projection root Column#5
|
||||
└─Selection root le(Column#5, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(order by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─TopN root planner__core__casetest__rule__rule_derive_topn_from_window.t.a, offset:0, count:3
|
||||
└─IndexReader root index:TopN
|
||||
@ -185,8 +185,8 @@ rownumber
|
||||
3
|
||||
explain format='plan_tree' select * from (select row_number() over (order by a) as rownumber from t) DT where rownumber < 3 -- pattern is applicable. No partition by;
|
||||
id task access object operator info
|
||||
Projection root Column#5
|
||||
└─Selection root lt(Column#5, 3)
|
||||
Projection root Column
|
||||
└─Selection root lt(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(order by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─TopN root planner__core__casetest__rule__rule_derive_topn_from_window.t.a, offset:0, count:2
|
||||
└─IndexReader root index:TopN
|
||||
@ -198,8 +198,8 @@ rownumber
|
||||
2
|
||||
explain format='plan_tree' select * from (select row_number() over(rows between 1 preceding and 1 following) as rownumber from t) DT where rownumber <= 3 -- pattern is applicable. No partition by;
|
||||
id task access object operator info
|
||||
Projection root Column#5
|
||||
└─Selection root le(Column#5, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(rows between current row and current row)
|
||||
└─Limit root offset:0, count:3
|
||||
└─IndexReader root index:Limit
|
||||
@ -212,8 +212,8 @@ rownumber
|
||||
3
|
||||
explain format='plan_tree' select * from (select a,row_number() over (order by a desc) as rownumber,b from t) DT where rownumber <= 3 -- pattern is applicable. Order by desc. No partition by;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_derive_topn_from_window.t.a, Column#5, planner__core__casetest__rule__rule_derive_topn_from_window.t.b
|
||||
└─Selection root le(Column#5, 3)
|
||||
Projection root planner__core__casetest__rule__rule_derive_topn_from_window.t.a, Column, planner__core__casetest__rule__rule_derive_topn_from_window.t.b
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(order by planner__core__casetest__rule__rule_derive_topn_from_window.t.a desc rows between current row and current row)
|
||||
└─TopN root planner__core__casetest__rule__rule_derive_topn_from_window.t.a:desc, offset:0, count:3
|
||||
└─IndexReader root index:TopN
|
||||
@ -226,8 +226,8 @@ a rownumber b
|
||||
3 3 2
|
||||
explain format='plan_tree' select count(*) from (select * from (select a,row_number() over (order by b) as rownumber,b from t) DT1 where rownumber <= 1) DT2 -- pattern is applicable. Window has column a + row_number;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#6
|
||||
└─Selection root le(Column#5, 1)
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─Selection root le(Column, 1)
|
||||
└─Window root row_number()->Column#5 over(order by planner__core__casetest__rule__rule_derive_topn_from_window.t.b rows between current row and current row)
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
@ -238,8 +238,8 @@ count(*)
|
||||
1
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by b) as rownumber from t) DT where rownumber <= 1 -- pattern is applicable with partition by prefix of primary key;
|
||||
id task access object operator info
|
||||
Projection root Column#5
|
||||
└─Selection root le(Column#5, 1)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 1)
|
||||
└─Window root row_number()->Column#5 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.t.b rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:true, stats:pseudo
|
||||
@ -249,8 +249,8 @@ rownumber
|
||||
1
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by b order by a) as rownumber from t) DT where rownumber <= 1 -- pattern is applicable with order by, partition by prefix;
|
||||
id task access object operator info
|
||||
Projection root Column#5
|
||||
└─Selection root le(Column#5, 1)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 1)
|
||||
└─Window root row_number()->Column#5 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.t.b order by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:true, stats:pseudo
|
||||
@ -260,9 +260,9 @@ rownumber
|
||||
1
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by b) as rownumber from t where a >= 2) DT where rownumber <= 3 order by rownumber -- pattern is applicable with partition by prefix and filter on data source;
|
||||
id task access object operator info
|
||||
Sort root Column#5
|
||||
└─Projection root Column#5
|
||||
└─Selection root le(Column#5, 3)
|
||||
Sort root Column
|
||||
└─Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.t.b rows between current row and current row)
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] ge(planner__core__casetest__rule__rule_derive_topn_from_window.t.a, 2)
|
||||
@ -275,8 +275,8 @@ rownumber
|
||||
3
|
||||
explain format='plan_tree' select * from (select row_number() over () as rownumber from tt) DT where rownumber <= 3 -- pattern is applicable with no partition on a non-clustered table;
|
||||
id task access object operator info
|
||||
Projection root Column#6
|
||||
└─Selection root le(Column#6, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#6 over(rows between current row and current row)
|
||||
└─Limit root offset:0, count:3
|
||||
└─IndexReader root index:Limit
|
||||
@ -290,7 +290,7 @@ rownumber
|
||||
explain format='plan_tree' select * from (select *, row_number() over (partition by primary_key, secondary_key order by c_timestamp) as rownum from customer where primary_key = 0x002 and secondary_key >= 0x001 and c_timestamp >= 1661883508511000000) as nested where rownum <= 10 order by secondary_key desc;
|
||||
id task access object operator info
|
||||
Sort root planner__core__casetest__rule__rule_derive_topn_from_window.customer.secondary_key:desc
|
||||
└─Selection root le(Column#6, 10)
|
||||
└─Selection root le(Column, 10)
|
||||
└─Window root row_number()->Column#6 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.customer.primary_key, planner__core__casetest__rule__rule_derive_topn_from_window.customer.secondary_key order by planner__core__casetest__rule__rule_derive_topn_from_window.customer.c_timestamp rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.customer.primary_key, planner__core__casetest__rule__rule_derive_topn_from_window.customer.secondary_key, planner__core__casetest__rule__rule_derive_topn_from_window.customer.c_timestamp
|
||||
└─TableReader root data:TopN
|
||||
@ -301,8 +301,8 @@ select * from (select *, row_number() over (partition by primary_key, secondary_
|
||||
primary_key secondary_key c_timestamp value rownum
|
||||
explain format='plan_tree' select * from (select row_number() over (partition by b) as rownumber from td) DT where rownumber <= 1 -- pattern is applicable with partition by prefix of primary key;
|
||||
id task access object operator info
|
||||
Projection root Column#5
|
||||
└─Selection root le(Column#5, 1)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 1)
|
||||
└─Window root row_number()->Column#5 over(partition by planner__core__casetest__rule__rule_derive_topn_from_window.td.b rows between current row and current row)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:td, index:PRIMARY(b, a) keep order:true, stats:pseudo
|
||||
@ -318,15 +318,15 @@ drop table if exists t;
|
||||
create table t(a int, b int, primary key(b,a));
|
||||
explain format='plan_tree' select * from (select a,b, row_number() over (order by a) as rownumber from t) DT where rownumber <= 3.5 -- pattern is applicable but flag is turned off and rule not applied.;
|
||||
id task access object operator info
|
||||
Selection root le(Column#5, 3)
|
||||
Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(order by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.t.a
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:PRIMARY(b, a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from (select row_number() over (order by a) as rownumber from t) DT where rownumber <= 3 -- pattern is applicable but flag is turned off and rule not applied.;
|
||||
id task access object operator info
|
||||
Projection root Column#5
|
||||
└─Selection root le(Column#5, 3)
|
||||
Projection root Column
|
||||
└─Selection root le(Column, 3)
|
||||
└─Window root row_number()->Column#5 over(order by planner__core__casetest__rule__rule_derive_topn_from_window.t.a rows between current row and current row)
|
||||
└─Sort root planner__core__casetest__rule__rule_derive_topn_from_window.t.a
|
||||
└─IndexReader root index:IndexFullScan
|
||||
|
||||
@ -4626,21 +4626,21 @@ HashJoin root anti semi join, left side:HashJoin, equal:[eq(planner__core__case
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ straight_join() */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#11->Column#13
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:HashAgg
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#7, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexReader root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#7->Column#11
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ straight_join() */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -4648,7 +4648,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#1
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
|
||||
│ └─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -4737,19 +4737,19 @@ HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_re
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ straight_join() */ t1.a, (select min(t2.a) from t2) from t1;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#11(<nil>)->Column#12
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#11(<nil>)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#11
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#10
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo
|
||||
explain format='plan_tree' select /*+ straight_join() */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -4758,7 +4758,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -5141,9 +5141,9 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va
|
||||
Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint
|
||||
explain format='plan_tree' select /*+ leading(t1) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5151,15 +5151,15 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#1
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
|
||||
│ └─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5167,7 +5167,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#1
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
|
||||
│ └─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -5175,9 +5175,9 @@ Level Code Message
|
||||
Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LEADING(t3) */. Maybe you can use the table alias name
|
||||
explain format='plan_tree' select /*+ leading(t2, t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5185,7 +5185,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#1
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
|
||||
│ └─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -5193,9 +5193,9 @@ Level Code Message
|
||||
Warning 1815 There are no matching table names for (t2, t3) in optimizer hint /*+ LEADING(t2, t3) */. Maybe you can use the table alias name
|
||||
explain format='plan_tree' select /*+ leading(t1, t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5203,7 +5203,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#1
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
|
||||
│ └─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -5212,9 +5212,9 @@ Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2, t2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5222,7 +5222,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#1
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
|
||||
│ └─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -5230,9 +5230,9 @@ Level Code Message
|
||||
Warning 1815 There are no matching table names for (t3, t2) in optimizer hint /*+ LEADING(t3, t2) */. Maybe you can use the table alias name
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2, t1) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:StreamAgg
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─StreamAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5240,7 +5240,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#1
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
|
||||
│ └─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -5251,9 +5251,9 @@ explain format='plan_tree' select /*+ leading(t4, t3@sel_2) */ * from t1 join t2
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:Column#13, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(Column#13, planner__core__casetest__rule__rule_join_reorder.t1.a), eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:Column, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(Column, planner__core__casetest__rule__rule_join_reorder.t1.a), eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5276,9 +5276,9 @@ explain format='plan_tree' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b
|
||||
└─IndexHashJoin root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)]
|
||||
│ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)]
|
||||
│ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ └─TableReader root data:Selection
|
||||
│ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5297,9 +5297,9 @@ explain format='plan_tree' select /*+ leading(t3@sel_2) */ * from t1 join t2 on
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:Column#13, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(Column#13, planner__core__casetest__rule__rule_join_reorder.t1.a), eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:Column, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(Column, planner__core__casetest__rule__rule_join_reorder.t1.a), eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5321,9 +5321,9 @@ explain format='plan_tree' select /*+ leading(t3@sel_2, t2) */ * from t1 join t2
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:Column#13, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(Column#13, planner__core__casetest__rule__rule_join_reorder.t1.a), eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:Column, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(Column, planner__core__casetest__rule__rule_join_reorder.t1.a), eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5346,9 +5346,9 @@ explain format='plan_tree' select /*+ leading(t4, t3@sel_2) */ * from t1 join t2
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5369,9 +5369,9 @@ explain format='plan_tree' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b
|
||||
└─IndexHashJoin root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
│ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
│ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ └─TableReader root data:Selection
|
||||
│ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5390,9 +5390,9 @@ explain format='plan_tree' select /*+ leading(t3@sel_2) */ * from t1 join t2 on
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5412,9 +5412,9 @@ explain format='plan_tree' select /*+ leading(t3@sel_2, t2) */ * from t1 join t2
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column#13))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t1.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
│ │ ├─Selection(Build) root not(isnull(Column))
|
||||
│ │ │ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ │ │ └─TableReader root data:Selection
|
||||
│ │ │ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ │ │ └─TableFullScan cop[tikv] table:t3 keep order:false
|
||||
@ -5805,7 +5805,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, planner_
|
||||
└─TableFullScan cop[tikv] table:t4 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t1) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5814,14 +5814,14 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t1, t2@sel_2) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5830,7 +5830,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -5840,7 +5840,7 @@ Warning 1815 There are no matching table names for (t2) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t1, t3) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5849,14 +5849,14 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t2@sel_2, t1) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5865,7 +5865,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -5875,7 +5875,7 @@ Warning 1815 There are no matching table names for (t2) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t2@sel_2, t3) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5884,7 +5884,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -5894,7 +5894,7 @@ Warning 1815 There are no matching table names for (t2) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t1, t2@sel_2) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5903,7 +5903,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -5913,7 +5913,7 @@ Warning 1815 There are no matching table names for (t2) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t3, t2@sel_2) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:false
|
||||
@ -5922,7 +5922,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)], keep order:false, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -6964,31 +6964,31 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va
|
||||
Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint
|
||||
explain format='plan_tree' select /*+ leading(t1) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:HashAgg
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─MergeJoin root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
│ └─IndexReader(Probe) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:HashAgg
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─MergeJoin root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
│ └─IndexReader(Probe) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -6996,16 +6996,16 @@ Level Code Message
|
||||
Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LEADING(t3) */. Maybe you can use the table alias name
|
||||
explain format='plan_tree' select /*+ leading(t2, t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, Column
|
||||
└─Apply root CARTESIAN left outer join, left side:HashAgg
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
├─HashAgg(Build) root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a
|
||||
│ └─MergeJoin root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
│ ├─IndexReader(Build) root index:IndexFullScan
|
||||
│ │ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
│ └─IndexReader(Probe) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
└─MaxOneRow(Probe) root
|
||||
└─Projection root Column#10->Column#14
|
||||
└─Projection root Column
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] gt(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a)
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo
|
||||
@ -7013,11 +7013,11 @@ Level Code Message
|
||||
Warning 1815 There are no matching table names for (t2, t3) in optimizer hint /*+ LEADING(t2, t3) */. Maybe you can use the table alias name
|
||||
explain format='plan_tree' select /*+ leading(t4, t3@sel_2) */ * from t1 right join t2 on t1.a=t2.a join t4 on t1.b = t4.b where t1.a = (select max(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)]
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column#22)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)]
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#22
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
@ -7037,11 +7037,11 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va
|
||||
explain format='plan_tree' select /*+ leading(t4) */ * from t1 right join t2 on t1.a=t2.a join t4 on t1.b = t4.b where t1.a = (select max(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)]
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column#17)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)]
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#17
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)]
|
||||
@ -7057,11 +7057,11 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, planner_
|
||||
└─TableFullScan cop[tikv] table:t4 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a join t4 on t1.b = t4.b where t1.a = (select max(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)]
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column#21)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)]
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#21
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
@ -7079,11 +7079,11 @@ Level Code Message
|
||||
Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LEADING(t3) */. Maybe you can use the table alias name
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2, t1) */ * from t1 left join t2 on t1.a=t2.a join t4 on t1.b = t4.b where t1.a = (select max(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)]
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column#21)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)]
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#21
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:max(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
@ -7102,11 +7102,11 @@ Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t4, t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where t1.a > (select min(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column#21)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#21
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
@ -7126,11 +7126,11 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va
|
||||
explain format='plan_tree' select /*+ leading(t4) */ * from t1 left join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where t1.a > (select min(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column#17)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#17
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)]
|
||||
@ -7146,11 +7146,11 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, planner_
|
||||
└─TableFullScan cop[tikv] table:t4 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a join t4 on t1.b = t4.b where t1.a > (select min(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column#21)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#21
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
@ -7168,11 +7168,11 @@ Level Code Message
|
||||
Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LEADING(t3) */. Maybe you can use the table alias name
|
||||
explain format='plan_tree' select /*+ leading(t3@sel_2, t2) */ * from t1 right join t2 on t1.a=t2.a join t4 on t1.b = t4.b where t1.a > (select min(t3.a) from t3 where t1.b = t3.b);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column#13)
|
||||
├─Selection(Build) root not(isnull(Column#13))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column#22)->Column#13, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
HashJoin root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:gt(planner__core__casetest__rule__rule_join_reorder.t1.a, Column)
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(Column)->Column, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.b)->planner__core__casetest__rule__rule_join_reorder.t3.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#22
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b))
|
||||
│ └─TableFullScan cop[tikv] table:t3 keep order:false, stats:pseudo
|
||||
└─HashJoin(Probe) root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)]
|
||||
@ -7392,7 +7392,7 @@ HashJoin root right outer join, left side:Projection, equal:[eq(planner__core__
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t1) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─MergeJoin root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
@ -7400,14 +7400,14 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t1, t2@sel_2) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─MergeJoin root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
@ -7415,7 +7415,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -7425,7 +7425,7 @@ Warning 1815 There are no matching table names for (t2) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t1, t3) */ t1.a, (select min(t2.a) from t2) from t1 join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─MergeJoin root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
@ -7433,14 +7433,14 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
└─IndexFullScan cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo
|
||||
explain format='plan_tree' select /*+ leading(t2@sel_2, t1) */ t1.a, (select min(t2.a) from t2) from t1 left join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─MergeJoin root left outer join, left side:IndexReader, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
@ -7448,7 +7448,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
@ -7458,7 +7458,7 @@ Warning 1815 There are no matching table names for (t2) in optimizer hint /*+ LE
|
||||
Warning 1815 leading hint is inapplicable, check if the leading hint table is valid
|
||||
explain format='plan_tree' select /*+ leading(t3, t2@sel_2) */ t1.a, (select min(t2.a) from t2) from t1 right join t3 on t1.a = t3.a;
|
||||
id task access object operator info
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column#15
|
||||
Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQueryCol#14(<nil>)->Column
|
||||
└─MergeJoin root right outer join, left side:IndexReader, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo
|
||||
@ -7466,7 +7466,7 @@ Projection root planner__core__casetest__rule__rule_join_reorder.t1.a, ScalarQu
|
||||
└─IndexFullScan cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo
|
||||
ScalarSubQuery root Output: ScalarQueryCol#14
|
||||
└─MaxOneRow root
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column#13
|
||||
└─StreamAgg root funcs:min(planner__core__casetest__rule__rule_join_reorder.t2.a)->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─IndexReader root index:Limit
|
||||
└─Limit cop[tikv] offset:0, count:1
|
||||
|
||||
@ -29,10 +29,10 @@ Sort root planner__core__casetest__rule__rule_result_reorder.t.b, planner__core
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select min(b), max(c) from t use index(primary) group by d;
|
||||
id task access object operator info
|
||||
Sort root Column#5, Column#6
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_result_reorder.t.d, funcs:min(Column#7)->Column#5, funcs:max(Column#8)->Column#6
|
||||
Sort root Column, Column
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_result_reorder.t.d, funcs:min(Column)->Column, funcs:max(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_result_reorder.t.d, funcs:min(planner__core__casetest__rule__rule_result_reorder.t.b)->Column#7, funcs:max(planner__core__casetest__rule__rule_result_reorder.t.c)->Column#8
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_result_reorder.t.d, funcs:min(planner__core__casetest__rule__rule_result_reorder.t.b)->Column, funcs:max(planner__core__casetest__rule__rule_result_reorder.t.c)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select min(b), max(c) from t use index(primary) group by a;
|
||||
id task access object operator info
|
||||
@ -97,7 +97,7 @@ Insert root N/A
|
||||
explain format='plan_tree' insert into t select t1.a, t2.b, t1.c+t2.c from t t1, t t2 where t1.a=t2.a;
|
||||
id task access object operator info
|
||||
Insert root N/A
|
||||
└─Projection root planner__core__casetest__rule__rule_result_reorder.t.a, planner__core__casetest__rule__rule_result_reorder.t.b, plus(planner__core__casetest__rule__rule_result_reorder.t.c, planner__core__casetest__rule__rule_result_reorder.t.c)->Column#10
|
||||
└─Projection root planner__core__casetest__rule__rule_result_reorder.t.a, planner__core__casetest__rule__rule_result_reorder.t.b, plus(planner__core__casetest__rule__rule_result_reorder.t.c, planner__core__casetest__rule__rule_result_reorder.t.c)->Column
|
||||
└─MergeJoin root inner join, left key:planner__core__casetest__rule__rule_result_reorder.t.a, right key:planner__core__casetest__rule__rule_result_reorder.t.a
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:true, stats:pseudo
|
||||
@ -106,7 +106,7 @@ Insert root N/A
|
||||
explain format='plan_tree' insert into t select min(a), max(b), sum(c) from t group by a;
|
||||
id task access object operator info
|
||||
Insert root N/A
|
||||
└─Projection root planner__core__casetest__rule__rule_result_reorder.t.a->Column#7, planner__core__casetest__rule__rule_result_reorder.t.b->Column#8, cast(planner__core__casetest__rule__rule_result_reorder.t.c, decimal(32,0) BINARY)->Column#9
|
||||
└─Projection root planner__core__casetest__rule__rule_result_reorder.t.a->Column, planner__core__casetest__rule__rule_result_reorder.t.b->Column, cast(planner__core__casetest__rule__rule_result_reorder.t.c, decimal(32,0) BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' delete from t;
|
||||
@ -276,7 +276,7 @@ id task access object operator info
|
||||
Batch_Point_Get root table:t1, index:b(b) keep order:true, desc:false
|
||||
explain format='plan_tree' select * from t1 where a > 10 union all select * from t2 where b > 20;
|
||||
id task access object operator info
|
||||
Sort root Column#9, Column#10, Column#11, Column#12
|
||||
Sort root Column, Column, Column, Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableRangeScan
|
||||
│ └─TableRangeScan cop[tikv] table:t1 range:(10,+inf], keep order:false, stats:pseudo
|
||||
@ -285,8 +285,8 @@ Sort root Column#9, Column#10, Column#11, Column#12
|
||||
└─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from t1 where a > 10 union distinct select * from t2 where b > 20;
|
||||
id task access object operator info
|
||||
Sort root Column#9, Column#10, Column#11, Column#12
|
||||
└─HashAgg root group by:Column#10, Column#11, Column#12, Column#9, funcs:firstrow(Column#9)->Column#9, funcs:firstrow(Column#10)->Column#10, funcs:firstrow(Column#11)->Column#11, funcs:firstrow(Column#12)->Column#12
|
||||
Sort root Column, Column, Column, Column
|
||||
└─HashAgg root group by:Column, Column, Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─TableReader root data:TableRangeScan
|
||||
│ └─TableRangeScan cop[tikv] table:t1 range:(10,+inf], keep order:false, stats:pseudo
|
||||
@ -313,29 +313,29 @@ Sort root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__cor
|
||||
└─TableRangeScan cop[tikv] table:t1 range:(10,+inf], keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select sum(b) over(partition by a) as sum_b from t1;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
└─Sort root planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.a, Column#6
|
||||
Projection root Column
|
||||
└─Sort root planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.a, Column
|
||||
└─Window root sum(cast(planner__core__casetest__rule__rule_result_reorder.t1.b, decimal(10,0) BINARY))->Column#6 over(partition by planner__core__casetest__rule__rule_result_reorder.t1.a)
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:true, stats:pseudo
|
||||
explain format='plan_tree' select min(a), max(b), sum(c) from t1 group by d;
|
||||
id task access object operator info
|
||||
Sort root Column#5, Column#6, Column#7
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(Column#8)->Column#5, funcs:max(Column#9)->Column#6, funcs:sum(Column#10)->Column#7
|
||||
Sort root Column, Column, Column
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(Column)->Column, funcs:max(Column)->Column, funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(planner__core__casetest__rule__rule_result_reorder.t1.a)->Column#8, funcs:max(planner__core__casetest__rule__rule_result_reorder.t1.b)->Column#9, funcs:sum(planner__core__casetest__rule__rule_result_reorder.t1.c)->Column#10
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(planner__core__casetest__rule__rule_result_reorder.t1.a)->Column, funcs:max(planner__core__casetest__rule__rule_result_reorder.t1.b)->Column, funcs:sum(planner__core__casetest__rule__rule_result_reorder.t1.c)->Column
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select min(a), max(b), sum(c) from t1 group by d having max(b) < 20;
|
||||
id task access object operator info
|
||||
Sort root Column#5, Column#6, Column#7
|
||||
└─Selection root lt(Column#6, 20)
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(Column#11)->Column#5, funcs:max(Column#12)->Column#6, funcs:sum(Column#13)->Column#7
|
||||
Sort root Column, Column, Column
|
||||
└─Selection root lt(Column, 20)
|
||||
└─HashAgg root group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(Column)->Column, funcs:max(Column)->Column, funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(planner__core__casetest__rule__rule_result_reorder.t1.a)->Column#11, funcs:max(planner__core__casetest__rule__rule_result_reorder.t1.b)->Column#12, funcs:sum(planner__core__casetest__rule__rule_result_reorder.t1.c)->Column#13
|
||||
└─HashAgg cop[tikv] group by:planner__core__casetest__rule__rule_result_reorder.t1.d, funcs:min(planner__core__casetest__rule__rule_result_reorder.t1.a)->Column, funcs:max(planner__core__casetest__rule__rule_result_reorder.t1.b)->Column, funcs:sum(planner__core__casetest__rule__rule_result_reorder.t1.c)->Column
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select case when a=1 then 'a1' when a=2 then 'a2' else 'ax' end from t1 ;
|
||||
id task access object operator info
|
||||
Projection root case(eq(planner__core__casetest__rule__rule_result_reorder.t1.a, 1), a1, eq(planner__core__casetest__rule__rule_result_reorder.t1.a, 2), a2, ax)->Column#5
|
||||
Projection root case(eq(planner__core__casetest__rule__rule_result_reorder.t1.a, 1), a1, eq(planner__core__casetest__rule__rule_result_reorder.t1.a, 2), a2, ax)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:true, stats:pseudo
|
||||
set tidb_partition_prune_mode='dynamic';
|
||||
|
||||
@ -319,7 +319,7 @@ CAST(IFNULL(cnull, '1') AS DATE) CAST(IFNULL(cnotnull, '1') AS DATE)
|
||||
NULL NULL
|
||||
explain format="plan_tree" select IFNULL(cnotnull, '1') from t1;
|
||||
id task access object operator info
|
||||
Projection root cast(planner__core__expression_rewriter.t1.cnotnull, varchar(4) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci)->Column#4
|
||||
Projection root cast(planner__core__expression_rewriter.t1.cnotnull, varchar(4) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
DROP TABLE if exists t0;
|
||||
@ -439,10 +439,10 @@ select 1 as col from tb0 where ((true not in (select 1)) not in (tb0.c0));
|
||||
col
|
||||
explain format='plan_tree' select 1 from tb0 where ((true not in (select 1)) not in (tb0.c0));
|
||||
id task access object operator info
|
||||
Projection root 1->Column#5
|
||||
└─Selection root ne(Column#4, planner__core__expression_rewriter.tb0.c0)
|
||||
Projection root 1->Column
|
||||
└─Selection root ne(Column, planner__core__expression_rewriter.tb0.c0)
|
||||
└─HashJoin root CARTESIAN anti left outer semi join, left side:TableReader
|
||||
├─Projection(Build) root 0->Column#9
|
||||
├─Projection(Build) root 0->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:tb0 keep order:false, stats:pseudo
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -403,7 +403,7 @@ create table t(a int, j json,
|
||||
index i_int((cast(j->'$.int' as signed array))));
|
||||
explain format='plan_tree' select (j->'$.int') from t where (1 member of (j->'$.int'));
|
||||
id task access object operator info
|
||||
Projection root json_extract(planner__core__indexmerge_path.t.j, $.int)->Column#5
|
||||
Projection root json_extract(planner__core__indexmerge_path.t.j, $.int)->Column
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t, index:i_int(cast(json_extract(`j`, _utf8mb4'$.int') as signed array)) range:[1,1], keep order:false, stats:pseudo
|
||||
└─TableRowIDScan(Probe) cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -420,7 +420,7 @@ IndexMerge root type: union
|
||||
└─TableRowIDScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select (j->'$.int') from t where json_contains((j->'$.int'), '[1, 2, 3]');
|
||||
id task access object operator info
|
||||
Projection root json_extract(planner__core__indexmerge_path.t.j, $.int)->Column#5
|
||||
Projection root json_extract(planner__core__indexmerge_path.t.j, $.int)->Column
|
||||
└─IndexMerge root type: intersection
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t, index:i_int(cast(json_extract(`j`, _utf8mb4'$.int') as signed array)) range:[1,1], keep order:false, stats:pseudo
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t, index:i_int(cast(json_extract(`j`, _utf8mb4'$.int') as signed array)) range:[2,2], keep order:false, stats:pseudo
|
||||
@ -443,7 +443,7 @@ IndexMerge root type: intersection
|
||||
└─TableRowIDScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select (j->'$.int') from t where json_overlaps((j->'$.int'), '[1, 2, 3]');
|
||||
id task access object operator info
|
||||
Projection root json_extract(planner__core__indexmerge_path.t.j, $.int)->Column#5
|
||||
Projection root json_extract(planner__core__indexmerge_path.t.j, $.int)->Column
|
||||
└─Selection root json_overlaps(json_extract(planner__core__indexmerge_path.t.j, "$.int"), cast("[1, 2, 3]", json BINARY))
|
||||
└─IndexMerge root type: union
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t, index:i_int(cast(json_extract(`j`, _utf8mb4'$.int') as signed array)) range:[1,1], keep order:false, stats:pseudo
|
||||
|
||||
@ -60,12 +60,12 @@ c_custkey c_count
|
||||
6 0
|
||||
explain format='plan_tree' select c_custkey, count(o_orderkey) as c_count from customer left outer join orders on c_custkey = o_custkey group by c_custkey;
|
||||
id task access object operator info
|
||||
Projection root planner__core__integration.customer.c_custkey, Column#7
|
||||
└─HashAgg root group by:planner__core__integration.customer.c_custkey, funcs:count(Column#8)->Column#7, funcs:firstrow(planner__core__integration.customer.c_custkey)->planner__core__integration.customer.c_custkey
|
||||
Projection root planner__core__integration.customer.c_custkey, Column
|
||||
└─HashAgg root group by:planner__core__integration.customer.c_custkey, funcs:count(Column)->Column, funcs:firstrow(planner__core__integration.customer.c_custkey)->planner__core__integration.customer.c_custkey
|
||||
└─HashJoin root left outer join, left side:TableReader, equal:[eq(planner__core__integration.customer.c_custkey, planner__core__integration.orders.o_custkey)]
|
||||
├─HashAgg(Build) root group by:planner__core__integration.orders.o_custkey, funcs:count(Column#9)->Column#8, funcs:firstrow(planner__core__integration.orders.o_custkey)->planner__core__integration.orders.o_custkey
|
||||
├─HashAgg(Build) root group by:planner__core__integration.orders.o_custkey, funcs:count(Column)->Column, funcs:firstrow(planner__core__integration.orders.o_custkey)->planner__core__integration.orders.o_custkey
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__integration.orders.o_custkey, funcs:count(planner__core__integration.orders.o_orderkey)->Column#9
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__integration.orders.o_custkey, funcs:count(planner__core__integration.orders.o_orderkey)->Column
|
||||
│ └─TableFullScan cop[tikv] table:orders keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:customer keep order:false, stats:pseudo
|
||||
@ -74,12 +74,12 @@ c_custkey c_count
|
||||
6 0
|
||||
explain format='plan_tree' select c_custkey, count(o_orderkey) as c_count from orders right outer join customer on c_custkey = o_custkey group by c_custkey;
|
||||
id task access object operator info
|
||||
Projection root planner__core__integration.customer.c_custkey, Column#7
|
||||
└─HashAgg root group by:planner__core__integration.customer.c_custkey, funcs:count(Column#8)->Column#7, funcs:firstrow(planner__core__integration.customer.c_custkey)->planner__core__integration.customer.c_custkey
|
||||
Projection root planner__core__integration.customer.c_custkey, Column
|
||||
└─HashAgg root group by:planner__core__integration.customer.c_custkey, funcs:count(Column)->Column, funcs:firstrow(planner__core__integration.customer.c_custkey)->planner__core__integration.customer.c_custkey
|
||||
└─HashJoin root right outer join, left side:HashAgg, equal:[eq(planner__core__integration.orders.o_custkey, planner__core__integration.customer.c_custkey)]
|
||||
├─HashAgg(Build) root group by:planner__core__integration.orders.o_custkey, funcs:count(Column#9)->Column#8, funcs:firstrow(planner__core__integration.orders.o_custkey)->planner__core__integration.orders.o_custkey
|
||||
├─HashAgg(Build) root group by:planner__core__integration.orders.o_custkey, funcs:count(Column)->Column, funcs:firstrow(planner__core__integration.orders.o_custkey)->planner__core__integration.orders.o_custkey
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__integration.orders.o_custkey, funcs:count(planner__core__integration.orders.o_orderkey)->Column#9
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__integration.orders.o_custkey, funcs:count(planner__core__integration.orders.o_orderkey)->Column
|
||||
│ └─TableFullScan cop[tikv] table:orders keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:customer keep order:false, stats:pseudo
|
||||
@ -339,12 +339,12 @@ set @@tidb_partition_prune_mode='static';
|
||||
explain format='plan_tree' select approx_count_distinct(a), b from t group by b order by b desc;
|
||||
id task access object operator info
|
||||
Sort root planner__core__integration.t.b:desc
|
||||
└─HashAgg root group by:planner__core__integration.t.b, funcs:approx_count_distinct(Column#5)->Column#4, funcs:firstrow(Column#6)->planner__core__integration.t.b
|
||||
└─HashAgg root group by:planner__core__integration.t.b, funcs:approx_count_distinct(Column)->Column, funcs:firstrow(Column)->planner__core__integration.t.b
|
||||
└─PartitionUnion root
|
||||
├─HashAgg root group by:planner__core__integration.t.b, funcs:approx_count_distinct(planner__core__integration.t.a)->Column#5, funcs:firstrow(planner__core__integration.t.b)->Column#6, funcs:firstrow(planner__core__integration.t.b)->planner__core__integration.t.b
|
||||
├─HashAgg root group by:planner__core__integration.t.b, funcs:approx_count_distinct(planner__core__integration.t.a)->Column, funcs:firstrow(planner__core__integration.t.b)->Column, funcs:firstrow(planner__core__integration.t.b)->planner__core__integration.t.b
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t, partition:p0 keep order:false, stats:pseudo
|
||||
└─HashAgg root group by:planner__core__integration.t.b, funcs:approx_count_distinct(planner__core__integration.t.a)->Column#5, funcs:firstrow(planner__core__integration.t.b)->Column#6, funcs:firstrow(planner__core__integration.t.b)->planner__core__integration.t.b
|
||||
└─HashAgg root group by:planner__core__integration.t.b, funcs:approx_count_distinct(planner__core__integration.t.a)->Column, funcs:firstrow(planner__core__integration.t.b)->Column, funcs:firstrow(planner__core__integration.t.b)->planner__core__integration.t.b
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t, partition:p1 keep order:false, stats:pseudo
|
||||
select approx_count_distinct(a), b from t group by b order by b desc;
|
||||
@ -2289,9 +2289,9 @@ drop table t;
|
||||
TableDual root rows:0
|
||||
drop table t;
|
||||
explain format='plan_tree' select /*+ HASH_JOIN(@sel_1 t2) */ * FROM (select 1) t1 NATURAL LEFT JOIN (select 2) t2;
|
||||
id task access object operator info
|
||||
id task access object operator info
|
||||
HashJoin root CARTESIAN left outer join, left side:Projection
|
||||
├─Projection(Build) root 2->Column#2
|
||||
├─Projection(Build) root 2->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection(Probe) root 1->Column
|
||||
└─TableDual root rows:1
|
||||
@ -2848,7 +2848,7 @@ count(1)
|
||||
select /*+ nth_plan(3) */ count(1) from t0 where c > 10 and b < 2;
|
||||
count(1)
|
||||
0
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(1) from t0 where c > 10 and b < 2;
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(1) from t0 where c > 10 and b < 2;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─Selection root gt(planner__core__integration.t0.c, 10)
|
||||
@ -3596,10 +3596,10 @@ Projection root planner__core__integration.t1.a
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] eq(planner__core__integration.t2.c, planner__core__integration.t1.b)
|
||||
└─TableFullScan cop[tikv] table:two keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select rank() over (partition by table_name) from information_schema.tables;
|
||||
explain format='plan_tree' select rank() over (partition by table_name) from information_schema.tables;
|
||||
id task access object operator info
|
||||
Projection root Column#29->Column#30
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[MemTableScan]
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[MemTableScan]
|
||||
└─Window root rank()->Column#29 over(partition by Column)
|
||||
└─Sort root Column
|
||||
└─ShuffleReceiver root
|
||||
@ -4269,14 +4269,14 @@ KEY k (k)
|
||||
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
|
||||
KEY k (k)
|
||||
);
|
||||
explain format='plan_tree' select row_number() over(order by a.k) from (select * from sbtest where id<10) a;
|
||||
explain format='plan_tree' select row_number() over(order by a.k) from (select * from sbtest where id<10) a;
|
||||
id task access object operator info
|
||||
Projection root Column
|
||||
└─Window root row_number()->Column#6 over(order by planner__core__integration.sbtest.k rows between current row and current row)
|
||||
└─Sort root planner__core__integration.sbtest.k
|
||||
└─TableReader root data:TableRangeScan
|
||||
└─TableRangeScan cop[tikv] table:sbtest range:[0,10), keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(1) from sbtest where id<1 group by k;
|
||||
explain format='plan_tree' select /*+ stream_agg() */ count(1) from sbtest where id<1 group by k;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:planner__core__integration.sbtest.k, funcs:count(1)->Column
|
||||
└─Sort root planner__core__integration.sbtest.k
|
||||
@ -4300,8 +4300,8 @@ drop table if exists t;
|
||||
1
|
||||
drop table if exists t;
|
||||
create table t (col timestamp);
|
||||
explain format='plan_tree' select cast(col as char) from t group by cast(col as char);
|
||||
id task access object operator info
|
||||
explain format='plan_tree' select cast(col as char) from t group by cast(col as char);
|
||||
id task access object operator info
|
||||
Projection root cast(planner__core__integration.t.col, var_string(19))->Column
|
||||
└─HashAgg root group by:Column#5, funcs:firstrow(Column#6)->planner__core__integration.t.col
|
||||
└─HashAgg root group by:Column, funcs:firstrow(Column)->planner__core__integration.t.col
|
||||
└─TableReader root data:HashAgg
|
||||
|
||||
@ -263,14 +263,14 @@ create table t1(a varchar(20) collate utf8mb4_bin, index ia(a));
|
||||
insert into t1 value('测试'),('测试 '),('xxx ');
|
||||
explain format = 'plan_tree' select *,length(a) from t1 where a like '测试 %';
|
||||
id task access object operator info
|
||||
Projection root planner__core__issuetest__planner_issue.t1.a, length(planner__core__issuetest__planner_issue.t1.a)->Column#3
|
||||
Projection root planner__core__issuetest__planner_issue.t1.a, length(planner__core__issuetest__planner_issue.t1.a)->Column
|
||||
└─UnionScan root like(planner__core__issuetest__planner_issue.t1.a, "测试 %", 92)
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__issuetest__planner_issue.t1.a, "测试 %", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:ia(a) range:["测试","测试!"), keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select *,length(a) from t1 where a like '测试';
|
||||
id task access object operator info
|
||||
Projection root planner__core__issuetest__planner_issue.t1.a, length(planner__core__issuetest__planner_issue.t1.a)->Column#3
|
||||
Projection root planner__core__issuetest__planner_issue.t1.a, length(planner__core__issuetest__planner_issue.t1.a)->Column
|
||||
└─UnionScan root like(planner__core__issuetest__planner_issue.t1.a, "测试", 92)
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__issuetest__planner_issue.t1.a, "测试", 92)
|
||||
@ -295,14 +295,14 @@ create table t2(a varchar(20) collate gbk_chinese_ci, index ia(a));
|
||||
insert into t2 value('测试'),('测试 ');
|
||||
explain format = 'plan_tree' select *,length(a) from t2 where a like '测试 %';
|
||||
id task access object operator info
|
||||
Projection root planner__core__issuetest__planner_issue.t2.a, length(to_binary(planner__core__issuetest__planner_issue.t2.a))->Column#3
|
||||
Projection root planner__core__issuetest__planner_issue.t2.a, length(to_binary(planner__core__issuetest__planner_issue.t2.a))->Column
|
||||
└─UnionScan root like(planner__core__issuetest__planner_issue.t2.a, "测试 %", 92)
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__issuetest__planner_issue.t2.a, "测试 %", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t2, index:ia(a) range:["\x89\a\xba%","\x89\a\xba%!"), keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select *,length(a) from t2 where a like '测试';
|
||||
id task access object operator info
|
||||
Projection root planner__core__issuetest__planner_issue.t2.a, length(to_binary(planner__core__issuetest__planner_issue.t2.a))->Column#3
|
||||
Projection root planner__core__issuetest__planner_issue.t2.a, length(to_binary(planner__core__issuetest__planner_issue.t2.a))->Column
|
||||
└─UnionScan root like(planner__core__issuetest__planner_issue.t2.a, "测试", 92)
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__issuetest__planner_issue.t2.a, "测试", 92)
|
||||
@ -651,12 +651,12 @@ set tidb_executor_concurrency = 1;
|
||||
set tidb_window_concurrency = 100;
|
||||
explain format='plan_tree' select * from (SELECT DISTINCT cc2 as a, cc2 as b, cc1 as c FROM t2 UNION ALL SELECT count(1) over (partition by cc1), cc2, cc1 FROM t1) x order by a,b,c;
|
||||
id task access object operator info
|
||||
Sort root Column#8, Column#9, Column#10
|
||||
Sort root Column, Column, Column
|
||||
└─Union root
|
||||
├─Projection root test.t2.cc2->Column#8, test.t2.cc2->Column#9, test.t2.cc1->Column#10
|
||||
├─Projection root test.t2.cc2->Column, test.t2.cc2->Column, test.t2.cc1->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─Projection root cast(Column#7, text BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8, test.t1.cc2->Column#9, test.t1.cc1->Column#10
|
||||
└─Projection root cast(Column, text BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column, test.t1.cc2->Column, test.t1.cc1->Column
|
||||
└─Shuffle root execution info: concurrency:100, data sources:[TableReader]
|
||||
└─Window root count(1)->Column#7 over(partition by test.t1.cc1)
|
||||
└─Sort root test.t1.cc1
|
||||
@ -707,12 +707,12 @@ JOIN tceb7972c ON tceb7972c.col_19 = t61a85298.col_71
|
||||
WHERE 16739493649928310215 MEMBER OF (derived_table.col_60767)
|
||||
OR NOT (JSON_CONTAINS(derived_table.col_60767, '6019730272580550835'));
|
||||
id task access object operator info
|
||||
Projection root 1->Column#18
|
||||
└─HashJoin root inner join, equal:[eq(test.tceb7972c.col_19, Column#19)]
|
||||
Projection root 1->Column
|
||||
└─HashJoin root inner join, equal:[eq(test.tceb7972c.col_19, Column)]
|
||||
├─TableReader(Build) root partition:all data:Selection
|
||||
│ └─Selection cop[tikv] or(json_memberof(cast(16739493649928310215, json BINARY), test.tceb7972c.col_17), not(istrue_with_null(json_contains(test.tceb7972c.col_17, cast("6019730272580550835", json BINARY)))))
|
||||
│ └─TableFullScan cop[tikv] table:tceb7972c keep order:false, stats:partial[col_17:missing]
|
||||
└─Projection(Probe) root cast(test.t61a85298.col_71, double BINARY)->Column#19
|
||||
└─Projection(Probe) root cast(test.t61a85298.col_71, double BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t61a85298 keep order:false, stats:pseudo
|
||||
drop table if exists t0, t1;
|
||||
@ -954,7 +954,7 @@ create table t4 like t1;
|
||||
set @@tidb_opt_join_reorder_threshold=5;
|
||||
explain format='plan_tree' select 1 from t1,t2,t3,t4 where t1.a=t2.a and t3.b=t4.b;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#13
|
||||
Projection root 1->Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─HashJoin(Build) root inner join, equal:[eq(test.t3.b, test.t4.b)]
|
||||
│ ├─TableReader(Build) root data:Selection
|
||||
|
||||
@ -15,16 +15,16 @@ PARTITION p20201128 VALUES LESS THAN ("20201129"),
|
||||
PARTITION p20201129 VALUES LESS THAN ("20201130"));
|
||||
explain format='plan_tree' select /*+ HASH_AGG() */ count(1) from t1 where dt in ('2020-11-27','2020-11-28');
|
||||
id task access object operator info
|
||||
HashAgg root funcs:count(Column#5)->Column#4
|
||||
HashAgg root funcs:count(Column)->Column
|
||||
└─PartitionUnion root
|
||||
├─HashAgg root funcs:count(Column#7)->Column#5
|
||||
├─HashAgg root funcs:count(Column)->Column
|
||||
│ └─IndexReader root index:HashAgg
|
||||
│ └─HashAgg cop[tikv] funcs:count(1)->Column#7
|
||||
│ └─HashAgg cop[tikv] funcs:count(1)->Column
|
||||
│ └─Selection cop[tikv] in(test_range_col_in.t1.dt, 2020-11-27 00:00:00.000000, 2020-11-28 00:00:00.000000)
|
||||
│ └─IndexFullScan cop[tikv] table:t1, partition:p20201127, index:PRIMARY(id, dt) keep order:false, stats:pseudo
|
||||
└─HashAgg root funcs:count(Column#10)->Column#5
|
||||
└─HashAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column#10
|
||||
└─HashAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] in(test_range_col_in.t1.dt, 2020-11-27 00:00:00.000000, 2020-11-28 00:00:00.000000)
|
||||
└─IndexFullScan cop[tikv] table:t1, partition:p20201128, index:PRIMARY(id, dt) keep order:false, stats:pseudo
|
||||
insert into t1 values (1, "2020-11-25");
|
||||
|
||||
@ -29,7 +29,7 @@ count(*)
|
||||
0
|
||||
explain format = 'plan_tree' select count(*) from t30965 where d = 2 and b = 4 and a = 3 and c = 5;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(1)->Column#6
|
||||
StreamAgg root funcs:count(1)->Column
|
||||
└─Selection root eq(planner__core__physical_plan.t30965.d, 2)
|
||||
└─IndexLookUp root
|
||||
├─IndexRangeScan(Build) cop[tikv] table:t30965, index:ib(b) range:[4,4], keep order:false, stats:pseudo
|
||||
|
||||
@ -356,20 +356,20 @@ affected rows: 0
|
||||
info:
|
||||
explain format='plan_tree' (select /*+ agg_to_cop()*/ locate(t1.c3, t1.c3) as r0, t1.c3 as r1 from t1 where not( IsNull(t1.c1)) order by r0,r1) union all (select concat_ws(',', t2.c2, t2.c1) as r0, t2.c1 as r1 from t2 order by r0, r1) order by 1 limit 273;
|
||||
id task access object operator info
|
||||
TopN root Column#9, offset:0, count:273
|
||||
TopN root Column, offset:0, count:273
|
||||
└─Union root
|
||||
├─Projection root cast(Column#4, varbinary(274) BINARY)->Column#9, planner__core__plan.t1.c3->Column#10
|
||||
│ └─Projection root locate(planner__core__plan.t1.c3, planner__core__plan.t1.c3)->Column#4, planner__core__plan.t1.c3
|
||||
├─Projection root cast(Column, varbinary(274) BINARY)->Column, planner__core__plan.t1.c3->Column
|
||||
│ └─Projection root locate(planner__core__plan.t1.c3, planner__core__plan.t1.c3)->Column, planner__core__plan.t1.c3
|
||||
│ └─Projection root planner__core__plan.t1.c3
|
||||
│ └─TopN root Column#11, offset:0, count:273
|
||||
│ └─Projection root planner__core__plan.t1.c3, cast(locate(planner__core__plan.t1.c3, planner__core__plan.t1.c3), varbinary(274) BINARY)->Column#11
|
||||
│ └─TopN root Column, offset:0, count:273
|
||||
│ └─Projection root planner__core__plan.t1.c3, cast(locate(planner__core__plan.t1.c3, planner__core__plan.t1.c3), varbinary(274) BINARY)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
└─Projection root cast(to_binary(Column#8), varbinary(274) BINARY)->Column#9, cast(planner__core__plan.t2.c1, tinyblob BINARY)->Column#10
|
||||
└─Projection root concat_ws(,, cast(planner__core__plan.t2.c2, var_string(87)), planner__core__plan.t2.c1)->Column#8, planner__core__plan.t2.c1
|
||||
└─Projection root cast(to_binary(Column), varbinary(274) BINARY)->Column, cast(planner__core__plan.t2.c1, tinyblob BINARY)->Column
|
||||
└─Projection root concat_ws(,, cast(planner__core__plan.t2.c2, var_string(87)), planner__core__plan.t2.c1)->Column, planner__core__plan.t2.c1
|
||||
└─Projection root planner__core__plan.t2.c1, planner__core__plan.t2.c2
|
||||
└─TopN root Column#12, offset:0, count:273
|
||||
└─Projection root planner__core__plan.t2.c1, planner__core__plan.t2.c2, cast(to_binary(concat_ws(,, cast(planner__core__plan.t2.c2, var_string(87)), planner__core__plan.t2.c1)), varbinary(274) BINARY)->Column#12
|
||||
└─TopN root Column, offset:0, count:273
|
||||
└─Projection root planner__core__plan.t2.c1, planner__core__plan.t2.c2, cast(to_binary(concat_ws(,, cast(planner__core__plan.t2.c2, var_string(87)), planner__core__plan.t2.c1)), varbinary(274) BINARY)->Column
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t2, index:k1(c2, c1) keep order:false, stats:pseudo
|
||||
drop table if exists golang1, golang2;
|
||||
|
||||
@ -9,7 +9,7 @@ id task access object operator info
|
||||
Point_Get root table:t, index:idx(a)
|
||||
explain format='plan_tree' select t.*, _tidb_rowid, date_format(a, "") from t where a = 1;
|
||||
id task access object operator info
|
||||
Projection root planner__core__point_get_plan.t.a, planner__core__point_get_plan.t.b, planner__core__point_get_plan.t._tidb_rowid, date_format(cast(planner__core__point_get_plan.t.a, datetime BINARY), )->Column#4
|
||||
Projection root planner__core__point_get_plan.t.a, planner__core__point_get_plan.t.b, planner__core__point_get_plan.t._tidb_rowid, date_format(cast(planner__core__point_get_plan.t.a, datetime BINARY), )->Column
|
||||
└─Point_Get root table:t, index:idx(a)
|
||||
begin;
|
||||
insert into t values (1, 1);
|
||||
@ -19,11 +19,11 @@ Point_Get root table:t, index:idx(a)
|
||||
commit;
|
||||
explain format='plan_tree' select count(_tidb_rowid) from t where a=1;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(planner__core__point_get_plan.t._tidb_rowid)->Column#4
|
||||
StreamAgg root funcs:count(planner__core__point_get_plan.t._tidb_rowid)->Column
|
||||
└─Point_Get root table:t, index:idx(a)
|
||||
explain format='plan_tree' select *, date_format(b, "") from t where a =1 for update;
|
||||
id task access object operator info
|
||||
Projection root planner__core__point_get_plan.t.a, planner__core__point_get_plan.t.b, date_format(cast(planner__core__point_get_plan.t.b, datetime BINARY), )->Column#4
|
||||
Projection root planner__core__point_get_plan.t.a, planner__core__point_get_plan.t.b, date_format(cast(planner__core__point_get_plan.t.b, datetime BINARY), )->Column
|
||||
└─Point_Get root table:t, index:idx(a)
|
||||
create table t1 (pk int, a int, b int, primary key(pk), unique key(a));
|
||||
explain format='plan_tree' select t1.*, _tidb_rowid from t1 where a = 1;
|
||||
|
||||
@ -2,8 +2,8 @@ create table t(a varchar(20) collate utf8mb4_general_ci, index ia(a));
|
||||
insert into t value('测试'),('测试Abc'),('测试 '),('你好'),('aABBccdd'),('Aa'),(''),(' '),(' '),(' 语言'),(' 语 言 '),('测测试 '),('测测试 '),(NULL);
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["mK\x8b\xd5","mK\x8b\xd6"), keep order:true, stats:pseudo
|
||||
@ -14,8 +14,8 @@ a length(a)
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测%%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["mK","mL"), keep order:true, stats:pseudo
|
||||
@ -28,8 +28,8 @@ a length(a)
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测%%试' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测%%试", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["mK","mL"), keep order:true, stats:pseudo
|
||||
@ -38,8 +38,8 @@ a length(a)
|
||||
测试 6
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试%%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["mK\x8b\xd5","mK\x8b\xd6"), keep order:true, stats:pseudo
|
||||
@ -50,8 +50,8 @@ a length(a)
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试_' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试_", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["mK\x8b\xd5","mK\x8b\xd6"), keep order:true, stats:pseudo
|
||||
@ -59,8 +59,8 @@ select *, length(a) from t use index (ia) where a like '测试_' order by a,_tid
|
||||
a length(a)
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '你好%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "你好%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["O`Y}","O`Y~"), keep order:true, stats:pseudo
|
||||
@ -69,8 +69,8 @@ a length(a)
|
||||
你好 6
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00A\x00A","\x00A\x00A"], keep order:true, stats:pseudo
|
||||
@ -79,8 +79,8 @@ a length(a)
|
||||
Aa 2
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00A\x00A","\x00A\x00B"), keep order:true, stats:pseudo
|
||||
@ -90,8 +90,8 @@ Aa 2
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%cc' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%cc", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00A\x00A","\x00A\x00B"), keep order:true, stats:pseudo
|
||||
@ -99,8 +99,8 @@ select *, length(a) from t use index (ia) where a like 'aa%cc' order by a,_tidb_
|
||||
a length(a)
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["",""], keep order:true, stats:pseudo
|
||||
@ -109,8 +109,8 @@ a length(a)
|
||||
0
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' ' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " ", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["",""], keep order:true, stats:pseudo
|
||||
@ -119,8 +119,8 @@ a length(a)
|
||||
1
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%dd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%dd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00A\x00A","\x00A\x00B"), keep order:true, stats:pseudo
|
||||
@ -129,8 +129,8 @@ a length(a)
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%%dd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%%dd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00A\x00A","\x00A\x00B"), keep order:true, stats:pseudo
|
||||
@ -139,8 +139,8 @@ a length(a)
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa_bccdd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa_bccdd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00A\x00A","\x00A\x00B"), keep order:true, stats:pseudo
|
||||
@ -149,8 +149,8 @@ a length(a)
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "%%", 92)
|
||||
└─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:true, stats:pseudo
|
||||
@ -171,8 +171,8 @@ aABBccdd 8
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' %%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " %%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["","\x00!"), keep order:true, stats:pseudo
|
||||
@ -184,8 +184,8 @@ a length(a)
|
||||
语言 7
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' %%语言' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " %%语言", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["","\x00!"), keep order:true, stats:pseudo
|
||||
@ -194,8 +194,8 @@ a length(a)
|
||||
语言 7
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' 语 %' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " 语 %", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00 \x00 \x8b\xed","\x00 \x00 \x8b\xed\x00!"), keep order:true, stats:pseudo
|
||||
@ -204,8 +204,8 @@ a length(a)
|
||||
语 言 10
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' 语 _' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " 语 _", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x00 \x00 \x8b\xed","\x00 \x00 \x8b\xed\x00 \x00!"), keep order:true, stats:pseudo
|
||||
@ -216,9 +216,9 @@ create table t(a varchar(20) collate utf8mb4_unicode_ci, unique index ia(a));
|
||||
insert into t value(''),('测试'),('测试abc'),('你好'),('aabbccdd'),(' 语言'),(' 语 言 '),('测测试 ');
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK\xfbA\x8b\xd5","\xfb@\xedK\xfbA\x8b\xd6"), keep order:false, stats:pseudo
|
||||
@ -228,9 +228,9 @@ a length(a)
|
||||
测试abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测%%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK","\xfb@\xedL"), keep order:false, stats:pseudo
|
||||
@ -241,9 +241,9 @@ a length(a)
|
||||
测试abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测%%试' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测%%试", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK","\xfb@\xedL"), keep order:false, stats:pseudo
|
||||
@ -252,9 +252,9 @@ a length(a)
|
||||
测试 6
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试%%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK\xfbA\x8b\xd5","\xfb@\xedK\xfbA\x8b\xd6"), keep order:false, stats:pseudo
|
||||
@ -264,9 +264,9 @@ a length(a)
|
||||
测试abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试_' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试_", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK\xfbA\x8b\xd5","\xfb@\xedK\xfbA\x8b\xd6"), keep order:false, stats:pseudo
|
||||
@ -274,9 +274,9 @@ select *, length(a) from t use index (ia) where a like '测试_' order by a,_tid
|
||||
a length(a)
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '你好%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "你好%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xcf`\xfb@\xd9}","\xfb@\xcf`\xfb@\xd9~"), keep order:false, stats:pseudo
|
||||
@ -285,18 +285,18 @@ a length(a)
|
||||
你好 6
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Selection root like(planner__core__range_scan_for_like.t.a, "aa", 92)
|
||||
└─Point_Get root table:t, index:ia(a)
|
||||
select *, length(a) from t use index (ia) where a like 'aa' order by a,_tidb_rowid;
|
||||
a length(a)
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x0e3\x0e3","\x0e3\x0e4"), keep order:false, stats:pseudo
|
||||
@ -305,9 +305,9 @@ a length(a)
|
||||
aabbccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%cc' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%cc", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x0e3\x0e3","\x0e3\x0e4"), keep order:false, stats:pseudo
|
||||
@ -315,9 +315,9 @@ select *, length(a) from t use index (ia) where a like 'aa%cc' order by a,_tidb_
|
||||
a length(a)
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Selection root like(planner__core__range_scan_for_like.t.a, "", 92)
|
||||
└─Point_Get root table:t, index:ia(a)
|
||||
select *, length(a) from t use index (ia) where a like '' order by a,_tidb_rowid;
|
||||
@ -325,9 +325,9 @@ a length(a)
|
||||
0
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%dd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%dd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x0e3\x0e3","\x0e3\x0e4"), keep order:false, stats:pseudo
|
||||
@ -336,9 +336,9 @@ a length(a)
|
||||
aabbccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%%dd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%%dd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x0e3\x0e3","\x0e3\x0e4"), keep order:false, stats:pseudo
|
||||
@ -347,9 +347,9 @@ a length(a)
|
||||
aabbccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa_bccdd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa_bccdd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x0e3\x0e3","\x0e3\x0e4"), keep order:false, stats:pseudo
|
||||
@ -358,9 +358,9 @@ a length(a)
|
||||
aabbccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "%%", 92)
|
||||
└─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:false, stats:pseudo
|
||||
@ -376,9 +376,9 @@ aabbccdd 8
|
||||
测试abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' %%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " %%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["","\x02\n"), keep order:false, stats:pseudo
|
||||
@ -388,9 +388,9 @@ a length(a)
|
||||
语言 7
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' %%语言' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " %%语言", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["","\x02\n"), keep order:false, stats:pseudo
|
||||
@ -399,9 +399,9 @@ a length(a)
|
||||
语言 7
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' 语 %' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " 语 %", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x02\t\x02\t\xfbA\x8b\xed","\x02\t\x02\t\xfbA\x8b\xed\x02\n"), keep order:false, stats:pseudo
|
||||
@ -410,9 +410,9 @@ a length(a)
|
||||
语 言 10
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' 语 _' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Sort root planner__core__range_scan_for_like.t.a, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " 语 _", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x02\t\x02\t\xfbA\x8b\xed","\x02\t\x02\t\xfbA\x8b\xed\x02\t\x02\n"), keep order:false, stats:pseudo
|
||||
@ -1040,8 +1040,8 @@ insert into t value('测试'),('测试Abc'),('测试 '),('你好'),('aABBccd
|
||||
insert into t2 value('测试'),('测试Abc'),('测试 '),('你好'),('aABBccdd'),('Aa'),(''),(' '),(' '),(' 语言'),(' 语 言 '),('测测试 '),('测测试 '),(NULL);
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:IndexRangeScan
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK\xfbA\x8b\xd5","\xfb@\xedK\xfbA\x8b\xd6"), keep order:true, stats:pseudo
|
||||
select *, length(a) from t use index (ia) where a like '测试%' order by a,_tidb_rowid;
|
||||
@ -1051,8 +1051,8 @@ a length(a)
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测%%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK","\xfb@\xedL"), keep order:true, stats:pseudo
|
||||
@ -1065,8 +1065,8 @@ a length(a)
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测%%试' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测%%试", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK","\xfb@\xedL"), keep order:true, stats:pseudo
|
||||
@ -1075,8 +1075,8 @@ a length(a)
|
||||
测试 6
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试%%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xedK\xfbA\x8b\xd5","\xfb@\xedK\xfbA\x8b\xd6"), keep order:true, stats:pseudo
|
||||
@ -1087,8 +1087,8 @@ a length(a)
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '测试_' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "测试_", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:("\xfb@\xedK\xfbA\x8b\xd5","\xfb@\xedK\xfbA\x8b\xd6"), keep order:true, stats:pseudo
|
||||
@ -1096,8 +1096,8 @@ select *, length(a) from t use index (ia) where a like '测试_' order by a,_tid
|
||||
a length(a)
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '你好%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:IndexRangeScan
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\xfb@\xcf`\xfb@\xd9}","\xfb@\xcf`\xfb@\xd9~"), keep order:true, stats:pseudo
|
||||
select *, length(a) from t use index (ia) where a like '你好%' order by a,_tidb_rowid;
|
||||
@ -1105,8 +1105,8 @@ a length(a)
|
||||
你好 6
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:IndexRangeScan
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x1cG\x1cG","\x1cG\x1cG"], keep order:true, stats:pseudo
|
||||
select *, length(a) from t use index (ia) where a like 'aa' order by a,_tidb_rowid;
|
||||
@ -1114,8 +1114,8 @@ a length(a)
|
||||
Aa 2
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:IndexRangeScan
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x1cG\x1cG","\x1cG\x1cH"), keep order:true, stats:pseudo
|
||||
select *, length(a) from t use index (ia) where a like 'aa%' order by a,_tidb_rowid;
|
||||
@ -1124,8 +1124,8 @@ Aa 2
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%cc' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%cc", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x1cG\x1cG","\x1cG\x1cH"), keep order:true, stats:pseudo
|
||||
@ -1133,8 +1133,8 @@ select *, length(a) from t use index (ia) where a like 'aa%cc' order by a,_tidb_
|
||||
a length(a)
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:IndexRangeScan
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["",""], keep order:true, stats:pseudo
|
||||
select *, length(a) from t use index (ia) where a like '' order by a,_tidb_rowid;
|
||||
@ -1142,8 +1142,8 @@ a length(a)
|
||||
0
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' ' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:IndexRangeScan
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x02\t","\x02\t"], keep order:true, stats:pseudo
|
||||
select *, length(a) from t use index (ia) where a like ' ' order by a,_tidb_rowid;
|
||||
@ -1151,8 +1151,8 @@ a length(a)
|
||||
1
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%dd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%dd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x1cG\x1cG","\x1cG\x1cH"), keep order:true, stats:pseudo
|
||||
@ -1161,8 +1161,8 @@ a length(a)
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa%%dd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa%%dd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x1cG\x1cG","\x1cG\x1cH"), keep order:true, stats:pseudo
|
||||
@ -1171,8 +1171,8 @@ a length(a)
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like 'aa_bccdd' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "aa_bccdd", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:("\x1cG\x1cG","\x1cG\x1cH"), keep order:true, stats:pseudo
|
||||
@ -1181,8 +1181,8 @@ a length(a)
|
||||
aABBccdd 8
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like '%%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, "%%", 92)
|
||||
└─IndexFullScan cop[tikv] table:t, index:ia(a) keep order:true, stats:pseudo
|
||||
@ -1203,8 +1203,8 @@ aABBccdd 8
|
||||
测试Abc 9
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' %%' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " %%", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x02\t","\x02\n"), keep order:true, stats:pseudo
|
||||
@ -1216,8 +1216,8 @@ a length(a)
|
||||
语言 7
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' %%语言' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " %%语言", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x02\t","\x02\n"), keep order:true, stats:pseudo
|
||||
@ -1226,8 +1226,8 @@ a length(a)
|
||||
语言 7
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' 语 %' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:IndexRangeScan
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:["\x02\t\x02\t\xfbA\x8b\xed\x02\t","\x02\t\x02\t\xfbA\x8b\xed\x02\n"), keep order:true, stats:pseudo
|
||||
select *, length(a) from t use index (ia) where a like ' 语 %' order by a,_tidb_rowid;
|
||||
@ -1235,8 +1235,8 @@ a length(a)
|
||||
语 言 10
|
||||
explain format='plan_tree' select *, length(a) from t use index (ia) where a like ' 语 _' order by a,_tidb_rowid;
|
||||
id task access object operator info
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column#3->Column#5
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column#3, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
Projection root planner__core__range_scan_for_like.t.a, Column
|
||||
└─Projection root planner__core__range_scan_for_like.t.a, length(planner__core__range_scan_for_like.t.a)->Column, planner__core__range_scan_for_like.t._tidb_rowid
|
||||
└─IndexReader root index:Selection
|
||||
└─Selection cop[tikv] like(planner__core__range_scan_for_like.t.a, " 语 _", 92)
|
||||
└─IndexRangeScan cop[tikv] table:t, index:ia(a) range:("\x02\t\x02\t\xfbA\x8b\xed\x02\t\x02\t","\x02\t\x02\t\xfbA\x8b\xed\x02\t\x02\n"), keep order:true, stats:pseudo
|
||||
|
||||
@ -41,9 +41,9 @@ HashJoin root inner join, equal:[eq(planner__core__rule_constant_propagation.t.
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from t, (select id +1 as id1 from s where s.id>1) tmp where t.id=tmp.id1; -- can't optimize, projection has column function;
|
||||
id task access object operator info
|
||||
Projection root planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.t.name, Column#7
|
||||
└─HashJoin root inner join, equal:[eq(Column#7, planner__core__rule_constant_propagation.t.id)]
|
||||
├─Projection(Build) root plus(planner__core__rule_constant_propagation.s.id, 1)->Column#7
|
||||
Projection root planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.t.name, Column
|
||||
└─HashJoin root inner join, equal:[eq(Column, planner__core__rule_constant_propagation.t.id)]
|
||||
├─Projection(Build) root plus(planner__core__rule_constant_propagation.s.id, 1)->Column
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] gt(planner__core__rule_constant_propagation.s.id, 1), not(isnull(plus(planner__core__rule_constant_propagation.s.id, 1)))
|
||||
│ └─TableFullScan cop[tikv] table:s keep order:false, stats:pseudo
|
||||
@ -119,11 +119,11 @@ HashJoin root inner join, equal:[eq(planner__core__rule_constant_propagation.t.
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format='plan_tree' select * from t, (select id, count(name) from s where s.id>1 group by id) tmp where t.id=tmp.id; -- can't, constant propagation can't through the aggregation node;
|
||||
id task access object operator info
|
||||
Projection root planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.t.name, planner__core__rule_constant_propagation.s.id, Column#7
|
||||
Projection root planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.t.name, planner__core__rule_constant_propagation.s.id, Column
|
||||
└─HashJoin root inner join, equal:[eq(planner__core__rule_constant_propagation.s.id, planner__core__rule_constant_propagation.t.id)]
|
||||
├─HashAgg(Build) root group by:planner__core__rule_constant_propagation.s.id, funcs:count(Column#8)->Column#7, funcs:firstrow(planner__core__rule_constant_propagation.s.id)->planner__core__rule_constant_propagation.s.id
|
||||
├─HashAgg(Build) root group by:planner__core__rule_constant_propagation.s.id, funcs:count(Column)->Column, funcs:firstrow(planner__core__rule_constant_propagation.s.id)->planner__core__rule_constant_propagation.s.id
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__rule_constant_propagation.s.id, funcs:count(planner__core__rule_constant_propagation.s.name)->Column#8
|
||||
│ └─HashAgg cop[tikv] group by:planner__core__rule_constant_propagation.s.id, funcs:count(planner__core__rule_constant_propagation.s.name)->Column
|
||||
│ └─Selection cop[tikv] gt(planner__core__rule_constant_propagation.s.id, 1), not(isnull(planner__core__rule_constant_propagation.s.id))
|
||||
│ └─TableFullScan cop[tikv] table:s keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:Selection
|
||||
@ -160,9 +160,9 @@ create table t (id int, name varchar(10));
|
||||
create table s (id int, name varchar(10));
|
||||
explain format='plan_tree' select * from (select * from (select t.id+1 as id1, t.name from t, (select * from s where s.id>1) s1 where t.id=s1.id ) tmp order by id1) a union (select tmp.* from (select * from t where t.id <3) tmp left join s on tmp.id=s.id); -- match twice;
|
||||
id task access object operator info
|
||||
HashAgg root group by:Column#14, Column#15, funcs:firstrow(Column#14)->Column#14, funcs:firstrow(Column#15)->Column#15
|
||||
HashAgg root group by:Column, Column, funcs:firstrow(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Union root
|
||||
├─Projection root plus(planner__core__rule_constant_propagation.t.id, 1)->Column#14, planner__core__rule_constant_propagation.t.name->Column#15
|
||||
├─Projection root plus(planner__core__rule_constant_propagation.t.id, 1)->Column, planner__core__rule_constant_propagation.t.name->Column
|
||||
│ └─HashJoin root inner join, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)]
|
||||
│ ├─TableReader(Build) root data:Selection
|
||||
│ │ └─Selection cop[tikv] gt(planner__core__rule_constant_propagation.s.id, 1), not(isnull(planner__core__rule_constant_propagation.s.id))
|
||||
@ -170,7 +170,7 @@ HashAgg root group by:Column#14, Column#15, funcs:firstrow(Column#14)->Column#1
|
||||
│ └─TableReader(Probe) root data:Selection
|
||||
│ └─Selection cop[tikv] gt(planner__core__rule_constant_propagation.t.id, 1), not(isnull(planner__core__rule_constant_propagation.t.id))
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
└─Projection root cast(planner__core__rule_constant_propagation.t.id, bigint BINARY)->Column#14, planner__core__rule_constant_propagation.t.name->Column#15
|
||||
└─Projection root cast(planner__core__rule_constant_propagation.t.id, bigint BINARY)->Column, planner__core__rule_constant_propagation.t.name->Column
|
||||
└─TableReader root data:Selection
|
||||
└─Selection cop[tikv] lt(planner__core__rule_constant_propagation.t.id, 3)
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
@ -181,9 +181,9 @@ INSERT INTO t2 (id, value) VALUES (10, 100), (10, 200), (10, 300), (20, 400), (3
|
||||
explain format='plan_tree' update t1 set value = (select count(*) from t2 where t1.id = t2.id) where t1.id = 10;
|
||||
id task access object operator info
|
||||
Update root N/A
|
||||
└─Projection root planner__core__rule_constant_propagation.t1.id, planner__core__rule_constant_propagation.t1.value, planner__core__rule_constant_propagation.t1._tidb_rowid, ifnull(Column#7, 0)->Column#7
|
||||
└─Projection root planner__core__rule_constant_propagation.t1.id, planner__core__rule_constant_propagation.t1.value, planner__core__rule_constant_propagation.t1._tidb_rowid, ifnull(Column, 0)->Column
|
||||
└─HashJoin root left outer join, left side:TableReader, equal:[eq(planner__core__rule_constant_propagation.t1.id, planner__core__rule_constant_propagation.t2.id)]
|
||||
├─HashAgg(Build) root group by:planner__core__rule_constant_propagation.t2.id, funcs:count(1)->Column#7, funcs:firstrow(planner__core__rule_constant_propagation.t2.id)->planner__core__rule_constant_propagation.t2.id
|
||||
├─HashAgg(Build) root group by:planner__core__rule_constant_propagation.t2.id, funcs:count(1)->Column, funcs:firstrow(planner__core__rule_constant_propagation.t2.id)->planner__core__rule_constant_propagation.t2.id
|
||||
│ └─TableReader root data:Selection
|
||||
│ └─Selection cop[tikv] eq(planner__core__rule_constant_propagation.t2.id, 10)
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
|
||||
@ -70,7 +70,7 @@ order by c_0 desc
|
||||
limit 1)) is null));
|
||||
id task access object operator info
|
||||
Projection root planner__core__rule_outer2inner.t0.c0, planner__core__rule_outer2inner.t1.c2, planner__core__rule_outer2inner.t1.c2
|
||||
└─Selection root isnull(eq("", Column#12))
|
||||
└─Selection root isnull(eq("", Column))
|
||||
└─Apply root CARTESIAN left outer join, left side:HashJoin
|
||||
├─HashJoin(Build) root right outer join, left side:TableReader, equal:[eq(planner__core__rule_outer2inner.t1.c1, planner__core__rule_outer2inner.t0.c0)]
|
||||
│ ├─TableReader(Build) root data:TableFullScan
|
||||
@ -78,7 +78,7 @@ Projection root planner__core__rule_outer2inner.t0.c0, planner__core__rule_oute
|
||||
│ └─TableReader(Probe) root data:Selection
|
||||
│ └─Selection cop[tikv] not(isnull(planner__core__rule_outer2inner.t1.c1))
|
||||
│ └─TableFullScan cop[tikv] table:ref_0 keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root n1`->Column#12
|
||||
└─Projection(Probe) root n1`->Column
|
||||
└─Limit root offset:0, count:1
|
||||
└─HashJoin root left outer join, left side:Limit, equal:[eq(planner__core__rule_outer2inner.t2.c4, planner__core__rule_outer2inner.t2.c3)]
|
||||
├─Limit(Build) root offset:0, count:1
|
||||
|
||||
@ -259,9 +259,9 @@ drop table if exists t;
|
||||
create table t (a int, b int, c int, key idx(a, b, c));
|
||||
explain format = 'plan_tree' select count(a) from t;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#13)->Column#5
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(select.t.a)->Column#13
|
||||
└─StreamAgg cop[tikv] funcs:count(select.t.a)->Column
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
select count(a) from t;
|
||||
count(a)
|
||||
@ -270,18 +270,18 @@ insert t values(0,0,0);
|
||||
explain format = 'plan_tree' select distinct b from t group by a;
|
||||
id task access object operator info
|
||||
HashAgg root group by:select.t.b, funcs:firstrow(select.t.b)->select.t.b
|
||||
└─StreamAgg root group by:select.t.a, funcs:firstrow(Column#9)->select.t.b
|
||||
└─StreamAgg root group by:select.t.a, funcs:firstrow(Column)->select.t.b
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, funcs:firstrow(select.t.b)->Column#9
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, funcs:firstrow(select.t.b)->Column
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a, b, c) keep order:true, stats:pseudo
|
||||
select distinct b from t group by a;
|
||||
b
|
||||
0
|
||||
explain format = 'plan_tree' select count(b) from t group by a;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:select.t.a, funcs:count(Column#10)->Column#5
|
||||
StreamAgg root group by:select.t.a, funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, funcs:count(select.t.b)->Column#10
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, funcs:count(select.t.b)->Column
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a, b, c) keep order:true, stats:pseudo
|
||||
select count(b) from t group by a;
|
||||
count(b)
|
||||
@ -289,9 +289,9 @@ count(b)
|
||||
insert t values(1,1,1),(3,3,6),(3,2,5),(2,1,4),(1,1,3),(1,1,2);
|
||||
explain format = 'plan_tree' select count(a) from t where b>0 group by a, b;
|
||||
id task access object operator info
|
||||
StreamAgg root group by:select.t.a, select.t.b, funcs:count(Column#10)->Column#5
|
||||
StreamAgg root group by:select.t.a, select.t.b, funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, select.t.b, funcs:count(select.t.a)->Column#10
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, select.t.b, funcs:count(select.t.a)->Column
|
||||
└─Selection cop[tikv] gt(select.t.b, 0)
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a, b, c) keep order:true, stats:pseudo
|
||||
select count(a) from t where b>0 group by a, b;
|
||||
@ -302,10 +302,10 @@ count(a)
|
||||
1
|
||||
explain format = 'plan_tree' select count(a) from t where b>0 group by a, b order by a;
|
||||
id task access object operator info
|
||||
Projection root Column#5->Column#6
|
||||
└─StreamAgg root group by:select.t.a, select.t.b, funcs:count(Column#15)->Column#5, funcs:firstrow(select.t.a)->select.t.a
|
||||
Projection root Column
|
||||
└─StreamAgg root group by:select.t.a, select.t.b, funcs:count(Column)->Column, funcs:firstrow(select.t.a)->select.t.a
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, select.t.b, funcs:count(select.t.a)->Column#15
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, select.t.b, funcs:count(select.t.a)->Column
|
||||
└─Selection cop[tikv] gt(select.t.b, 0)
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a, b, c) keep order:true, stats:pseudo
|
||||
select count(a) from t where b>0 group by a, b order by a;
|
||||
@ -317,9 +317,9 @@ count(a)
|
||||
explain format = 'plan_tree' select count(a) from t where b>0 group by a, b order by a limit 1;
|
||||
id task access object operator info
|
||||
Limit root offset:0, count:1
|
||||
└─StreamAgg root group by:select.t.a, select.t.b, funcs:count(Column#16)->Column#5, funcs:firstrow(select.t.a)->select.t.a
|
||||
└─StreamAgg root group by:select.t.a, select.t.b, funcs:count(Column)->Column, funcs:firstrow(select.t.a)->select.t.a
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, select.t.b, funcs:count(select.t.a)->Column#16
|
||||
└─StreamAgg cop[tikv] group by:select.t.a, select.t.b, funcs:count(select.t.a)->Column
|
||||
└─Selection cop[tikv] gt(select.t.b, 0)
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a, b, c) keep order:true, stats:pseudo
|
||||
select count(a) from t where b>0 group by a, b order by a limit 1;
|
||||
@ -400,20 +400,20 @@ drop table if exists t;
|
||||
create table t(a int, b int);
|
||||
explain format = 'plan_tree' select a != any (select a from t t2) from t t1;
|
||||
id task access object operator info
|
||||
Projection root and(or(or(gt(Column#11, 1), ne(select.t.a, Column#10)), if(ne(Column#12, 0), <nil>, 0)), and(ne(Column#13, 0), if(isnull(select.t.a), <nil>, 1)))->Column#14
|
||||
Projection root and(or(or(gt(Column, 1), ne(select.t.a, Column)), if(ne(Column, 0), <nil>, 0)), and(ne(Column, 0), if(isnull(select.t.a), <nil>, 1)))->Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─StreamAgg(Build) root funcs:max(Column#22)->Column#10, funcs:count(distinct Column#23)->Column#11, funcs:sum(Column#24)->Column#12, funcs:count(1)->Column#13
|
||||
│ └─Projection root select.t.a->Column#22, select.t.a->Column#23, cast(isnull(select.t.a), decimal(20,0) BINARY)->Column#24
|
||||
├─StreamAgg(Build) root funcs:max(Column)->Column, funcs:count(distinct Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column
|
||||
│ └─Projection root select.t.a->Column, select.t.a->Column, cast(isnull(select.t.a), decimal(20,0) BINARY)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select a = all (select a from t t2) from t t1;
|
||||
id task access object operator info
|
||||
Projection root or(and(and(le(Column#11, 1), eq(select.t.a, Column#10)), if(ne(Column#12, 0), <nil>, 1)), or(eq(Column#13, 0), if(isnull(select.t.a), <nil>, 0)))->Column#14
|
||||
Projection root or(and(and(le(Column, 1), eq(select.t.a, Column)), if(ne(Column, 0), <nil>, 1)), or(eq(Column, 0), if(isnull(select.t.a), <nil>, 0)))->Column
|
||||
└─HashJoin root CARTESIAN inner join
|
||||
├─StreamAgg(Build) root funcs:max(Column#22)->Column#10, funcs:count(distinct Column#23)->Column#11, funcs:sum(Column#24)->Column#12, funcs:count(1)->Column#13
|
||||
│ └─Projection root select.t.a->Column#22, select.t.a->Column#23, cast(isnull(select.t.a), decimal(20,0) BINARY)->Column#24
|
||||
├─StreamAgg(Build) root funcs:max(Column)->Column, funcs:count(distinct Column)->Column, funcs:sum(Column)->Column, funcs:count(1)->Column
|
||||
│ └─Projection root select.t.a->Column, select.t.a->Column, cast(isnull(select.t.a), decimal(20,0) BINARY)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:TableFullScan
|
||||
@ -424,11 +424,11 @@ drop table if exists s;
|
||||
create table s(a varchar(20), b varchar(20));
|
||||
explain format = 'plan_tree' select a in (select a from s where s.b = t.b) from t;
|
||||
id task access object operator info
|
||||
HashJoin root left outer semi join, left side:Projection, equal:[eq(Column#11, Column#12)], other cond:eq(cast(select.t.a, double BINARY), cast(select.s.a, double BINARY))
|
||||
├─Projection(Build) root select.s.a, cast(select.s.b, double BINARY)->Column#12
|
||||
HashJoin root left outer semi join, left side:Projection, equal:[eq(Column, Column)], other cond:eq(cast(select.t.a, double BINARY), cast(select.s.a, double BINARY))
|
||||
├─Projection(Build) root select.s.a, cast(select.s.b, double BINARY)->Column
|
||||
│ └─TableReader root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:s keep order:false, stats:pseudo
|
||||
└─Projection(Probe) root select.t.a, cast(select.t.b, double BINARY)->Column#11
|
||||
└─Projection(Probe) root select.t.a, cast(select.t.b, double BINARY)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select a in (select a+b from t t2 where t2.b = t1.b) from t t1;
|
||||
@ -449,16 +449,16 @@ HashJoin root left outer semi join, left side:TableReader, equal:[eq(select.t.b
|
||||
└─TableFullScan cop[tikv] table:t1 keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select 1 from (select sleep(1)) t;
|
||||
id task access object operator info
|
||||
Projection root 1->Column#2
|
||||
└─Projection root sleep(1)->Column#1
|
||||
Projection root 1->Column
|
||||
└─Projection root sleep(1)->Column
|
||||
└─TableDual root rows:1
|
||||
drop table if exists t;
|
||||
create table t(a int, b int);
|
||||
explain format = 'plan_tree' select a from t order by rand();
|
||||
id task access object operator info
|
||||
Projection root select.t.a
|
||||
└─Sort root Column#4
|
||||
└─Projection root select.t.a, rand()->Column#4
|
||||
└─Sort root Column
|
||||
└─Projection root select.t.a, rand()->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select a, b from t order by abs(2);
|
||||
@ -468,8 +468,8 @@ TableReader root data:TableFullScan
|
||||
explain format = 'plan_tree' select a from t order by abs(rand())+1;
|
||||
id task access object operator info
|
||||
Projection root select.t.a
|
||||
└─Sort root Column#4
|
||||
└─Projection root select.t.a, plus(abs(rand()), 1)->Column#4
|
||||
└─Sort root Column
|
||||
└─Projection root select.t.a, plus(abs(rand()), 1)->Column
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
drop table if exists t1;
|
||||
@ -493,7 +493,7 @@ PRIMARY KEY (`id`)
|
||||
);
|
||||
explain format = 'plan_tree' select row_number() over( partition by i ) - x as rnk from t;
|
||||
id task access object operator info
|
||||
Projection root minus(Column#5, select.t.x)->Column#7
|
||||
Projection root minus(Column, select.t.x)->Column
|
||||
└─Shuffle root execution info: concurrency:5, data sources:[TableReader]
|
||||
└─Window root row_number()->Column#5 over(partition by select.t.i rows between current row and current row)
|
||||
└─Sort root select.t.i
|
||||
|
||||
@ -23,9 +23,9 @@ c2
|
||||
cd
|
||||
explain format = 'plan_tree' select count(1) from t1 use index(idx1) where c2 = 'cd';
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#6)->Column#4
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#6
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] eq(session__clustered_index.t1.c2, "cd")
|
||||
└─IndexRangeScan cop[tikv] table:t1, index:idx1(c2) range:["c","c"], keep order:false, stats:pseudo
|
||||
select count(1) from t1 use index(idx1) where c2 = 'cd';
|
||||
@ -40,9 +40,9 @@ c2
|
||||
cd
|
||||
explain format = 'plan_tree' select count(1) from t2 use index(idx1) where c2 = 'cd';
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#9)->Column#4
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─IndexReader root index:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#9
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] eq(session__clustered_index.t2.c2, "cd")
|
||||
└─IndexFullScan cop[tikv] table:t2, index:idx1(c1, c2) keep order:false, stats:pseudo
|
||||
select count(1) from t2 use index(idx1) where c2 = 'cd';
|
||||
|
||||
@ -18,11 +18,11 @@ insert into t values(1,1,1,1),(2,2,2,2),(3,2,2,2),(4,2,2,2),(5,2,2,2);
|
||||
analyze table t;
|
||||
explain format = 'plan_tree' select t.c in (select count(*) from t s use index(idx), t t1 where s.b = 1 and s.c = 1 and s.d = t.a and s.a = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#22
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(subquery.t.c, Column#21)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(subquery.t.c, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column#21
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column
|
||||
└─IndexJoin root inner join, inner:TableReader, outer key:subquery.t.a, inner key:subquery.t.a, equal cond:eq(subquery.t.a, subquery.t.a)
|
||||
├─IndexReader(Build) root index:IndexRangeScan
|
||||
│ └─IndexRangeScan cop[tikv] table:s, index:idx(b, c, d) range: decided by [eq(subquery.t.b, 1) eq(subquery.t.c, 1) eq(subquery.t.d, subquery.t.a)], keep order:false
|
||||
@ -32,11 +32,11 @@ drop table if exists t;
|
||||
create table t(a int, b int, c int);
|
||||
explain format = 'plan_tree' select a from t t1 where t1.a = (select max(t2.a) from t t2 where t1.b=t2.b and t1.c=t2.b);
|
||||
id task access object operator info
|
||||
HashJoin root inner join, equal:[eq(subquery.t.b, subquery.t.b) eq(subquery.t.c, subquery.t.b) eq(subquery.t.a, Column#9)]
|
||||
├─Selection(Build) root not(isnull(Column#9))
|
||||
│ └─HashAgg root group by:subquery.t.b, funcs:max(Column#10)->Column#9, funcs:firstrow(subquery.t.b)->subquery.t.b
|
||||
HashJoin root inner join, equal:[eq(subquery.t.b, subquery.t.b) eq(subquery.t.c, subquery.t.b) eq(subquery.t.a, Column)]
|
||||
├─Selection(Build) root not(isnull(Column))
|
||||
│ └─HashAgg root group by:subquery.t.b, funcs:max(Column)->Column, funcs:firstrow(subquery.t.b)->subquery.t.b
|
||||
│ └─TableReader root data:HashAgg
|
||||
│ └─HashAgg cop[tikv] group by:subquery.t.b, funcs:max(subquery.t.a)->Column#10
|
||||
│ └─HashAgg cop[tikv] group by:subquery.t.b, funcs:max(subquery.t.a)->Column
|
||||
│ └─Selection cop[tikv] not(isnull(subquery.t.b))
|
||||
│ └─TableFullScan cop[tikv] table:t2 keep order:false, stats:pseudo
|
||||
└─TableReader(Probe) root data:Selection
|
||||
|
||||
@ -418,9 +418,9 @@ count(*)
|
||||
4
|
||||
EXPLAIN format="plan_tree" SELECT count(*) FROM tkey14 WHERE col3 IS NULL;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#8)->Column#6
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root partition:p1 data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] isnull(table__partition.tkey14.col3)
|
||||
└─TableFullScan cop[tikv] table:tkey14 keep order:false, stats:pseudo
|
||||
CREATE TABLE tkey15 (`col1` int, col2 DATE NOT NULL,col3 VARCHAR(12), col4 int)
|
||||
@ -428,9 +428,9 @@ PARTITION BY KEY (col3) PARTITIONS 4;
|
||||
INSERT INTO tkey15 VALUES(1, '2023-02-22', 'linpin', 1), (2, '2023-02-22', NULL, 2), (3, '2023-02-22', 'anqila', 3), (4, '2023-02-22', NULL, 4);
|
||||
EXPLAIN format="plan_tree" SELECT count(*) FROM tkey15 WHERE col3 IS NULL;
|
||||
id task access object operator info
|
||||
StreamAgg root funcs:count(Column#8)->Column#6
|
||||
StreamAgg root funcs:count(Column)->Column
|
||||
└─TableReader root partition:p1 data:StreamAgg
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column#8
|
||||
└─StreamAgg cop[tikv] funcs:count(1)->Column
|
||||
└─Selection cop[tikv] isnull(table__partition.tkey15.col3)
|
||||
└─TableFullScan cop[tikv] table:tkey15 keep order:false, stats:pseudo
|
||||
CREATE TABLE tkey12_2 (col1 INT, col2 INT ,col3 INT ,col4 INT , UNIQUE KEY(col2, col3)) PARTITION BY KEY(col2, col3) PARTITIONS 4;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
set tidb_cost_model_version=1;
|
||||
explain format = 'plan_tree' select * from ((select 4 as a) union all (select 33 as a)) tmp order by a desc limit 1;
|
||||
id task access object operator info
|
||||
TopN root Column#3:desc, offset:0, count:1
|
||||
TopN root Column:desc, offset:0, count:1
|
||||
└─Union root
|
||||
├─Projection root 4->Column#3
|
||||
├─Projection root 4->Column
|
||||
│ └─TableDual root rows:1
|
||||
└─Projection root 33->Column#3
|
||||
└─Projection root 33->Column
|
||||
└─TableDual root rows:1
|
||||
|
||||
@ -113,10 +113,10 @@ l_returnflag,
|
||||
l_linestatus;
|
||||
id task access object operator info
|
||||
Sort root tpch50.lineitem.l_returnflag, tpch50.lineitem.l_linestatus
|
||||
└─Projection root tpch50.lineitem.l_returnflag, tpch50.lineitem.l_linestatus, Column#18, Column#19, Column#20, Column#21, Column#22, Column#23, Column#24, Column#25
|
||||
└─HashAgg root group by:tpch50.lineitem.l_linestatus, tpch50.lineitem.l_returnflag, funcs:sum(Column#26)->Column#18, funcs:sum(Column#27)->Column#19, funcs:sum(Column#28)->Column#20, funcs:sum(Column#29)->Column#21, funcs:avg(Column#30, Column#31)->Column#22, funcs:avg(Column#32, Column#33)->Column#23, funcs:avg(Column#34, Column#35)->Column#24, funcs:count(Column#36)->Column#25, funcs:firstrow(tpch50.lineitem.l_returnflag)->tpch50.lineitem.l_returnflag, funcs:firstrow(tpch50.lineitem.l_linestatus)->tpch50.lineitem.l_linestatus
|
||||
└─Projection root tpch50.lineitem.l_returnflag, tpch50.lineitem.l_linestatus, Column, Column, Column, Column, Column, Column, Column, Column
|
||||
└─HashAgg root group by:tpch50.lineitem.l_linestatus, tpch50.lineitem.l_returnflag, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:avg(Column, Column)->Column, funcs:avg(Column, Column)->Column, funcs:avg(Column, Column)->Column, funcs:count(Column)->Column, funcs:firstrow(tpch50.lineitem.l_returnflag)->tpch50.lineitem.l_returnflag, funcs:firstrow(tpch50.lineitem.l_linestatus)->tpch50.lineitem.l_linestatus
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:tpch50.lineitem.l_linestatus, tpch50.lineitem.l_returnflag, funcs:sum(tpch50.lineitem.l_quantity)->Column#26, funcs:sum(tpch50.lineitem.l_extendedprice)->Column#27, funcs:sum(mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)))->Column#28, funcs:sum(mul(mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), plus(1, tpch50.lineitem.l_tax)))->Column#29, funcs:count(tpch50.lineitem.l_quantity)->Column#30, funcs:sum(tpch50.lineitem.l_quantity)->Column#31, funcs:count(tpch50.lineitem.l_extendedprice)->Column#32, funcs:sum(tpch50.lineitem.l_extendedprice)->Column#33, funcs:count(tpch50.lineitem.l_discount)->Column#34, funcs:sum(tpch50.lineitem.l_discount)->Column#35, funcs:count(1)->Column#36
|
||||
└─HashAgg cop[tikv] group by:tpch50.lineitem.l_linestatus, tpch50.lineitem.l_returnflag, funcs:sum(tpch50.lineitem.l_quantity)->Column, funcs:sum(tpch50.lineitem.l_extendedprice)->Column, funcs:sum(mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)))->Column, funcs:sum(mul(mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), plus(1, tpch50.lineitem.l_tax)))->Column, funcs:count(tpch50.lineitem.l_quantity)->Column, funcs:sum(tpch50.lineitem.l_quantity)->Column, funcs:count(tpch50.lineitem.l_extendedprice)->Column, funcs:sum(tpch50.lineitem.l_extendedprice)->Column, funcs:count(tpch50.lineitem.l_discount)->Column, funcs:sum(tpch50.lineitem.l_discount)->Column, funcs:count(1)->Column
|
||||
└─Selection cop[tikv] le(tpch50.lineitem.l_shipdate, 1998-08-15 00:00:00.000000)
|
||||
└─TableFullScan cop[tikv] table:lineitem keep order:false
|
||||
/*
|
||||
@ -178,7 +178,7 @@ id task access object operator info
|
||||
Projection root tpch50.supplier.s_acctbal, tpch50.supplier.s_name, tpch50.nation.n_name, tpch50.part.p_partkey, tpch50.part.p_mfgr, tpch50.supplier.s_address, tpch50.supplier.s_phone, tpch50.supplier.s_comment
|
||||
└─TopN root tpch50.supplier.s_acctbal:desc, tpch50.nation.n_name, tpch50.supplier.s_name, tpch50.part.p_partkey, offset:0, count:100
|
||||
└─Projection root tpch50.part.p_partkey, tpch50.part.p_mfgr, tpch50.supplier.s_name, tpch50.supplier.s_address, tpch50.supplier.s_phone, tpch50.supplier.s_acctbal, tpch50.supplier.s_comment, tpch50.nation.n_name
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.part.p_partkey, tpch50.partsupp.ps_partkey) eq(tpch50.partsupp.ps_supplycost, Column#50)]
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.part.p_partkey, tpch50.partsupp.ps_partkey) eq(tpch50.partsupp.ps_supplycost, Column)]
|
||||
├─HashJoin(Build) root inner join, equal:[eq(tpch50.partsupp.ps_partkey, tpch50.part.p_partkey)]
|
||||
│ ├─TableReader(Build) root data:Selection
|
||||
│ │ └─Selection cop[tikv] eq(tpch50.part.p_size, 30), like(tpch50.part.p_type, "%STEEL", 92)
|
||||
@ -195,8 +195,8 @@ Projection root tpch50.supplier.s_acctbal, tpch50.supplier.s_name, tpch50.natio
|
||||
│ │ └─TableFullScan cop[tikv] table:supplier keep order:false
|
||||
│ └─TableReader(Probe) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:partsupp keep order:false
|
||||
└─Selection(Probe) root not(isnull(Column#50))
|
||||
└─HashAgg root group by:tpch50.partsupp.ps_partkey, funcs:min(tpch50.partsupp.ps_supplycost)->Column#50, funcs:firstrow(tpch50.partsupp.ps_partkey)->tpch50.partsupp.ps_partkey
|
||||
└─Selection(Probe) root not(isnull(Column))
|
||||
└─HashAgg root group by:tpch50.partsupp.ps_partkey, funcs:min(tpch50.partsupp.ps_supplycost)->Column, funcs:firstrow(tpch50.partsupp.ps_partkey)->tpch50.partsupp.ps_partkey
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.supplier.s_suppkey, tpch50.partsupp.ps_suppkey)]
|
||||
├─HashJoin(Build) root inner join, equal:[eq(tpch50.nation.n_nationkey, tpch50.supplier.s_nationkey)]
|
||||
│ ├─HashJoin(Build) root inner join, equal:[eq(tpch50.region.r_regionkey, tpch50.nation.n_regionkey)]
|
||||
@ -243,10 +243,10 @@ revenue desc,
|
||||
o_orderdate
|
||||
limit 10;
|
||||
id task access object operator info
|
||||
Projection root tpch50.lineitem.l_orderkey, Column#35, tpch50.orders.o_orderdate, tpch50.orders.o_shippriority
|
||||
└─TopN root Column#35:desc, tpch50.orders.o_orderdate, offset:0, count:10
|
||||
└─HashAgg root group by:Column#42, Column#43, Column#44, funcs:sum(Column#41)->Column#35, funcs:firstrow(Column#42)->tpch50.orders.o_orderdate, funcs:firstrow(Column#43)->tpch50.orders.o_shippriority, funcs:firstrow(Column#44)->tpch50.lineitem.l_orderkey
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column#41, tpch50.orders.o_orderdate->Column#42, tpch50.orders.o_shippriority->Column#43, tpch50.lineitem.l_orderkey->Column#44
|
||||
Projection root tpch50.lineitem.l_orderkey, Column, tpch50.orders.o_orderdate, tpch50.orders.o_shippriority
|
||||
└─TopN root Column:desc, tpch50.orders.o_orderdate, offset:0, count:10
|
||||
└─HashAgg root group by:Column, Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpch50.orders.o_orderdate, funcs:firstrow(Column)->tpch50.orders.o_shippriority, funcs:firstrow(Column)->tpch50.lineitem.l_orderkey
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column, tpch50.orders.o_orderdate->Column, tpch50.orders.o_shippriority->Column, tpch50.lineitem.l_orderkey->Column
|
||||
└─IndexHashJoin root inner join, inner:IndexLookUp, outer key:tpch50.orders.o_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.orders.o_orderkey, tpch50.lineitem.l_orderkey)
|
||||
├─HashJoin(Build) root inner join, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)]
|
||||
│ ├─TableReader(Build) root data:Selection
|
||||
@ -290,8 +290,8 @@ order by
|
||||
o_orderpriority;
|
||||
id task access object operator info
|
||||
Sort root tpch50.orders.o_orderpriority
|
||||
└─Projection root tpch50.orders.o_orderpriority, Column#27
|
||||
└─HashAgg root group by:tpch50.orders.o_orderpriority, funcs:count(1)->Column#27, funcs:firstrow(tpch50.orders.o_orderpriority)->tpch50.orders.o_orderpriority
|
||||
└─Projection root tpch50.orders.o_orderpriority, Column
|
||||
└─HashAgg root group by:tpch50.orders.o_orderpriority, funcs:count(1)->Column, funcs:firstrow(tpch50.orders.o_orderpriority)->tpch50.orders.o_orderpriority
|
||||
└─IndexHashJoin root semi join, inner:IndexLookUp, left side:TableReader, outer key:tpch50.orders.o_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.orders.o_orderkey, tpch50.lineitem.l_orderkey)
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] ge(tpch50.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch50.orders.o_orderdate, 1995-04-01 00:00:00.000000)
|
||||
@ -337,10 +337,10 @@ n_name
|
||||
order by
|
||||
revenue desc;
|
||||
id task access object operator info
|
||||
Sort root Column#49:desc
|
||||
└─Projection root tpch50.nation.n_name, Column#49
|
||||
└─HashAgg root group by:Column#51, funcs:sum(Column#50)->Column#49, funcs:firstrow(Column#51)->tpch50.nation.n_name
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column#50, tpch50.nation.n_name->Column#51
|
||||
Sort root Column:desc
|
||||
└─Projection root tpch50.nation.n_name, Column
|
||||
└─HashAgg root group by:Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpch50.nation.n_name
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column, tpch50.nation.n_name->Column
|
||||
└─Projection root tpch50.lineitem.l_extendedprice, tpch50.lineitem.l_discount, tpch50.nation.n_name
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.orders.o_custkey, tpch50.customer.c_custkey) eq(tpch50.supplier.s_nationkey, tpch50.customer.c_nationkey)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
@ -383,9 +383,9 @@ and l_shipdate < date_add('1994-01-01', interval '1' year)
|
||||
and l_discount between 0.06 - 0.01 and 0.06 + 0.01
|
||||
and l_quantity < 24;
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#19)->Column#18
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:sum(mul(tpch50.lineitem.l_extendedprice, tpch50.lineitem.l_discount))->Column#19
|
||||
└─HashAgg cop[tikv] funcs:sum(mul(tpch50.lineitem.l_extendedprice, tpch50.lineitem.l_discount))->Column
|
||||
└─Selection cop[tikv] ge(tpch50.lineitem.l_discount, 0.05), ge(tpch50.lineitem.l_shipdate, 1994-01-01 00:00:00.000000), le(tpch50.lineitem.l_discount, 0.07), lt(tpch50.lineitem.l_quantity, 24), lt(tpch50.lineitem.l_shipdate, 1995-01-01 00:00:00.000000)
|
||||
└─TableFullScan cop[tikv] table:lineitem keep order:false
|
||||
/*
|
||||
@ -439,10 +439,10 @@ supp_nation,
|
||||
cust_nation,
|
||||
l_year;
|
||||
id task access object operator info
|
||||
Sort root tpch50.nation.n_name, tpch50.nation.n_name, Column#50
|
||||
└─Projection root tpch50.nation.n_name, tpch50.nation.n_name, Column#50, Column#52
|
||||
└─HashAgg root group by:Column#56, Column#57, Column#58, funcs:sum(Column#55)->Column#52, funcs:firstrow(Column#56)->tpch50.nation.n_name, funcs:firstrow(Column#57)->tpch50.nation.n_name, funcs:firstrow(Column#58)->Column#50
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column#55, tpch50.nation.n_name->Column#56, tpch50.nation.n_name->Column#57, extract(YEAR, tpch50.lineitem.l_shipdate)->Column#58
|
||||
Sort root tpch50.nation.n_name, tpch50.nation.n_name, Column
|
||||
└─Projection root tpch50.nation.n_name, tpch50.nation.n_name, Column, Column
|
||||
└─HashAgg root group by:Column, Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpch50.nation.n_name, funcs:firstrow(Column)->tpch50.nation.n_name, funcs:firstrow(Column)->Column
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column, tpch50.nation.n_name->Column, tpch50.nation.n_name->Column, extract(YEAR, tpch50.lineitem.l_shipdate)->Column
|
||||
└─Projection root tpch50.lineitem.l_extendedprice, tpch50.lineitem.l_discount, tpch50.lineitem.l_shipdate, tpch50.nation.n_name, tpch50.nation.n_name
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.customer.c_nationkey, tpch50.nation.n_nationkey)], other cond:or(and(eq(tpch50.nation.n_name, "JAPAN"), eq(tpch50.nation.n_name, "INDIA")), and(eq(tpch50.nation.n_name, "INDIA"), eq(tpch50.nation.n_name, "JAPAN")))
|
||||
├─TableReader(Build) root data:Selection
|
||||
@ -512,10 +512,10 @@ o_year
|
||||
order by
|
||||
o_year;
|
||||
id task access object operator info
|
||||
Sort root Column#62
|
||||
└─Projection root Column#62, div(Column#64, Column#65)->Column#66
|
||||
└─HashAgg root group by:Column#74, funcs:sum(Column#72)->Column#64, funcs:sum(Column#73)->Column#65, funcs:firstrow(Column#74)->Column#62
|
||||
└─Projection root case(eq(tpch50.nation.n_name, INDIA), mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), 0.0000)->Column#72, mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column#73, extract(YEAR, tpch50.orders.o_orderdate)->Column#74
|
||||
Sort root Column
|
||||
└─Projection root Column, div(Column, Column)->Column
|
||||
└─HashAgg root group by:Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Projection root case(eq(tpch50.nation.n_name, INDIA), mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), 0.0000)->Column, mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column, extract(YEAR, tpch50.orders.o_orderdate)->Column
|
||||
└─Projection root tpch50.lineitem.l_extendedprice, tpch50.lineitem.l_discount, tpch50.orders.o_orderdate, tpch50.nation.n_name
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.supplier.s_nationkey, tpch50.nation.n_nationkey)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
@ -588,10 +588,10 @@ order by
|
||||
nation,
|
||||
o_year desc;
|
||||
id task access object operator info
|
||||
Sort root tpch50.nation.n_name, Column#53:desc
|
||||
└─Projection root tpch50.nation.n_name, Column#53, Column#55
|
||||
└─HashAgg root group by:Column#60, Column#61, funcs:sum(Column#59)->Column#55, funcs:firstrow(Column#60)->tpch50.nation.n_name, funcs:firstrow(Column#61)->Column#53
|
||||
└─Projection root minus(mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), mul(tpch50.partsupp.ps_supplycost, tpch50.lineitem.l_quantity))->Column#59, tpch50.nation.n_name->Column#60, extract(YEAR, tpch50.orders.o_orderdate)->Column#61
|
||||
Sort root tpch50.nation.n_name, Column:desc
|
||||
└─Projection root tpch50.nation.n_name, Column, Column
|
||||
└─HashAgg root group by:Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpch50.nation.n_name, funcs:firstrow(Column)->Column
|
||||
└─Projection root minus(mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), mul(tpch50.partsupp.ps_supplycost, tpch50.lineitem.l_quantity))->Column, tpch50.nation.n_name->Column, extract(YEAR, tpch50.orders.o_orderdate)->Column
|
||||
└─Projection root tpch50.lineitem.l_quantity, tpch50.lineitem.l_extendedprice, tpch50.lineitem.l_discount, tpch50.partsupp.ps_supplycost, tpch50.orders.o_orderdate, tpch50.nation.n_name
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.lineitem.l_orderkey, tpch50.orders.o_orderkey)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
@ -655,10 +655,10 @@ order by
|
||||
revenue desc
|
||||
limit 20;
|
||||
id task access object operator info
|
||||
Projection root tpch50.customer.c_custkey, tpch50.customer.c_name, Column#39, tpch50.customer.c_acctbal, tpch50.nation.n_name, tpch50.customer.c_address, tpch50.customer.c_phone, tpch50.customer.c_comment
|
||||
└─TopN root Column#39:desc, offset:0, count:20
|
||||
└─HashAgg root group by:Column#43, Column#44, Column#45, Column#46, Column#47, Column#48, Column#49, funcs:sum(Column#42)->Column#39, funcs:firstrow(Column#43)->tpch50.customer.c_custkey, funcs:firstrow(Column#44)->tpch50.customer.c_name, funcs:firstrow(Column#45)->tpch50.customer.c_address, funcs:firstrow(Column#46)->tpch50.customer.c_phone, funcs:firstrow(Column#47)->tpch50.customer.c_acctbal, funcs:firstrow(Column#48)->tpch50.customer.c_comment, funcs:firstrow(Column#49)->tpch50.nation.n_name
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column#42, tpch50.customer.c_custkey->Column#43, tpch50.customer.c_name->Column#44, tpch50.customer.c_address->Column#45, tpch50.customer.c_phone->Column#46, tpch50.customer.c_acctbal->Column#47, tpch50.customer.c_comment->Column#48, tpch50.nation.n_name->Column#49
|
||||
Projection root tpch50.customer.c_custkey, tpch50.customer.c_name, Column, tpch50.customer.c_acctbal, tpch50.nation.n_name, tpch50.customer.c_address, tpch50.customer.c_phone, tpch50.customer.c_comment
|
||||
└─TopN root Column:desc, offset:0, count:20
|
||||
└─HashAgg root group by:Column, Column, Column, Column, Column, Column, Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpch50.customer.c_custkey, funcs:firstrow(Column)->tpch50.customer.c_name, funcs:firstrow(Column)->tpch50.customer.c_address, funcs:firstrow(Column)->tpch50.customer.c_phone, funcs:firstrow(Column)->tpch50.customer.c_acctbal, funcs:firstrow(Column)->tpch50.customer.c_comment, funcs:firstrow(Column)->tpch50.nation.n_name
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column, tpch50.customer.c_custkey->Column, tpch50.customer.c_name->Column, tpch50.customer.c_address->Column, tpch50.customer.c_phone->Column, tpch50.customer.c_acctbal->Column, tpch50.customer.c_comment->Column, tpch50.nation.n_name->Column
|
||||
└─Projection root tpch50.customer.c_custkey, tpch50.customer.c_name, tpch50.customer.c_address, tpch50.customer.c_phone, tpch50.customer.c_acctbal, tpch50.customer.c_comment, tpch50.lineitem.l_extendedprice, tpch50.lineitem.l_discount, tpch50.nation.n_name
|
||||
└─IndexHashJoin root inner join, inner:IndexLookUp, outer key:tpch50.orders.o_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.orders.o_orderkey, tpch50.lineitem.l_orderkey)
|
||||
├─HashJoin(Build) root inner join, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)]
|
||||
@ -710,13 +710,13 @@ and n_name = 'MOZAMBIQUE'
|
||||
order by
|
||||
value desc;
|
||||
id task access object operator info
|
||||
Projection root tpch50.partsupp.ps_partkey, Column#35->Column#59
|
||||
Projection root tpch50.partsupp.ps_partkey, Column
|
||||
└─TableDual root rows:0
|
||||
ScalarSubQuery root Output: ScalarQueryCol#57
|
||||
└─MaxOneRow root
|
||||
└─Projection root mul(Column#53, 0.0001000000)->Column#54
|
||||
└─HashAgg root funcs:sum(Column#56)->Column#53
|
||||
└─Projection root mul(tpch50.partsupp.ps_supplycost, cast(tpch50.partsupp.ps_availqty, decimal(10,0) BINARY))->Column#56
|
||||
└─Projection root mul(Column, 0.0001000000)->Column
|
||||
└─HashAgg root funcs:sum(Column)->Column
|
||||
└─Projection root mul(tpch50.partsupp.ps_supplycost, cast(tpch50.partsupp.ps_availqty, decimal(10,0) BINARY))->Column
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.supplier.s_suppkey, tpch50.partsupp.ps_suppkey)]
|
||||
├─HashJoin(Build) root inner join, equal:[eq(tpch50.nation.n_nationkey, tpch50.supplier.s_nationkey)]
|
||||
│ ├─TableReader(Build) root data:Selection
|
||||
@ -767,9 +767,9 @@ order by
|
||||
l_shipmode;
|
||||
id task access object operator info
|
||||
Sort root tpch50.lineitem.l_shipmode
|
||||
└─Projection root tpch50.lineitem.l_shipmode, Column#27, Column#28
|
||||
└─HashAgg root group by:Column#36, funcs:sum(Column#34)->Column#27, funcs:sum(Column#35)->Column#28, funcs:firstrow(Column#36)->tpch50.lineitem.l_shipmode
|
||||
└─Projection root cast(case(or(eq(tpch50.orders.o_orderpriority, 1-URGENT), eq(tpch50.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(20,0) BINARY)->Column#34, cast(case(and(ne(tpch50.orders.o_orderpriority, 1-URGENT), ne(tpch50.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(20,0) BINARY)->Column#35, tpch50.lineitem.l_shipmode->Column#36
|
||||
└─Projection root tpch50.lineitem.l_shipmode, Column, Column
|
||||
└─HashAgg root group by:Column, funcs:sum(Column)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->tpch50.lineitem.l_shipmode
|
||||
└─Projection root cast(case(or(eq(tpch50.orders.o_orderpriority, 1-URGENT), eq(tpch50.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(20,0) BINARY)->Column, cast(case(and(ne(tpch50.orders.o_orderpriority, 1-URGENT), ne(tpch50.orders.o_orderpriority, 2-HIGH)), 1, 0), decimal(20,0) BINARY)->Column, tpch50.lineitem.l_shipmode->Column
|
||||
└─Projection root tpch50.orders.o_orderpriority, tpch50.lineitem.l_shipmode
|
||||
└─IndexJoin root inner join, inner:TableReader, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.orders.o_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.orders.o_orderkey)
|
||||
├─TableReader(Build) root data:Selection
|
||||
@ -807,10 +807,10 @@ order by
|
||||
custdist desc,
|
||||
c_count desc;
|
||||
id task access object operator info
|
||||
Sort root Column#19:desc, Column#18:desc
|
||||
└─Projection root Column#18, Column#19
|
||||
└─HashAgg root group by:Column#18, funcs:count(1)->Column#19, funcs:firstrow(Column#18)->Column#18
|
||||
└─HashAgg root group by:tpch50.customer.c_custkey, funcs:count(tpch50.orders.o_orderkey)->Column#18
|
||||
Sort root Column:desc, Column:desc
|
||||
└─Projection root Column, Column
|
||||
└─HashAgg root group by:Column, funcs:count(1)->Column, funcs:firstrow(Column)->Column
|
||||
└─HashAgg root group by:tpch50.customer.c_custkey, funcs:count(tpch50.orders.o_orderkey)->Column
|
||||
└─HashJoin root left outer join, left side:TableReader, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:customer keep order:false
|
||||
@ -839,9 +839,9 @@ l_partkey = p_partkey
|
||||
and l_shipdate >= '1996-12-01'
|
||||
and l_shipdate < date_add('1996-12-01', interval '1' month);
|
||||
id task access object operator info
|
||||
Projection root div(mul(100.00, Column#27), Column#28)->Column#29
|
||||
└─HashAgg root funcs:sum(Column#31)->Column#27, funcs:sum(Column#32)->Column#28
|
||||
└─Projection root case(like(tpch50.part.p_type, PROMO%, 92), mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), 0.0000)->Column#31, mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column#32
|
||||
Projection root div(mul(100.00, Column), Column)->Column
|
||||
└─HashAgg root funcs:sum(Column)->Column, funcs:sum(Column)->Column
|
||||
└─Projection root case(like(tpch50.part.p_type, PROMO%, 92), mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount)), 0.0000)->Column, mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.lineitem.l_partkey, tpch50.part.p_partkey)]
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:part keep order:false
|
||||
@ -928,9 +928,9 @@ p_brand,
|
||||
p_type,
|
||||
p_size;
|
||||
id task access object operator info
|
||||
Sort root Column#23:desc, tpch50.part.p_brand, tpch50.part.p_type, tpch50.part.p_size
|
||||
└─Projection root tpch50.part.p_brand, tpch50.part.p_type, tpch50.part.p_size, Column#23
|
||||
└─HashAgg root group by:tpch50.part.p_brand, tpch50.part.p_size, tpch50.part.p_type, funcs:count(distinct tpch50.partsupp.ps_suppkey)->Column#23, funcs:firstrow(tpch50.part.p_brand)->tpch50.part.p_brand, funcs:firstrow(tpch50.part.p_type)->tpch50.part.p_type, funcs:firstrow(tpch50.part.p_size)->tpch50.part.p_size
|
||||
Sort root Column:desc, tpch50.part.p_brand, tpch50.part.p_type, tpch50.part.p_size
|
||||
└─Projection root tpch50.part.p_brand, tpch50.part.p_type, tpch50.part.p_size, Column
|
||||
└─HashAgg root group by:tpch50.part.p_brand, tpch50.part.p_size, tpch50.part.p_type, funcs:count(distinct tpch50.partsupp.ps_suppkey)->Column, funcs:firstrow(tpch50.part.p_brand)->tpch50.part.p_brand, funcs:firstrow(tpch50.part.p_type)->tpch50.part.p_type, funcs:firstrow(tpch50.part.p_size)->tpch50.part.p_size
|
||||
└─HashJoin root anti semi join, left side:Projection, equal:[eq(tpch50.partsupp.ps_suppkey, tpch50.supplier.s_suppkey)]
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] like(tpch50.supplier.s_comment, "%Customer%Complaints%", 92)
|
||||
@ -971,18 +971,18 @@ where
|
||||
l_partkey = p_partkey
|
||||
);
|
||||
id task access object operator info
|
||||
Projection root div(Column#46, 7.0)->Column#47
|
||||
└─HashAgg root funcs:sum(tpch50.lineitem.l_extendedprice)->Column#46
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.part.p_partkey, tpch50.lineitem.l_partkey)], other cond:lt(tpch50.lineitem.l_quantity, mul(0.2, Column#44))
|
||||
Projection root div(Column, 7.0)->Column
|
||||
└─HashAgg root funcs:sum(tpch50.lineitem.l_extendedprice)->Column
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.part.p_partkey, tpch50.lineitem.l_partkey)], other cond:lt(tpch50.lineitem.l_quantity, mul(0.2, Column))
|
||||
├─HashJoin(Build) root inner join, equal:[eq(tpch50.part.p_partkey, tpch50.lineitem.l_partkey)]
|
||||
│ ├─TableReader(Build) root data:Selection
|
||||
│ │ └─Selection cop[tikv] eq(tpch50.part.p_brand, "Brand#44"), eq(tpch50.part.p_container, "WRAP PKG")
|
||||
│ │ └─TableFullScan cop[tikv] table:part keep order:false
|
||||
│ └─TableReader(Probe) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:lineitem keep order:false
|
||||
└─HashAgg(Probe) root group by:tpch50.lineitem.l_partkey, funcs:avg(Column#50, Column#51)->Column#44, funcs:firstrow(tpch50.lineitem.l_partkey)->tpch50.lineitem.l_partkey
|
||||
└─HashAgg(Probe) root group by:tpch50.lineitem.l_partkey, funcs:avg(Column, Column)->Column, funcs:firstrow(tpch50.lineitem.l_partkey)->tpch50.lineitem.l_partkey
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] group by:tpch50.lineitem.l_partkey, funcs:count(tpch50.lineitem.l_quantity)->Column#50, funcs:sum(tpch50.lineitem.l_quantity)->Column#51
|
||||
└─HashAgg cop[tikv] group by:tpch50.lineitem.l_partkey, funcs:count(tpch50.lineitem.l_quantity)->Column, funcs:sum(tpch50.lineitem.l_quantity)->Column
|
||||
└─TableFullScan cop[tikv] table:lineitem keep order:false
|
||||
/*
|
||||
Q18 Large Volume Customer Query
|
||||
@ -1027,15 +1027,15 @@ o_totalprice desc,
|
||||
o_orderdate
|
||||
limit 100;
|
||||
id task access object operator info
|
||||
Projection root tpch50.customer.c_name, tpch50.customer.c_custkey, tpch50.orders.o_orderkey, tpch50.orders.o_orderdate, tpch50.orders.o_totalprice, Column#54
|
||||
Projection root tpch50.customer.c_name, tpch50.customer.c_custkey, tpch50.orders.o_orderkey, tpch50.orders.o_orderdate, tpch50.orders.o_totalprice, Column
|
||||
└─TopN root tpch50.orders.o_totalprice:desc, tpch50.orders.o_orderdate, offset:0, count:100
|
||||
└─HashAgg root group by:tpch50.customer.c_custkey, tpch50.customer.c_name, tpch50.orders.o_orderdate, tpch50.orders.o_orderkey, tpch50.orders.o_totalprice, funcs:sum(tpch50.lineitem.l_quantity)->Column#54, funcs:firstrow(tpch50.customer.c_custkey)->tpch50.customer.c_custkey, funcs:firstrow(tpch50.customer.c_name)->tpch50.customer.c_name, funcs:firstrow(tpch50.orders.o_orderkey)->tpch50.orders.o_orderkey, funcs:firstrow(tpch50.orders.o_totalprice)->tpch50.orders.o_totalprice, funcs:firstrow(tpch50.orders.o_orderdate)->tpch50.orders.o_orderdate
|
||||
└─HashAgg root group by:tpch50.customer.c_custkey, tpch50.customer.c_name, tpch50.orders.o_orderdate, tpch50.orders.o_orderkey, tpch50.orders.o_totalprice, funcs:sum(tpch50.lineitem.l_quantity)->Column, funcs:firstrow(tpch50.customer.c_custkey)->tpch50.customer.c_custkey, funcs:firstrow(tpch50.customer.c_name)->tpch50.customer.c_name, funcs:firstrow(tpch50.orders.o_orderkey)->tpch50.orders.o_orderkey, funcs:firstrow(tpch50.orders.o_totalprice)->tpch50.orders.o_totalprice, funcs:firstrow(tpch50.orders.o_orderdate)->tpch50.orders.o_orderdate
|
||||
└─IndexHashJoin root inner join, inner:IndexLookUp, outer key:tpch50.orders.o_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.orders.o_orderkey, tpch50.lineitem.l_orderkey)
|
||||
├─HashJoin(Build) root inner join, equal:[eq(tpch50.orders.o_orderkey, tpch50.lineitem.l_orderkey)]
|
||||
│ ├─Selection(Build) root gt(Column#52, 314)
|
||||
│ │ └─HashAgg root group by:tpch50.lineitem.l_orderkey, funcs:sum(Column#77)->Column#52, funcs:firstrow(tpch50.lineitem.l_orderkey)->tpch50.lineitem.l_orderkey
|
||||
│ ├─Selection(Build) root gt(Column, 314)
|
||||
│ │ └─HashAgg root group by:tpch50.lineitem.l_orderkey, funcs:sum(Column)->Column, funcs:firstrow(tpch50.lineitem.l_orderkey)->tpch50.lineitem.l_orderkey
|
||||
│ │ └─TableReader root data:HashAgg
|
||||
│ │ └─HashAgg cop[tikv] group by:tpch50.lineitem.l_orderkey, funcs:sum(tpch50.lineitem.l_quantity)->Column#77
|
||||
│ │ └─HashAgg cop[tikv] group by:tpch50.lineitem.l_orderkey, funcs:sum(tpch50.lineitem.l_quantity)->Column
|
||||
│ │ └─TableFullScan cop[tikv] table:lineitem keep order:false
|
||||
│ └─HashJoin(Probe) root inner join, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)]
|
||||
│ ├─TableReader(Build) root data:TableFullScan
|
||||
@ -1091,8 +1091,8 @@ and l_shipmode in ('AIR', 'AIR REG')
|
||||
and l_shipinstruct = 'DELIVER IN PERSON'
|
||||
);
|
||||
id task access object operator info
|
||||
HashAgg root funcs:sum(Column#28)->Column#27
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column#28
|
||||
HashAgg root funcs:sum(Column)->Column
|
||||
└─Projection root mul(tpch50.lineitem.l_extendedprice, minus(1, tpch50.lineitem.l_discount))->Column
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.part.p_partkey, tpch50.lineitem.l_partkey)], other cond:or(and(and(eq(tpch50.part.p_brand, "Brand#52"), in(tpch50.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG")), and(ge(tpch50.lineitem.l_quantity, 4), and(le(tpch50.lineitem.l_quantity, 14), le(tpch50.part.p_size, 5)))), or(and(and(eq(tpch50.part.p_brand, "Brand#11"), in(tpch50.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK")), and(ge(tpch50.lineitem.l_quantity, 18), and(le(tpch50.lineitem.l_quantity, 28), le(tpch50.part.p_size, 10)))), and(and(eq(tpch50.part.p_brand, "Brand#51"), in(tpch50.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG")), and(ge(tpch50.lineitem.l_quantity, 29), and(le(tpch50.lineitem.l_quantity, 39), le(tpch50.part.p_size, 15))))))
|
||||
├─TableReader(Build) root data:Selection
|
||||
│ └─Selection cop[tikv] ge(tpch50.part.p_size, 1), or(and(eq(tpch50.part.p_brand, "Brand#52"), and(in(tpch50.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(tpch50.part.p_size, 5))), or(and(eq(tpch50.part.p_brand, "Brand#11"), and(in(tpch50.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(tpch50.part.p_size, 10))), and(eq(tpch50.part.p_brand, "Brand#51"), and(in(tpch50.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(tpch50.part.p_size, 15)))))
|
||||
@ -1150,8 +1150,8 @@ id task access object operator info
|
||||
Sort root tpch50.supplier.s_name
|
||||
└─HashJoin root inner join, equal:[eq(tpch50.supplier.s_suppkey, tpch50.partsupp.ps_suppkey)]
|
||||
├─HashAgg(Build) root group by:tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_suppkey)->tpch50.partsupp.ps_suppkey
|
||||
│ └─Selection root gt(cast(tpch50.partsupp.ps_availqty, decimal(10,0) BINARY), mul(0.5, Column#44))
|
||||
│ └─HashAgg root group by:tpch50.partsupp.ps_partkey, tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_suppkey)->tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_availqty)->tpch50.partsupp.ps_availqty, funcs:sum(tpch50.lineitem.l_quantity)->Column#44
|
||||
│ └─Selection root gt(cast(tpch50.partsupp.ps_availqty, decimal(10,0) BINARY), mul(0.5, Column))
|
||||
│ └─HashAgg root group by:tpch50.partsupp.ps_partkey, tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_suppkey)->tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_availqty)->tpch50.partsupp.ps_availqty, funcs:sum(tpch50.lineitem.l_quantity)->Column
|
||||
│ └─HashJoin root left outer join, left side:IndexHashJoin, equal:[eq(tpch50.partsupp.ps_partkey, tpch50.lineitem.l_partkey) eq(tpch50.partsupp.ps_suppkey, tpch50.lineitem.l_suppkey)]
|
||||
│ ├─IndexHashJoin(Build) root inner join, inner:IndexLookUp, outer key:tpch50.part.p_partkey, inner key:tpch50.partsupp.ps_partkey, equal cond:eq(tpch50.part.p_partkey, tpch50.partsupp.ps_partkey)
|
||||
│ │ ├─TableReader(Build) root data:Selection
|
||||
@ -1218,9 +1218,9 @@ numwait desc,
|
||||
s_name
|
||||
limit 100;
|
||||
id task access object operator info
|
||||
Projection root tpch50.supplier.s_name, Column#72
|
||||
└─TopN root Column#72:desc, tpch50.supplier.s_name, offset:0, count:100
|
||||
└─HashAgg root group by:tpch50.supplier.s_name, funcs:count(1)->Column#72, funcs:firstrow(tpch50.supplier.s_name)->tpch50.supplier.s_name
|
||||
Projection root tpch50.supplier.s_name, Column
|
||||
└─TopN root Column:desc, tpch50.supplier.s_name, offset:0, count:100
|
||||
└─HashAgg root group by:tpch50.supplier.s_name, funcs:count(1)->Column, funcs:firstrow(tpch50.supplier.s_name)->tpch50.supplier.s_name
|
||||
└─IndexHashJoin root anti semi join, inner:IndexLookUp, left side:IndexHashJoin, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.lineitem.l_orderkey), other cond:ne(tpch50.lineitem.l_suppkey, tpch50.lineitem.l_suppkey)
|
||||
├─IndexHashJoin(Build) root semi join, inner:IndexLookUp, left side:IndexJoin, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.lineitem.l_orderkey), other cond:ne(tpch50.lineitem.l_suppkey, tpch50.lineitem.l_suppkey)
|
||||
│ ├─IndexJoin(Build) root inner join, inner:TableReader, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.orders.o_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.orders.o_orderkey)
|
||||
@ -1291,15 +1291,15 @@ cntrycode
|
||||
order by
|
||||
cntrycode;
|
||||
id task access object operator info
|
||||
Sort root Column#32
|
||||
└─Projection root Column#32, Column#33, Column#34
|
||||
└─HashAgg root group by:Column#37, funcs:count(1)->Column#33, funcs:sum(Column#36)->Column#34, funcs:firstrow(Column#37)->Column#32
|
||||
└─Projection root tpch50.customer.c_acctbal->Column#36, substring(tpch50.customer.c_phone, 1, 2)->Column#37
|
||||
Sort root Column
|
||||
└─Projection root Column, Column, Column
|
||||
└─HashAgg root group by:Column, funcs:count(1)->Column, funcs:sum(Column)->Column, funcs:firstrow(Column)->Column
|
||||
└─Projection root tpch50.customer.c_acctbal->Column, substring(tpch50.customer.c_phone, 1, 2)->Column
|
||||
└─TableDual root rows:0
|
||||
ScalarSubQuery root Output: ScalarQueryCol#22
|
||||
└─MaxOneRow root
|
||||
└─HashAgg root funcs:avg(Column#18, Column#19)->Column#17
|
||||
└─HashAgg root funcs:avg(Column, Column)->Column
|
||||
└─TableReader root data:HashAgg
|
||||
└─HashAgg cop[tikv] funcs:count(tpch50.customer.c_acctbal)->Column#18, funcs:sum(tpch50.customer.c_acctbal)->Column#19
|
||||
└─HashAgg cop[tikv] funcs:count(tpch50.customer.c_acctbal)->Column, funcs:sum(tpch50.customer.c_acctbal)->Column
|
||||
└─Selection cop[tikv] gt(tpch50.customer.c_acctbal, 0.00), in(substring(tpch50.customer.c_phone, 1, 2), "20", "40", "22", "30", "39", "42", "21")
|
||||
└─TableFullScan cop[tikv] table:customer keep order:false
|
||||
|
||||
@ -556,11 +556,11 @@ insert into t values(1,1,1,1,2),(2,1,2,1,0);
|
||||
analyze table t;
|
||||
explain format = 'plan_tree' select t.e in (select count(*) from t s use index(idx), t t1 where s.b = 1 and s.c in (1, 2) and s.d = t.a and s.a = t1.a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#27
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(util__ranger.t.e, Column#26)
|
||||
Projection root Column
|
||||
└─Apply root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(util__ranger.t.e, Column)
|
||||
├─TableReader(Build) root data:TableFullScan
|
||||
│ └─TableFullScan cop[tikv] table:t keep order:false
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column#26
|
||||
└─StreamAgg(Probe) root funcs:count(1)->Column
|
||||
└─HashJoin root inner join, equal:[eq(util__ranger.t.a, util__ranger.t.a)]
|
||||
├─IndexReader(Build) root index:IndexFullScan
|
||||
│ └─IndexFullScan cop[tikv] table:t1, index:idx(b, c, d) keep order:false
|
||||
|
||||
@ -5,47 +5,47 @@ set @@tidb_enable_window_function = 1;
|
||||
set @@session.tidb_window_concurrency = 1;
|
||||
explain format = 'plan_tree' select sum(a) over() from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over()
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a) keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a) keep order:true, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b range between unbounded preceding and current row)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b rows unbounded preceding) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b rows between unbounded preceding and current row)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b rows between 1 preceding and 1 following) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b rows between 1 preceding and 1 following)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b range between 1 preceding and 1 following) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b range between 1 preceding and 1 following)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
└─TableReader root data:TableFullScan
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by c range between interval '2:30' minute_second preceding and interval '2:30' minute_second following) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.c range between interval "2:30" "MINUTE_SECOND" preceding and interval "2:30" "MINUTE_SECOND" following)
|
||||
└─Sort root window_function.t.a, window_function.t.c
|
||||
└─TableReader root data:TableFullScan
|
||||
@ -53,19 +53,19 @@ Projection root Column#6->Column#7
|
||||
set @@session.tidb_window_concurrency = 4;
|
||||
explain format = 'plan_tree' select sum(a) over() from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over()
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a) keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a)
|
||||
└─IndexReader root index:IndexFullScan
|
||||
└─IndexFullScan cop[tikv] table:t, index:idx(a) keep order:true, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:4, data sources:[TableReader]
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b range between unbounded preceding and current row)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
@ -74,7 +74,7 @@ Projection root Column#6->Column#7
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b rows unbounded preceding) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:4, data sources:[TableReader]
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b rows between unbounded preceding and current row)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
@ -83,7 +83,7 @@ Projection root Column#6->Column#7
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b rows between 1 preceding and 1 following) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:4, data sources:[TableReader]
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b rows between 1 preceding and 1 following)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
@ -92,7 +92,7 @@ Projection root Column#6->Column#7
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by b range between 1 preceding and 1 following) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:4, data sources:[TableReader]
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.b range between 1 preceding and 1 following)
|
||||
└─Sort root window_function.t.a, window_function.t.b
|
||||
@ -101,7 +101,7 @@ Projection root Column#6->Column#7
|
||||
└─TableFullScan cop[tikv] table:t keep order:false, stats:pseudo
|
||||
explain format = 'plan_tree' select sum(a) over(partition by a order by c range between interval '2:30' minute_second preceding and interval '2:30' minute_second following) from t;
|
||||
id task access object operator info
|
||||
Projection root Column#6->Column#7
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:4, data sources:[TableReader]
|
||||
└─Window root sum(cast(window_function.t.a, decimal(10,0) BINARY))->Column#6 over(partition by window_function.t.a order by window_function.t.c range between interval "2:30" "MINUTE_SECOND" preceding and interval "2:30" "MINUTE_SECOND" following)
|
||||
└─Sort root window_function.t.a, window_function.t.c
|
||||
@ -114,7 +114,7 @@ insert into t1 values(1, 1), (2, 1);
|
||||
analyze table t1 all columns;
|
||||
explain format = 'plan_tree' select sum(a) over(partition by b) from t1;
|
||||
id task access object operator info
|
||||
Projection root Column#4->Column#5
|
||||
Projection root Column
|
||||
└─Window root sum(cast(window_function.t1.a, decimal(10,0) BINARY))->Column#4 over(partition by window_function.t1.b)
|
||||
└─Sort root window_function.t1.b
|
||||
└─TableReader root data:TableFullScan
|
||||
@ -123,7 +123,7 @@ insert into t1 values(3, 3);
|
||||
analyze table t1 all columns;
|
||||
explain format = 'plan_tree' select sum(a) over(partition by b) from t1;
|
||||
id task access object operator info
|
||||
Projection root Column#4->Column#5
|
||||
Projection root Column
|
||||
└─Shuffle root execution info: concurrency:2, data sources:[TableReader]
|
||||
└─Window root sum(cast(window_function.t1.a, decimal(10,0) BINARY))->Column#4 over(partition by window_function.t1.b)
|
||||
└─Sort root window_function.t1.b
|
||||
|
||||
Reference in New Issue
Block a user