On Fri, Sep 12, 2008 at 10:52 AM, dan <[EMAIL PROTECTED]> wrote: > On Fri, 12 Sep 2008 10:24:58 +0530, Amit Saxena wrote: > > > The only issue with this approach is that two queries needs to be run > > for the same. > > > > Considering the tables containing 1 million (and more) rows, this two > > pass approach will not be good. > > > > What others say ? > > It's precisely because you can have so many rows that this 2-pass approach > is best. In the 1st query, where all your 'where' conditions are processed, > the database server does all the collecting of the rows ( well, primary > keys ) that you want in 1 go. Once it's done, that's it ... you only do it > once. Also because you're only fetching the primary keys and not the entire > recordset, it's actually quite fast to transfer the keyset from the DB > server to the client. Also your memory requirements on the DB server are > MUCH lower as the server only has to hold a list of primary keys ( numeric > ) in memory, instead of all the rest of the columns as well, which could > contain strings and other memory-hungry columns. I did extensive testing ( > MySQL, SQL Server, SQLite ) before going down this path, trust me ... > > Then you've got an array of indexes ( the keyset ) that you send to the DB > server ( ie in the where clause ), and it makes accessing all pages *very* > fast, as you're using the primary keys to fetch data. If you don't do it > like this, you're making the DB server reprocess your complicated where > clause each time. If you're got millions of records, this is incredibly CPU > & memory intensive for the DB server, and not feasible if you've got > multiple clients hitting the DB server. Also as noted in my previous post, > if you're not very careful with sorting, you'll can end up getting > duplicate records. > > Anyway, if you find a better way, I'd like to hear it :) > > Dan >
Thanks Dan for the detailed explanation :-). The benefits of the two-pass approach is now clear to me. Regards, Amit Saxena