Re: Allowing join removals for more join types - Mailing list pgsql-hackers
From | Dilip kumar |
---|---|
Subject | Re: Allowing join removals for more join types |
Date | |
Msg-id | 4205E661176A124FAF891E0A6BA91352663126FA@szxeml509-mbs.china.huawei.com Whole thread Raw |
In response to | Re: Allowing join removals for more join types (David Rowley <dgrowleyml@gmail.com>) |
Responses |
Re: Allowing join removals for more join types
|
List | pgsql-hackers |
<div class="WordSection1"><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">On</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"></span><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">23May 2014 12:43 David Rowley Wrote,</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"></span><pclass="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><pclass="MsoNormal">>I'm hitting a bitof a roadblock on point 1. Here's a snipped from my latest attempt:<p class="MsoNormal"> <p class="MsoNormal">> if (bms_membership(innerrel->relids) == BMS_SINGLETON)<p class="MsoNormal">> {<p class="MsoNormal">> int subqueryrelid= bms_singleton_member(innerrel->relids);<p class="MsoNormal">> RelOptInfo*subqueryrel = find_base_rel(innerrel->subroot, subqueryrelid);<p class="MsoNormal">> <p class="MsoNormal">> if (relation_has_unique_index_for(root,subqueryrel, clause_list, NIL, NIL))<p class="MsoNormal">> return true;<p class="MsoNormal">> }<p class="MsoNormal"> <p class="MsoNormal">>But it seems that innerrel->subrootis still NULL at this stage of planning and from what I can tell does not exist anywhere else yet andis not generated until make_one_rel() is called from query_planner()<p class="MsoNormal"> <p class="MsoNormal">>AmI missing something major here,or does this sound about right?<p class="MsoNormal"> <p class="MsoNormal">It’strue that, till this point of time we haven’t prepared the base relation list for the subquery, andthat will be done from make_one_rel while generating the SUBQURY path list.<p class="MsoNormal"> <p class="MsoNormal">Ican think of one solution but I think it will be messy…<p class="MsoNormal"> <p class="MsoNormal">We getthe base relation info directly from subquery <p class="MsoNormal">Like currently in your patch (shown in below snippet)we are getting the distinct and groupby clause from sub Query, similarly we can get base relation info from (Query->jointree)<pclass="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><pclass="MsoNormal"> if (innerrel->rtekind== RTE_SUBQUERY)<p class="MsoNormal"> {<p class="MsoNormal"> Query*query = root->simple_rte_array[innerrelid]->subquery;<p class="MsoNormal"> <p class="MsoNormal"> if (sortclause_is_unique_on_restrictinfo(query, clause_list, query->groupClause)||<p class="MsoNormal"> sortclause_is_unique_on_restrictinfo(query,clause_list, query->distinctClause))<p class="MsoNormal"> return true;<p class="MsoNormal"> }<p class="MsoNormal"><spanstyle="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><p class="MsoNormal"><spanstyle="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><p class="MsoNormal">Regards,<pclass="MsoNormal">Dilip</div>
pgsql-hackers by date: