RE: [GENERAL] Re: Index unused with OR?

Jackson, DeJuan <djackson@cpsgroup.com>

From: "Jackson, DeJuan" <djackson@cpsgroup.com>
To: Olaf Mittelstaedt <mstaedt@va-sigi.va.fh-ulm.de>, pgsql-general@postgreSQL.org
Date: 1998-05-20T14:45:45Z
Lists: pgsql-general
> > Unrelated to the question in hand - you complained about VACUUM not
> > properly updating the stats. It seems to me you should use VACUUM
> ANALYZE
> > for that to happen. Just vacuuming means elimination of old rows no
> longer
> > used.
> >
> > Herouth
> 
> Thanks for your hint, the statistics got updated now with VACUUM
> ANALYZE, but indexes aren't used anyway when combining indexed
> columns with OR in the WHERE part:
> 
> w=> vacuum;
> VACUUM
> w=> vacuum analyze;
> VACUUM
> w=> explain select * from p where (m=29000) or (m=30000);
> NOTICE:  QUERY PLAN:
> 
> Seq Scan on p  (cost=336.92 size=834 width=10)
> 
> EXPLAIN
> w=>
> 
> Kind regards,
> Olaf
> --
> Olaf Mittelstaedt - IuK - mittelstaedt@fh-ulm.de
> Fachhochschule Ulm  Prittwitzstr. 10   89075 Ulm
> Tel.: +49 (0)731-502-8220             Fax: -8270
> 
>  Tertium non datur.
> 
If the indexes are used when you do the select without the OR you could
use a UNION ALL to join the tables.  I don't know which would cost less,
the sequential scan or the union time.

select * from p where m=29000
union all
select * from p where m=30000;

Should give you the same results.