Re: POC, WIP: OR-clause support for indexes
Matthias van de Meent <boekewurm+postgres@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Make group_similar_or_args() reorder clause list as little as possible
- 775a06d44c04 18.0 landed
-
Allow usage of match_orclause_to_indexcol() for joins
- 627d63419e22 18.0 landed
-
Skip not SOAP-supported indexes while transforming an OR clause into SAOP
- 5bba0546eecb 18.0 landed
-
Remove the wrong assertion from match_orclause_to_indexcol()
- d4d11940df94 18.0 landed
-
Teach bitmap path generation about transforming OR-clauses to SAOP's
- ae4569161a27 18.0 landed
-
Transform OR-clauses to SAOP's during index matching
- d4378c0005e6 18.0 landed
-
Fix the value of or_to_any_transform_limit in postgresql.conf.sample
- 2af75e117478 17.0 landed
-
Transform OR clauses to ANY expression
- 72bd38cc99a1 17.0 landed
-
MergeAttributes code deduplication
- 64444ce071f6 17.0 cited
-
SEARCH and CYCLE clauses
- 3696a600e229 14.0 cited
-
Improve estimation of OR clauses using extended statistics.
- 25a9e54d2db3 14.0 cited
-
Teach btree to handle ScalarArrayOpExpr quals natively.
- 9e8da0f75731 9.2.0 cited
-
Revise collation derivation method and expression-tree representation.
- b310b6e31ce5 9.1.0 cited
-
Instead of trying to force WHERE clauses into CNF or DNF normal form,
- 9888192fb773 8.0.0 cited
On Mon, 27 Nov 2023, 23:16 Peter Geoghegan, <pg@bowt.ie> wrote: > On Mon, Nov 27, 2023 at 1:04 PM Robert Haas <robertmhaas@gmail.com> wrote: > > The use of op_mergejoinable() seems pretty random to me. Why should we > > care about that? If somebody writes a<1 or a<2 or a<3 or a<4, you can > > transform that to a<any(array[1,2,3,4]) if you want. It might not be a > > good idea, but I think it's a legal transformation. > > That kind of transformation is likely to be a very good idea, because > nbtree's _bt_preprocess_array_keys() function knows how to perform > preprocessing that makes the final index qual "a < 1". Obviously that > could be far more efficient. > a < 4, you mean? The example mentioned ANY, not ALL Further suppose you have a machine generated query "a<1 or a<2 or a<3 > or a<4 AND a = 2" -- same as before, except that I added "AND a = 2" > to the end. Now _bt_preprocess_array_keys() will be able to do the > aforementioned inequality preprocessing, just as before. But this time > _bt_preprocess_keys() (a different function with a similar name) can > see that the quals are contradictory. That makes the entire index scan > end, before it ever really began. > With the given WHERE-clause I would hope it did *not* return before scanning the index, given that any row with a < 3 is valid for that constraint with current rules of operator precedence. - Matthias