Thread

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

    Jackson, DeJuan <djackson@cpsgroup.com> — 1998-05-20T14:45:45Z

    > > 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.