Expand applicability of aggregate's sortop optimization
| От | Matthias van de Meent |
|---|---|
| Тема | Expand applicability of aggregate's sortop optimization |
| Дата | |
| Msg-id | CAEze2Wg-+EV4HdbQiut7X3KQd39xwmrpV4CeCmoJFFjH8cGdhw@mail.gmail.com обсуждение исходный текст |
| Ответы |
Re: Expand applicability of aggregate's sortop optimization
Re: Expand applicability of aggregate's sortop optimization |
| Список | pgsql-hackers |
Hi, As you may know, aggregates like SELECT MIN(unique1) FROM tenk1; are rewritten as SELECT unique1 FROM tenk1 ORDER BY unique1 USING < LIMIT 1; by using the optional sortop field in the aggregator. However, this optimization is disabled for clauses that in itself have an ORDER BY clause such as `MIN(unique1 ORDER BY <anything>), because <anything> can cause reordering of distinguisable values like 1.0 and 1.00, which then causes measurable differences in the output. In the general case, that's a good reason to not apply this optimization, but in some cases, we could still apply the index optimization. One of those cases is fixed in the attached patch: if we order by the same column that we're aggregating, using the same order class as the aggregate's sort operator (i.e. the aggregate's sortop is in the same btree opclass as the ORDER BY's sort operator), then we can still use the index operation: The sort behaviour isn't changed, thus we can apply the optimization. PFA the small patch that implements this. Note that we can't blindly accept just any ordering by the same column: If we had an opclass that sorted numeric values by the length of the significant/mantissa, then that'd provide a different (and distinct) ordering from that which is expected by the normal min()/max() aggregates for numeric, which could cause us to return arguably incorrect results for the aggregate expression. Alternatively, the current code could be changed to build indexed paths that append the SORT BY paths to the aggregate's sort operator, but that'd significantly increase complexity here. Kind regards, Matthias van de Meent Neon (https://neon.tech)
Вложения
В списке pgsql-hackers по дате отправления: