Re: Bad plan when null is in an "in" list

From: Jaime Casanova <systemguards(at)gmail(dot)com>
To: Csaba Nagy <nagy(at)ecircle-ag(dot)com>
Cc: Postgres general mailing list <pgsql-general(at)postgresql(dot)org>
Subject: Re: Bad plan when null is in an "in" list
Date: 2005-07-27 20:26:58
Message-ID: c2d9e70e05072713266c1d3977@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 7/26/05, Csaba Nagy <nagy(at)ecircle-ag(dot)com> wrote:
> Hi all,
>
> Jumping in directly to the subject, this is what I get:
>
> explain SELECT bigint_col_1, bigint_col_2 FROM big_table WHERE
> bigint_col_2 in (12132131, null, null, null,
> null);
>
> QUERY PLAN
> -------------------------------------------------------------------
> Seq Scan on big_table (cost=0.00..2447201.85 rows=448 width=16)
> Filter: ((bigint_col_2 = 12132131::bigint) OR NULL::boolean)
> (2 rows)
>
>

this is because null values can't be indexed... or telling other way
the planner will never choose an index for comparing to null

maybe a partial index can be used?

> Compared to:
>
>
> explain SELECT bigint_col_1, bigint_col_2 FROM big_table WHERE
> bigint_col_2 in (12132131, 123781, 1297839032, 123667123);
>
> QUERY PLAN
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------
> Index Scan using dom_idx_member_bigint_col_2,
> dom_idx_member_bigint_col_2, dom_idx_member_bigint_col_2,
> dom_idx_member_bigint_col_2 on big_table (cost=0.00..6427.28 rows=1789
> width=16)
> Index Cond: ((bigint_col_2 = 12132131) OR (bigint_col_2 = 123781) OR
> (bigint_col_2 = 1297839032) OR (bigint_col_2 = 123667123))
> (2 rows)
>
>
> big_table has ~ 100 million rows.
>

there is no nulls here so the index can be used

>
> Considering that NULL::boolean is always false,
>

null::boolean is null not false. that is because null means 'unknown
value' not false nor true

template1=# select null::boolean;
bool
------

(1 fila)

--
regards,
Jaime Casanova
(DBA: DataBase Aniquilator ;)

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Brian Wong 2005-07-27 20:31:28 Re: DELETE with JOIN syntax
Previous Message Stephan Szabo 2005-07-27 20:14:13 Re: DELETE with JOIN syntax