mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Speed up match_eclasses_to_foreign_key_col() when there are many ECs.
Check ec_relids before bothering to iterate through the EC members. On a perhaps extreme, but still real-world, query in which match_eclasses_to_foreign_key_col() accounts for the bulk of the planner's runtime, this saves nearly 40% of the runtime. It's a bit of a stopgap fix, but it's simple enough to be back-patched to 9.6 where this code came in; so let's do that. David Rowley Discussion: https://postgr.es/m/6970.1545327857@sss.pgh.pa.us
This commit is contained in:
parent
d26a810ebf
commit
fa86238f1e
@ -2052,6 +2052,14 @@ match_eclasses_to_foreign_key_col(PlannerInfo *root,
|
|||||||
continue;
|
continue;
|
||||||
/* Note: it seems okay to match to "broken" eclasses here */
|
/* Note: it seems okay to match to "broken" eclasses here */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If eclass visibly doesn't have members for both rels, there's no
|
||||||
|
* need to grovel through the members.
|
||||||
|
*/
|
||||||
|
if (!bms_is_member(var1varno, ec->ec_relids) ||
|
||||||
|
!bms_is_member(var2varno, ec->ec_relids))
|
||||||
|
continue;
|
||||||
|
|
||||||
foreach(lc2, ec->ec_members)
|
foreach(lc2, ec->ec_members)
|
||||||
{
|
{
|
||||||
EquivalenceMember *em = (EquivalenceMember *) lfirst(lc2);
|
EquivalenceMember *em = (EquivalenceMember *) lfirst(lc2);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user