Thread: Optimizer differences between 7.2 and 7.3

Optimizer differences between 7.2 and 7.3

From
Jeff Boes
Date:
Our production database is running under 7.2.4; our test database
running almost the same data is at 7.3.3.  One table has about 400,000
rows in each schema. A query against an indexed column uses an index
scan under 7.2.4, but a sequential scan under 7.3.3. A count of the
table in question shows that they have comparable numbers of matching
rows.

On 7.2.4:

select count(*) from articles;
 count
--------
 420213

select count(*) from articles
 where path_base like 'http://news.findlaw.com/hdocs%';
 count
-------
    38

(and it returns this nearly instantaneously)

explain select count(*) from articles
   where path_base like 'http://news.findlaw.com/hdocs%'

Aggregate  (cost=6.02..6.02 rows=1 width=0)
  ->  Index Scan using ix_articles_3 on articles  (cost=0.00..6.01
rows=1 width=0)

On 7.3.3:

select count(*) from articles;
 count
--------
 406319

select count(*) from articles
   where path_base like 'http://news.findlaw.com/hdocs%'
 count
-------
    23

(and it takes many seconds to return)

explain select count(*) from articles
   where path_base like 'http://news.findlaw.com/hdocs%'

 Aggregate  (cost=205946.65..205946.65 rows=1 width=0)
   ->  Seq Scan on articles  (cost=0.00..205946.65 rows=1 width=0)
         Filter: (path_base ~~ 'http://news.findlaw.com/hdocs%'::text)

I can't find any differences between the indexes (ix_articles_3 exists
in both schemas); the column statistics are set up the same (the
default); and the optimizer settings (costs in postgresql.conf) are the
same.

--
Jeff Boes                                      vox 269.226.9550 ext 24
Database Engineer                                     fax 269.349.9076
Nexcerpt, Inc.                                 http://www.nexcerpt.com
           ...Nexcerpt... Extend your Expertise


Re: Optimizer differences between 7.2 and 7.3

From
Richard Huxton
Date:
On Monday 07 Jul 2003 3:17 pm, Jeff Boes wrote:
> Our production database is running under 7.2.4; our test database
> running almost the same data is at 7.3.3.  One table has about 400,000
> rows in each schema. A query against an indexed column uses an index
> scan under 7.2.4, but a sequential scan under 7.3.3. A count of the
> table in question shows that they have comparable numbers of matching
> rows.
[snip[
> select count(*) from articles
>  where path_base like 'http://news.findlaw.com/hdocs%';
>  count
> -------
>     38
[snip]
> I can't find any differences between the indexes (ix_articles_3 exists
> in both schemas); the column statistics are set up the same (the
> default); and the optimizer settings (costs in postgresql.conf) are the
> same.

Check the locale the database was initdb'd to. You'll probably find 7.2.4 is
in the "C" locale whereas 7.3.3 isn't. The "like" comparison can only use
indexes in the "C" locale. I believe you might need to initdb again to fix
this.

--
  Richard Huxton

Re: Optimizer differences between 7.2 and 7.3

From
SZUCS Gábor
Date:
A bit OT:

do regex ops (~, ~*) use index scan in non-"C" locales? Is it worth to
convert LIKE to regex?

G.
------------------------------- cut here -------------------------------
----- Original Message -----
From: "Richard Huxton" <dev@archonet.com>
Sent: Monday, July 07, 2003 4:40 PM


Check the locale the database was initdb'd to. You'll probably find 7.2.4 is
in the "C" locale whereas 7.3.3 isn't. The "like" comparison can only use
indexes in the "C" locale. I believe you might need to initdb again to fix
this.

--
  Richard Huxton

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html


Re: Optimizer differences between 7.2 and 7.3

From
Tom Lane
Date:
=?ISO-8859-1?Q?SZUCS_G=E1bor?= <surrano@mailbox.hu> writes:
> do regex ops (~, ~*) use index scan in non-"C" locales? Is it worth to
> convert LIKE to regex?

The locale issues are the same either way.

            regards, tom lane