From: Tom Lane on 12 Jul 2010 00:54 As per previous discussions, something I want to do for 9.1 is generalize the notion of "inner indexscan" so that nestloop joins can pass parameters down more than one level before they reach the scan where they're needed. To do that, we've got to get rid of the current ad-hoc mechanism that passes the nestloop's outer tuple to the ReScan function of the inner indexscan. Instead, we can use the executor's general-purpose PARAM_EXEC mechanism. Attached is a WIP patch that implements this first step. It compiles and passes regression tests, but there are a couple of loose ends yet: * I haven't actually removed the second parameter of ExecReScan and subsidiary routines. That will enlarge the patch quite a bit without making much difference for reviewing or performance testing, so I left it out of this version. * EXPLAIN now prints the passed-in values as $0, $1, etc, which is a considerable step backwards in plan readability. I have some ideas on fixing that, but haven't tried to do anything about it yet. I believe that the patch is approximately a wash for performance in its current form: there's a bit of extra work in nodeNestloop.c to extract values from the current outer tuple, but that should be largely bought back during the uses of the values in the inner scan, because ExecEvalParam is cheaper than ExecEvalVar. I haven't tried to demonstrate that by performance testing, though. Any comments? Anyone want to test it before it gets committed? regards, tom lane
|
Pages: 1 Prev: (9.1) btree_gist support for searching on "not equals" Next: pg_stat_transaction patch |