Re: Allowing join removals for more join types
| От | Dilip kumar |
|---|---|
| Тема | Re: Allowing join removals for more join types |
| Дата | |
| Msg-id | 4205E661176A124FAF891E0A6BA91352663126FA@szxeml509-mbs.china.huawei.com обсуждение исходный текст |
| Ответ на | Re: Allowing join removals for more join types (David Rowley <dgrowleyml@gmail.com>) |
| Ответы |
Re: Allowing join removals for more join types
|
| Список | 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 по дате отправления: