Changeset: b5daf4a188a0 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b5daf4a188a0 Modified Files: sql/server/rel_optimizer.c Branch: DVframework Log Message:
plan reordering: traverse the relational plan and decrease weight of the joins with actual data table diffs (68 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -578,6 +578,43 @@ find_basetable( sql_rel *r) } } +static bit +has_actual_data_table(sql_rel *rel) +{ + switch (rel->op) { + case op_basetable: + case op_table: + if(find_prop(rel->p, PROP_ACTUAL_DATA_NEEDED)) + return TRUE; + break; + case op_join: + case op_left: + case op_right: + case op_full: + + case op_semi: + case op_anti: + + case op_union: + case op_inter: + case op_except: + return (has_actual_data_table(rel->l) || has_actual_data_table(rel->r)); + case op_project: + case op_select: + case op_groupby: + case op_topn: + case op_sample: + case op_ddl: + return has_actual_data_table(rel->l); + case op_insert: + case op_update: + case op_delete: + break; + } + + return FALSE; +} + static list * order_join_expressions(sql_allocator *sa, list *dje, list *rels) { @@ -591,7 +628,8 @@ order_join_expressions(sql_allocator *sa sql_exp *e = n->data; keys[i] = exp_keyvalue(e); - /* add some weight for the selections */ + + /* add some weight for the selections and remove some weight for the actual data table */ if (e->type == e_cmp && !is_complex_exp(e->flag)) { sql_rel *l = find_rel(rels, e->l); sql_rel *r = find_rel(rels, e->r); @@ -600,6 +638,10 @@ order_join_expressions(sql_allocator *sa keys[i] += list_length(l->exps)*10; if (r && is_select(r->op) && r->exps) keys[i] += list_length(r->exps)*10; + if(has_actual_data_table(l)) + keys[i] += -10000; + if(has_actual_data_table(r)) + keys[i] += -10000; } pos[i] = i; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list