Re: How to query and index for customer with lastname and city

From: "hubert depesz lubaczewski" <depesz(at)gmail(dot)com>
To: "Joost Kraaijeveld" <J(dot)Kraaijeveld(at)askesis(dot)nl>
Cc: Pgsql-Performance <pgsql-performance(at)postgresql(dot)org>
Subject: Re: How to query and index for customer with lastname and city
Date: 2006-03-04 13:49:44
Message-ID: 9e4684ce0603040549n44e71c29jab72a45f5c440f9@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

On 3/4/06, Joost Kraaijeveld <J(dot)Kraaijeveld(at)askesis(dot)nl> wrote:
> Below is what I actually have. Given the fact that it takes forever to get
> a result (> 6 seconds) , there must be something wrong with my solution or
> my expectation. Can anyone tell what I should do to make this query go
> faster ( or convince me to wait for the result ;-()?
> Explain analyze after a full alayse vacuum:
> Sort (cost=54710.68..54954.39 rows=97484 width=111) (actual
> time=7398.971..7680.405 rows=96041 loops=1)
> Sort Key: btrim(upper(customers.lastname)), btrim(upper(addresses.city))
> -> Hash Join (cost=14341.12..46632.73 rows=97484 width=111) (actual
> time=1068.862..5472.788 rows=96041 loops=1)
> Hash Cond: ("outer".contactaddress = "inner".objectid)
> -> Seq Scan on customers (cost=0.00..24094.01 rows=227197
> width=116) (actual time=0.018..1902.646 rows=223990 loops=1)
> Filter: (btrim(upper(lastname)) >= 'JANSEN'::text)
> -> Hash (cost=13944.94..13944.94 rows=158473 width=75) (actual
> time=1068.467..1068.467 rows=158003 loops=1)
> -> Bitmap Heap Scan on addresses (cost=1189.66..13944.94
> rows=158473 width=75) (actual time=71.259..530.986 rows=158003 loops=1)
> Recheck Cond: (btrim(upper(city)) >= 'NIJMEGEN'::text)
> -> Bitmap Index Scan on
> prototype_addresses_trim_upper_city (cost=0.00..1189.66
> rows=158473 width=0) (actual time=68.290..68.290 rows=158003 loops=1)
> Index Cond: (btrim(upper(city)) >=
> 'NIJMEGEN'::text)
> Total runtime: 7941.095 ms

explain clearly shows, that index is used for addresses scan, but it
is not so for users.
explain estimates that 227197 customers match the lastname criteria -
which looks awfuly high.
how many record do you have in the customers table?

i would try to create index test on customers(contactAddress,
trim(uppercase(lastname)));
or with other ordring of fields.

try this - create the index, make analyze of customers table, and
recheck explain.
then try the second index in the same manner.

maybe this could of some help...

depesz

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Joost Kraaijeveld 2006-03-04 14:18:23 Re: How to query and index for customer with lastname
Previous Message Joost Kraaijeveld 2006-03-04 09:58:03 How to query and index for customer with lastname and city