Thread: slow queries

slow queries

From
Howie
Date:
ive been evaluating pgsql as a replacement for MySQL, which currently
handles all of a client's authentication needs for their websites.
however, some queries that have been blindingly fast under MySQL are
incredlbly slow under pgsql.

for instance:

---[ CUT ]---
SELECT
    doms.dom, types.batch, types.active, codes.code
FROM
    doms,types,codes,hosts
WHERE
        hosts.client=doms.client AND
        doms.client=types.client AND
        types.batch='FREECODE' AND
        types.type=codes.type AND
        hosts.hostname='somehostnamehere.com';
---[ CUT ]---

under MySQL, this query takes about 2-3 seconds.  under pgsql v6.3, this
query takes roughly 40 seconds to a minute.  system is a P133, Linux
kernel 2.0.33, 128m mem, EIDE based ( bah ) disks.  there is very little
going on while executing these queries since this is a development box.

there are keys/indexes on hosts.client (primary), doms.client (primary),
types.batch & types.client (unique index), and types.type (primary).  all
the 'client' columns are int4, types.batch is "char(8) not null".  the
pgsql schema and mysql schema are the same and the indexes/keys are the
same.

doms has about 80 rows as does hosts.  types has ~350 rows, codes has 157k
rows ( a "select count(*) from codes" takes about 3 seconds to return;
MySQL returns _immediately_ ).

am i missing something or is pgsql really that much slower ?  if you need
the table layout and some sample data i can supply that...

---
Howie <caffeine@toodarkpark.org>   URL: http://www.toodarkpark.org
[[NSNotificationCenter defaultCenter] addObserver:systemAdministrator
  selector:@selector(disableUserAccount:) name:@"UserIsWhining" object:aLuser];






Re: [GENERAL] slow queries

From
David Hartwig
Date:
The postgres query sounds slower than I would expect.   Have you run a "VACUUM
ANALYZE"?   This is needed initially, and occasionally, to compute statistics for
optimal query planning.   VACUUM also recovers disk space.   "man vacuum"

You may want to prefix your SELECT statement with EXPLAIN to display the query
plan.    Try this before and after the VACUUM.

As far as the count(*) goes,   I am not familiar with MySQL's implementation, but
postgres does a sequential scan on a count(*) without a WHERE condition.    Some
SQL engines have this value saved off for just this kind of query.    This is just
one of the many performance/spaces tradeoffs.  Postgres, you will find, has many
other redeeming features.

Howie wrote:

> ive been evaluating pgsql as a replacement for MySQL, which currently
> handles all of a client's authentication needs for their websites.
> however, some queries that have been blindingly fast under MySQL are
> incredlbly slow under pgsql.
>
> for instance:
>
> ---[ CUT ]---
> SELECT
>         doms.dom, types.batch, types.active, codes.code
> FROM
>         doms,types,codes,hosts
> WHERE
>         hosts.client=doms.client AND
>         doms.client=types.client AND
>         types.batch='FREECODE' AND
>         types.type=codes.type AND
>         hosts.hostname='somehostnamehere.com';
> ---[ CUT ]---
>
> under MySQL, this query takes about 2-3 seconds.  under pgsql v6.3, this
> query takes roughly 40 seconds to a minute.  system is a P133, Linux
> kernel 2.0.33, 128m mem, EIDE based ( bah ) disks.  there is very little
> going on while executing these queries since this is a development box.
>
> there are keys/indexes on hosts.client (primary), doms.client (primary),
> types.batch & types.client (unique index), and types.type (primary).  all
> the 'client' columns are int4, types.batch is "char(8) not null".  the
> pgsql schema and mysql schema are the same and the indexes/keys are the
> same.
>
> doms has about 80 rows as does hosts.  types has ~350 rows, codes has 157k
> rows ( a "select count(*) from codes" takes about 3 seconds to return;
> MySQL returns _immediately_ ).
>
> am i missing something or is pgsql really that much slower ?  if you need
> the table layout and some sample data i can supply that...
>
> ---
> Howie <caffeine@toodarkpark.org>   URL: http://www.toodarkpark.org
> [[NSNotificationCenter defaultCenter] addObserver:systemAdministrator
>   selector:@selector(disableUserAccount:) name:@"UserIsWhining" object:aLuser];




Re: [GENERAL] slow queries

From
Thomas Good
Date:
On Thu, 17 Sep 1998, Howie wrote:

Howie,

I have a query that looks up a patient's placement (which ward)
in one table and then looks up diagnostic and demographic data
in another...takes 53 seconds.  Ouch.

However, when I use table aliasing...the query output is on the
screen *before* I submit the query.  ;-)

I'll send syntax, if you like.

Tom

> ive been evaluating pgsql as a replacement for MySQL, which currently
> handles all of a client's authentication needs for their websites.
> however, some queries that have been blindingly fast under MySQL are
> incredlbly slow under pgsql.
>
> for instance:
>
> ---[ CUT ]---
> SELECT
>     doms.dom, types.batch, types.active, codes.code
> FROM
>     doms,types,codes,hosts
> WHERE
>         hosts.client=doms.client AND
>         doms.client=types.client AND
>         types.batch='FREECODE' AND
>         types.type=codes.type AND
>         hosts.hostname='somehostnamehere.com';
> ---[ CUT ]---
>
> under MySQL, this query takes about 2-3 seconds.  under pgsql v6.3, this
> query takes roughly 40 seconds to a minute.  system is a P133, Linux
> kernel 2.0.33, 128m mem, EIDE based ( bah ) disks.  there is very little
> going on while executing these queries since this is a development box.
>
> there are keys/indexes on hosts.client (primary), doms.client (primary),
> types.batch & types.client (unique index), and types.type (primary).  all
> the 'client' columns are int4, types.batch is "char(8) not null".  the
> pgsql schema and mysql schema are the same and the indexes/keys are the
> same.
>
> doms has about 80 rows as does hosts.  types has ~350 rows, codes has 157k
> rows ( a "select count(*) from codes" takes about 3 seconds to return;
> MySQL returns _immediately_ ).
>
> am i missing something or is pgsql really that much slower ?  if you need
> the table layout and some sample data i can supply that...
>
> ---
> Howie <caffeine@toodarkpark.org>   URL: http://www.toodarkpark.org
> [[NSNotificationCenter defaultCenter] addObserver:systemAdministrator
>   selector:@selector(disableUserAccount:) name:@"UserIsWhining" object:aLuser];
>
>
>
>
>
>


 Cheers,
 Tom

    ----------- Sisters of Charity Medical Center ----------
                    Department of Psychiatry
                              ----
 Thomas Good, System Administrator            <tomg@q8.nrnet.org>
 North Richmond CMHC/Residential Services     Phone: 718-354-5528
 75 Vanderbilt Ave, Quarters 8                Fax:   718-354-5056
 Staten Island, NY   10304                    www.panix.com/~ugd
                              ----
 Powered by PostgreSQL 6.3.2 / Perl 5.004 / DBI-0.91::DBD-PG-0.69


Re: [GENERAL] slow queries

From
David Hartwig
Date:

Thomas Good wrote:

> On Thu, 17 Sep 1998, Howie wrote:
>
> Howie,
>
> I have a query that looks up a patient's placement (which ward)
> in one table and then looks up diagnostic and demographic data
> in another...takes 53 seconds.  Ouch.
>
> However, when I use table aliasing...the query output is on the
> screen *before* I submit the query.  ;-)
>
> I'll send syntax, if you like.

I would like to see it!   I was not aware that table aliasing could have any impact
on performance.


Re: [GENERAL] slow queries

From
"Oliver Elphick"
Date:
Thomas Good wrote:
  >I have a query that looks up a patient's placement (which ward)
  >in one table and then looks up diagnostic and demographic data
  >in another...takes 53 seconds.  Ouch.
  >
  >However, when I use table aliasing...the query output is on the
  >screen *before* I submit the query.  ;-)
  >
  >I'll send syntax, if you like.

Please do, to the list.  I have never heard of 'table aliasing' and would
like to know more.

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver
               PGP key from public servers; key ID 32B8FAA1
                 ========================================
     "Give, and it shall be given unto you; good measure,
      pressed down, and shaken together, and running over,
      shall men pour into your lap. For by your standard of
      measure it will be measured to in return."
                                           Luke 6:38



Re: [GENERAL] slow queries

From
Thomas Good
Date:
On Fri, 18 Sep 1998, David Hartwig wrote:

> I would like to see it!   I was not aware that table aliasing could
> have any impact on performance.

Hello Oliver and David,

I was a bit amazed myself.  Federico Passaro, on the SQL list,
helped me out some time ago when a query was failing.
His code worked so well that I filed it away for a rainy day...
this week I decided to try it and see if it helped hasten my
slooooowest query.  It did.

Here is my code (hope it's coherent, I didn't name the tables!):

#!/bin/sh
tput clear
echo -ne "Enter Unit Code: "
read unit
psql millie <<EOF | less
SELECT unit_lname FROM crund1 WHERE unit_id = ${unit};
SELECT S.tr_id, T.i_date, S.client_lname, S.client_fname, S.eth_nic
FROM svcrd1 S, trhist T
WHERE S.client_id = T.pt_id
AND T.unit_id = ${unit}
AND T.o_date IS NULL
ORDER BY S.client_lname;
EOF

Cheers,
Tom

    ---------- Sisters of Charity Medical Center ----------
                   Department of Psychiatry
                            ----
    Thomas Good                          <tomg@q8.nrnet.org>
    Coordinator, North Richmond C.M.H.C. Information Systems
    75 Vanderbilt Ave, Quarters 8        Phone: 718-354-5528
    Staten Island, NY   10304            Fax:   718-354-5056


Re: [GENERAL] slow queries

From
Howie
Date:
On Fri, 18 Sep 1998, Thomas Good wrote:

> On Fri, 18 Sep 1998, David Hartwig wrote:
>
> > I would like to see it!   I was not aware that table aliasing could
> > have any impact on performance.
>
> [SNIP]
> I was a bit amazed myself.  Federico Passaro, on the SQL list,
> helped me out some time ago when a query was failing.
> His code worked so well that I filed it away for a rainy day...
> this week I decided to try it and see if it helped hasten my
> slooooowest query.  It did.
> [SNIP]

seems that by creating a view ( with the query i mentioned before ), my
queries were sped up by roughly 10 seconds... odd odd odd.

---
Howie <caffeine@toodarkpark.org>   URL: http://www.toodarkpark.org
[[NSNotificationCenter defaultCenter] addObserver:systemAdministrator
  selector:@selector(disableUserAccount:) name:@"UserIsWhining" object:aLuser];