UNION was better, but still 5 times as slow as either query done individually. set enable_seqscan=off didn't help at all - it was totally ignored Is there anything else I can do?
On Sun, Jul 19, 2009 at 7:47 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > Robert James <srobertja...@gmail.com> writes: > > Hi. I notice that when I do a WHERE x, Postgres uses an index, and when > I > > do WHERE y, it does so as well, but when I do WHERE x OR y, it > > doesn't. > > It can use indexes for OR conditions, but not for arbitrary OR > conditions... > > > select * from dict > > where > > word in (select substr('moon', 0, generate_series(3,length('moon')))) -- > > this is my X above > > OR word like 'moon%' -- this is my Y above > > ... and that one is pretty arbitrary. You might have some luck with > using a UNION instead, viz > > select * from dict where X > union all > select * from dict where Y > > regards, tom lane >