Re: SELECT with LIKE clause makes full table scan

From: Julien Rouhaud <rjuju123(at)gmail(dot)com>
To: Matthias Apitz <guru(at)unixarea(dot)de>
Cc: Josef Šimánek <josef(dot)simanek(at)gmail(dot)com>, pgsql-general <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: SELECT with LIKE clause makes full table scan
Date: 2022-01-26 12:13:06
Message-ID: 20220126121306.k6ilsxl7vy2ppmjn@jrouhaud
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

On Wed, Jan 26, 2022 at 12:39:25PM +0100, Matthias Apitz wrote:
>
> > > sisis=# explain (analyze, buffers) select * from d01buch where d01ort like 'Z 9610%' ;
> > > QUERY PLAN
> > > -------------------------------------------------------------------------------------------------------------------------------
> > > Gather (cost=1000.00..680262.71 rows=510 width=952) (actual time=1324.096..1349.429 rows=1 loops=1)
> > > Workers Planned: 4
> > > Workers Launched: 4
> > > Buffers: shared hit=102040 read=560674
> > > -> Parallel Seq Scan on d01buch (cost=0.00..679211.71 rows=128 width=952) (actual time=1117.663..1315.062 rows=0 loops=5)
> > > Filter: (d01ort ~~ 'Z 9610%'::text)
> > > Rows Removed by Filter: 1055853
> > > Buffers: shared hit=102040 read=560674
> > > Planning Time: 2.028 ms
> > > Execution Time: 1349.593 ms
> > > (10 Zeilen)
> > >
> > > Why is this (ignoring the Index) and what could be done?
> [...]
> create INDEX d01ort on d01buch(d01ort) ;/* D01ORT */

That index can't be used with a LIKE that has a trailing wildcard. You need to
either create an index with text_pattern_ops operator class (see
https://www.postgresql.org/docs/current/indexes-opclass.html) or a GIN index
using pg_trgm (which will also work with non-trailing wildcards), see
https://www.postgresql.org/docs/current/pgtrgm.html.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Dominique Devienne 2022-01-26 13:34:21 Re: SELECT with LIKE clause makes full table scan
Previous Message Dominique Devienne 2022-01-26 11:39:45 Re: SELECT with LIKE clause makes full table scan