Hello Hackers:
   I'm reading the code of optimizer and get confused about the 3
functions. add_path/set_cheapest/get_cheapest_fractional_path


add_(partial_)path:
For every relations,  optimizer will build path for it and add then call
add_path to the rel->pathlist.  during this stage,  *it compare the current
rel->pathlist with the new one,  then it may discard it or add it into the
pathlist.   finally we may have multi path now. *

*set_cheapest*
after we finished the add_path for each relation,  we will call
set_cheapest,  *the cheapest is the one with the lowest total cost plus the
parameterized path.  *

*get_cheapest_fractional_path*
*after we build the paths for all the relation,  it calls
*get_cheapest_fractional_path
to get the best path and then build the plan.

so my question is why do we need to have the 3 cost compare function?

and i have another real case,  and hope you can provide some hints:

select * from t1 where slow_func(t1.a,  3) == true;  ==>  parallel bitmap
index scan.

select * from t1, t2 where t2.pk = 1 and t1.b = t2.b and
slow_function(t1.a,  t2.a) == true; ==> I get nest loop without parallel
scan.  what I hope is  after I get the t2.a (only 1 value),  I want to go
with parallel index scan as well.

In this case,  which part should I focus on to figure out the issue?


Thanks

Reply via email to