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.