Changeset: 9ac458d62a45 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9ac458d62a45 Modified Files: monetdb5/optimizer/opt_mergetable.c sql/backends/monet5/sql_statement.c Branch: Jun2020 Log Message:
2 performance fixes allow thetajoin in mergetable (only bail on antijoin's) rewrote the rel2bin_semijoin case with candidates to use a variation of the intersect (not semijoin, which bails at the mergetable) diffs (45 lines): diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -1959,9 +1959,12 @@ OPTmergetableImplementation(Client cntxt bailout = 1; } if (getModuleId(p) == algebraRef && - getFunctionId(p) == thetajoinRef ) { + getFunctionId(p) == thetajoinRef) { + assert(p->argc == 9); + if (p->argc == 9 && getVarConstant(mb,getArg(p,6)).val.ival == 6 /* op == '<>' */) { TRC_INFO(MAL_OPTIMIZER, "Mergetable bailout thetajoin ref\n"); bailout = 1; + } } if (isSample(p)) { bailout = 1; diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -2036,8 +2036,11 @@ stmt_semijoin(backend *be, stmt *op1, st if (op1->nr < 0 || op2->nr < 0) return NULL; - q = newStmt(mb, algebraRef, semijoinRef); - q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); + if (single) { + q = newStmt(mb, algebraRef, semijoinRef); + q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); + } else + q = newStmt(mb, algebraRef, intersectRef); q = pushArgument(mb, q, op1->nr); q = pushArgument(mb, q, op2->nr); if (lcand) @@ -2060,7 +2063,9 @@ stmt_semijoin(backend *be, stmt *op1, st s->op2 = op2; s->flag = cmp_equal; s->key = 0; - s->nrcols = 2; + s->nrcols = 1; + if (single) + s->nrcols = 2; s->nr = getDestVar(q); s->q = q; return s; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list