Pavel Stehule wrote: > > > > > > > > > > ok. I accept it. Can be some note there? Not this strange select. > > > > Well, with 8.3 having this be faster I am thinking we should wait to see > > if the hacks are needed. > > > > difference, on 10K lines (on small think table) > > postgres=# select * from test where i = any(array(select > (random()*10000)::int from generate_series(1,20))) limit 1; > i | v > -----+----- > 869 | 113 > (1 row) > > Time: 3,984 ms > > postgres=# select * from test order by random() limit 1; > i | v > ------+----- > 3687 | 293 > (1 row) > > Time: 21,978 ms > > 8.2 > postgres=# select * from test order by random() limit 1; > i | v > ------+----- > 4821 | 608 > (1 row) > > Time: 51,299 ms > > postgres=# select * from test where i = any(array(select > (random()*10000)::int from generate_series(1,20))) limit 1; > i | v > -----+----- > 762 | 254 > (1 row) > > Time: 4,530 ms > > Results: > > 8.3 "fast solution' is 6x faster > 8.2 'fast solution' is 11x faster .. it's minimum.
OK, how do we even explain this idea in the FAQ. It pulls 20 random values from 1 to 10000? That seems pretty hard to code to me. Where do you get the 10000 number from? How do you know you will hit a match in 20 tries? -- Bruce Momjian <[EMAIL PROTECTED]> http://momjian.us EnterpriseDB http://postgres.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + ---------------------------(end of broadcast)--------------------------- TIP 7: You can help support the PostgreSQL project by donating at http://www.postgresql.org/about/donate