Re: Functions and Indexes - Mailing list pgsql-general

From Laurenz Albe
Subject Re: Functions and Indexes
Date
Msg-id 61cb94a962667788c9c09107fa9937300e54d3cd.camel@cybertec.at
Whole thread Raw
In response to Functions and Indexes  (Moreno Andreo <moreno.andreo@evolu-s.it>)
Responses Re: Functions and Indexes
List pgsql-general
On Mon, 2024-11-18 at 15:37 +0100, Moreno Andreo wrote:
> I'm creating indexes for some tables, and I came across a doubt.
>
> If a column appears in the WHERE clause (and so it should be placed in
> index), in case it is "processed" in a function (see below), is it
> possible to insert this function to further narrow down things?
>
> Common index:
> SELECT foo1, foo2 FROM bar WHERE foo1 = 2
> CREATE index bar1_idx ON bar USING btree(foo1);
>
> 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;

> Second question: I 've seen contrasting opinions about putting JOIN
> parameters (ON a.field1 = b.field2) in an index and I'd like to know
> your thoughts.

That depends on the join strategy PostgreSQL chooses.
You can use EXPLAIN to figure out the join strategy.
This article should explain details:
https://www.cybertec-postgresql.com/en/join-strategies-and-performance-in-postgresql/

Yours,
Laurenz Albe



pgsql-general by date:

Previous
From: Laurenz Albe
Date:
Subject: Re: work_mem RAM Accounting in PostgreSQL
Next
From: Maxime Legault-Venne
Date:
Subject: Default session role broken in PostgreSQL 14.14?