Re: LIKE op with B-Tree Index?

From: "Sam Wong" <sam(at)hellosam(dot)net>
To:
Cc: <pgsql-performance(at)postgresql(dot)org>
Subject: Re: LIKE op with B-Tree Index?
Date: 2012-10-17 01:01:09
Message-ID: 002401cdac02$e5399280$afacb780$@hellosam.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

> On Wednesday, October 17, 2012 4:30, Merlin Moncure wrote,
>
> On Tue, Oct 16, 2012 at 3:15 AM, Sam Wong <sam(at)hellosam(dot)net> wrote:
> > Hi communities,
> >
> > I am investigating a performance issue involved with LIKE 'xxxx%' on
> > an index in a complex query with joins.
> >
> > The problem boils down into this simple scenario---:
> > ====Scenario====
> > My database locale is C, using UTF-8 encoding. I tested this on 9.1.6
and 9.
> > 2.1.
> >
> > Q1.
> > SELECT * FROM shipments WHERE shipment_id LIKE '12345678%'
> >
> > Q2.
> > SELECT * FROM shipments WHERE shipment_id >= '12345678' AND
> > shipment_id < '12345679'
> >
> > ...snip...
> >
> > ====Question====
> > Is Q1 and Q2 equivalent? From what I see and the result they seems to
> > be the same, or did I miss something? (Charset: C, Encoding: UTF-8) If
> > they are equivalent, is that a bug of the planner?
>
> They are most certainly not equivalent. What if the shipping_id is
> 12345678Z?
>
> merlin
>
But '12345678Z' is indeed >= '12345678' AND < '12345679'. Just like 'apple'
< 'apples' < 'apply' in a dictionary.

A quick test:
vitalink=# select * from ss;
id
-----------
12345678
12345678Z
12345679
(3 rows)

vitalink=# select * from ss WHERE id >= '12345678' AND id < '12345679';
id
-----------
12345678
12345678Z
(2 rows)

Sam

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Florent Guillaume 2012-10-17 04:38:01 Re: WebSphere Application Server support for postgres
Previous Message Chris Ruprecht 2012-10-17 00:43:00 Re: Have: Seq Scan - Want: Index Scan - what am I doing wrong?