Changeset: 4f742df38689 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4f742df38689
Modified Files:
sql/server/rel_optimize_proj.c
sql/server/rel_optimize_sel.c
sql/server/rel_statistics.c
Branch: pp_hashjoin
Log Message:
improve push func down optimizer
diffs (54 lines):
diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c
--- a/sql/server/rel_optimize_proj.c
+++ b/sql/server/rel_optimize_proj.c
@@ -121,7 +121,7 @@ static sql_rel *
rel_push_project_down(visitor *v, global_props *gp, sql_rel *rel)
{
(void) gp;
- return rel_visitor_bottomup(v, rel, &rel_push_project_down_);
+ return rel_visitor_topdown(v, rel, &rel_push_project_down_);
}
run_optimizer
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -5261,7 +5261,6 @@ static inline sql_rel *
rel_push_func_down(visitor *v, sql_rel *rel)
{
if ((is_select(rel->op) || is_joinop(rel->op)) && rel->l && rel->exps
&& !(rel_is_ref(rel))) {
- int changes = v->changes;
sql_rel *l = rel->l, *r = rel->r;
/* only push down when is useful */
@@ -5269,10 +5268,8 @@ rel_push_func_down(visitor *v, sql_rel *
return rel;
if (exps_can_push_func(rel->exps, rel) &&
exps_need_push_down(rel, rel->exps) && !exps_push_single_func_down(v, rel, l,
r, rel->exps, 0))
return NULL;
- if (v->changes > changes) /* once we get a better join order,
we can try to remove this projection */
- return rel_project(v->sql->sa, rel,
rel_projections(v->sql, rel, NULL, 1, 1));
}
- if (is_simple_project(rel->op) && rel->l && rel->exps && !rel->r) {
+ if (is_simple_project(rel->op) && rel->l && rel->exps) {
sql_rel *pl = rel->l;
if (is_joinop(pl->op) && exps_can_push_func(rel->exps, rel)) {
diff --git a/sql/server/rel_statistics.c b/sql/server/rel_statistics.c
--- a/sql/server/rel_statistics.c
+++ b/sql/server/rel_statistics.c
@@ -998,11 +998,11 @@ rel_get_statistics_(visitor *v, sql_rel
BUN uniques_estimate = BUN_MAX;
if (find_prop(e->p, PROP_JOINIDX)) {
- //prop *lsp = find_prop(l->p,
PROP_SELECTIVITY), *rsp = find_prop(r->p, PROP_SELECTIVITY);
- //dbl ls = lsp ?
lsp->value.dval : 1.0;
- //dbl rs = rsp ?
rsp->value.dval : 1.0;
+ prop *lsp = find_prop(l->p,
PROP_SELECTIVITY), *rsp = find_prop(r->p, PROP_SELECTIVITY);
+ dbl ls = lsp && is_join(l->op)
? lsp->value.dval : 1.0;
+ dbl rs = rsp && is_join(r->op)
? rsp->value.dval : 1.0;
join_idx_estimate = lv>rv?lv:rv;
- //join_idx_estimate *= ls * rs;
+ join_idx_estimate *= ls * rs;
if (join_idx_estimate < 1)
join_idx_estimate = 1;
dbl s =
((dbl)join_idx_estimate/(lv*rv));
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]