Re: Marginal performance improvement: replace bms_first_member loops
От | Tom Lane |
---|---|
Тема | Re: Marginal performance improvement: replace bms_first_member loops |
Дата | |
Msg-id | 9142.1417187500@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: Marginal performance improvement: replace bms_first_member loops (David Rowley <dgrowleyml@gmail.com>) |
Список | pgsql-hackers |
David Rowley <dgrowleyml@gmail.com> writes: > I have to say I don't really like the modifying of the loop iterator that's > going on here: > col = -1; > while ((col = bms_next_member(rte->modifiedCols, col)) >= 0) > { > col += FirstLowInvalidHeapAttributeNumber; > /* do stuff */ > col -= FirstLowInvalidHeapAttributeNumber; > } > Some other code is doing this: > col = -1; > while ((col = bms_next_member(cols, col)) >= 0) > { > /* bit numbers are offset by FirstLowInvalidHeapAttributeNumber */ > AttrNumber attno = col + FirstLowInvalidHeapAttributeNumber; > Which seems less prone to future breakage and possibly slightly less cycles. Yeah, I'd come to the same conclusion while thinking about it in the shower this morning ... > A while back when I was benchmarking the planner time during my trials with > anti/semi join removals, I wrote a patch to change the usage pattern for > cases such as: > ... > This knocked between 4 and 22% off of the time the planner spent in the join > removals path. Really!? I've never seen either of those functions show up all that high in profiles. Can you share the test case you were measuring? regards, tom lane
В списке pgsql-hackers по дате отправления: