Re: generic plans and "initial" pruning - Mailing list pgsql-hackers
From | Robert Haas |
---|---|
Subject | Re: generic plans and "initial" pruning |
Date | |
Msg-id | CA+TgmobdwyPB27RGZSGFm3AAknUty9NEuM3U-kiQQuHV89c53g@mail.gmail.com Whole thread Raw |
In response to | Re: generic plans and "initial" pruning (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: generic plans and "initial" pruning
|
List | pgsql-hackers |
On Fri, Jul 29, 2022 at 11:04 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > We could probably make that work, but I'm skeptical that it would > really be an improvement overall, for a couple of reasons. > > (1) The need for merge-rangetables-and-renumber-Vars logic doesn't > go away. It just moves from setrefs.c to the rewriter, which would > have to do it when expanding views. This would be a net loss > performance-wise, I think, because setrefs.c can do it as part of a > parsetree scan that it has to perform anyway for other housekeeping > reasons; but the rewriter would need a brand new pass over the tree. > Admittedly that pass would only happen for view replacement, but > it's still not open-and-shut that there'd be a performance win. > > (2) The need for varlevelsup and similar fields doesn't go away, > I think, because we need those for semantic purposes such as > discovering the query level that aggregates are associated with. > That means that subquery flattening still has to make a pass over > the tree to touch every Var's varlevelsup; so not having to adjust > varno at the same time would save little. > > I'm not sure whether I think it's a net plus or net minus that > varno would become effectively independent of varlevelsup. > It'd be different from the way we think of them now, for sure, > and I think it'd take awhile to flush out bugs arising from such > a redefinition. Interesting. Thanks for your thoughts. I guess it's not as clear-cut as I thought, but I still can't help feeling like we're doing an awful lot of expensive rearrangement at the end of query planning. I kind of wonder whether varlevelsup is the wrong idea. Like, suppose we instead handed out subquery identifiers serially, sort of like what we do with SubTransactionId values. Then instead of testing whether varlevelsup>0 you test whether varsubqueryid==mysubqueryid. If you flatten a query into its parent, you still need to adjust every var that refers to the dead subquery, but you don't need to adjust vars that refer to subqueries underneath it. Their level changes, but their identity doesn't. Maybe that doesn't really help that much, but it's always struck me as a little unfortunate that we basically test whether a var is equal by testing whether the varno and varlevelsup are equal. That only works if you assume that you can never end up comparing two vars from thoroughly unrelated parts of the tree, such that the subquery one level up from one might be different from the subquery one level up from the other. > > I don't really expect that we're ever going to change this -- and > > certainly not on this thread. The idea of running around and replacing > > RT indexes all over the tree is deeply embedded in the system. But are > > we really sure we want to add a second kind of index that we have to > > run around and adjust at the same time? > > You probably want to avert your eyes from [1], then ;-). Although > I'm far from convinced that the cross-list index fields currently > proposed there are actually necessary; the cost to adjust them > during rangetable merging could outweigh any benefit. I really like the idea of that patch overall, actually; I think permissions checking is a good example of something that shouldn't require walking the whole query tree but currently does. And actually, I think the same thing is true here: we shouldn't need to walk the whole query tree to find the pruning information, but right now we do. I'm just uncertain whether what Amit has implemented is the least-annoying way to go about it... any thoughts on that, specifically as it pertains to this patch? -- Robert Haas EDB: http://www.enterprisedb.com
pgsql-hackers by date: