Re: Functions and Indexes - Mailing list pgsql-general

From Moreno Andreo
Subject Re: Functions and Indexes
Date
Msg-id 92aa9401-e44d-4a45-9851-0617935e06a2@evolu-s.it
Whole thread Raw
In response to Re: Functions and Indexes  (Laurenz Albe <laurenz.albe@cybertec.at>)
Responses Re: Functions and Indexes
List pgsql-general


On 19/11/24 12:34, Laurenz Albe wrote:
On Tue, 2024-11-19 at 11:53 +0100, Moreno Andreo wrote:
What about if query becomes
SELECT foo1, foo2 FROM bar WHERE (POSITION(foo1 IN 'blah blah') >0)
You could create an index like

    CREATE INDEX ON bar (position(foo1 IN 'blah blah'));

Alternatively, you could have a partial index:

    CREATE INDEX ON bar (foo1) INCLUDE (foo2)
    WHERE position(foo1 IN 'blah blah') > 0;
Interesting. Never seen this form, I'll look further on it.

I stumbled into
https://www.cybertec-postgresql.com/en/indexing-like-postgresql-oracle/
and discovered text_pattern_ops.
I'm wondering if it can be of any use in my index, that should hold a 
WHERE condition with a combination of LIKE and the POSITION expression 
above.
More docs to read ... :-)
I don't think "text_pattern_ops" will help here - queries that use LIKE
to search for a substring (LIKE '%string%') cannot make use of a b-tree
index.
Oh, OK, i was happy to use BTREEs 'cause I had some issues with GIN/GIST (like indexes way bigger than table and so inefficient). OK, I'll stick with these and try harder to obtain better results.

One thing I can't understand well.
In https://www.cybertec-postgresql.com/en/join-strategies-and-performance-in-postgresql/
you say
"Note that for inner joins there is no distinction between the join condition and the WHERE condition, but that doesn't hold for outer joins."
What do you mean?

Thanks
Moreno

pgsql-general by date:

Previous
From: Laurenz Albe
Date:
Subject: Re: Functions and Indexes
Next
From: Ron Johnson
Date:
Subject: Specifying columns returned by a function, when the function is in a SELECT column list?