From: Bruno Wolff III <bruno@wolff.to>
To: Tobias Brox <tobias@nordicbet.com>
Cc: pgsql-performance@postgresql.org
Subject: Re: Index on a NULL-value
Date: Mon, 30 May 2005 22:16:53 -0500
Message-ID: <20050531031653.GA17723@wolff.to> (raw)
In-Reply-To: <20050531030207.GD26100@tobias.exoweb.net>
References: <20050531030207.GD26100@tobias.exoweb.net>
On Tue, May 31, 2005 at 11:02:07 +0800,
Tobias Brox <tobias@nordicbet.com> wrote:
> I read in the manual today:
>
> Indexes are not used for IS NULL clauses by default. The best way to use
> indexes in such cases is to create a partial index using an IS NULL
> predicate.
>
> This is from the documentation for PostgreSQL 8. I did not find anything
> equivalent in the 7.4.8-documentation.
>
> I wasn't aware of this until it became an issue :-) Well, so I follow the
> tip but in vain. Reduced and reproduced like this in PostgreSQL 7.4.7:
>
> test=# create table mock(a int, b int);
> CREATE TABLE
> test=# create index b_is_null on mock((b IS NULL));
> CREATE INDEX
> test=# insert into mock values (10,20);
> INSERT 70385040 1
> test=# insert into mock values (20,30);
> INSERT 70385041 1
> test=# insert into mock values (30, NULL);
> INSERT 70385042 1
> test=# set enable_seqscan=off;
> SET
> test=# explain select * from mock where b is NULL;
> QUERY PLAN
> --------------------------------------------------------------------
> Seq Scan on mock (cost=100000000.00..100000020.00 rows=6 width=8)
> Filter: (b IS NULL)
> (2 rows)
>
> vacuum analyze also didn't help to recognize the index ;-)
It isn't surprising that an index wasn't used since a sequential scan is
going to be faster in your test case.
If you want to test this out, you to want use realistically sized tables.
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: bruno@wolff.to, tobias@nordicbet.com
Subject: Re: Index on a NULL-value
In-Reply-To: <20050531031653.GA17723@wolff.to>
* 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