pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Michael Riess <mlriess@gmx.de>
To: pgsql-performance@postgresql.org
Subject: Re: wildcard search performance with "like"
Date: Wed, 18 Jan 2006 16:06:15 +0100
Message-ID: <dqllgv$15j7$1@news.hub.org> (raw)
In-Reply-To: <43CD4CE5.3020506@larcb.ecs.nasa.gov>
References: <43CD4CE5.3020506@larcb.ecs.nasa.gov>

As far as I know the index is only used when you do a prefix search, for 
example

col like 'xyz%'

I think that if you are looking for expressions such as 'A%B', you could 
rephrase them like this:

col like 'A%' AND col like 'A%B'

So the database could use the index to narrow down the result and then 
do a sequential search for the second condition.

Mike


Yantao Shi schrieb:
> Hi,
> 
> I have a postges 8.1.1 table with over 29 million rows in it. The colunm 
> (file_name) that I need to search on has entries like the following:
> 
> MOD04_L2.A2005311.1400.004.2005312013848.hdf                                                        
> 
> MYD04_L2.A2005311.0700.004.2005312013437.hdf                    
> I have an index on this column. But an index search is performance only 
> when I give the full file_name for search:
> 
> testdbspc=# explain select file_name from catalog where file_name = 
> 'MOD04_L2.A2005311.1400.004.2005312013848.hdf';
> QUERY PLAN
> Index Scan using catalog_pk_idx on catalog  (cost=0.00..6.01 rows=1 
> width=404)
>  Index Cond: (file_name = 
> 'MOD04_L2.A2005311.1400.004.2005312013848.hdf'::bpchar)
> (2 rows)
> 
> What I really need to do most of the time is a multi-wildcard search on 
> this column, which is now doing a whole table scan without using the 
> index at all:
> 
> testdbspc=# explain select file_name from catalog where file_name like 
> 'MOD04_L2.A2005311.%.004.2005312013%.hdf';
> QUERY PLAN
> Seq Scan on catalog  (cost=0.00..429.00 rows=1 width=404)
>  Filter: (file_name ~~ 'MOD04_L2.A2005311.%.004.2005312013%.hdf'::text)
> (2 rows)
> 
> Obviously, the performance of the table scan on such a large table is 
> not acceptable.
> 
> I tried full-text indexing and searching. It did NOT work on this column 
> because all the letters and numbers are linked together with "." and 
> considered one big single word by to_tsvector.
> 
> Any solutions for this column to use an index search with multiple wild 
> cards?
> 
> Thanks a lot,
> Yantao Shi
> 
> 
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
> 
>               http://www.postgresql.org/docs/faq
> 



view thread (3+ messages)

Message-ID: <dqllgv$15j7$1@news.hub.org>
Permalink:  ../dqllgv$15j7$1@news.hub.org/
Also on:    postgresql.org/message-id/dqllgv$15j7$1@news.hub.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: mlriess@gmx.de
  Subject: Re: wildcard search performance with "like"
  In-Reply-To: <dqllgv$15j7$1@news.hub.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox