On Tue, Aug 07, 2001 at 04:33:48PM -0700, Michael Peppler wrote:
> I've done that, and it works just fine, provided you have a primary
> key that lends itself to this sort of thing...

Got any code you can share?

Tim.

> Michael
> 
> Tim Bunce writes:
>  > You could start by just selecting and caching the ROWIDs.
>  > 
>  > A more sophisticated, and portable, approach is to query the primary
>  > key columns and then fetch the first page's worth and record the
>  > highest pk value.  For the next page start at the previous pk value.
>  > All queries have an order by that matches the pk columns. The DB can
>  > read the rows efficiently through the index.
>  > 
>  > I'm obviously being a little simplistic here - there are many design
>  > and implementation issues to consider. It isnt easy to do well. And,
>  > for the record, I've never had the need so I'm just spouting unproven
>  > theory :)
>  > 
>  > Tim.
>  > 
>  > On Tue, Aug 07, 2001 at 08:36:02AM -0400, Stan Brown wrote:
>  > > I'm writing a generic table editor in perltk for some operations types to
>  > > use.
>  > > 
>  > > It's going pretty well, but I have run inot a problem that I can't figure
>  > > out how to solve. I'm runing against Oracle 7 on HP-UX, and what I have
>  > > works pretty well for small (< 10,000) row tables. But it does not work
>  > > (for reasons that will become obvious in a moment) on table with, say, a
>  > > million rows.
>  > > 
>  > > Here is waht I starte out with:
>  > > 
>  > > $MW->Busy;
>  > > while ( @extracted_data = $sths->fetchrow_array ) {
>  > >  my $i = 0;
>  > >  foreach $col (keys  %cols)
>  > >  {
>  > >          # print "Got record for column $col record
>  > >          $record_qty\n";
>  > >          $records[$record_qty]{$col} =
>  > >          $extracted_data[$i];
>  > >          ++$i;
>  > >  }
>  > >  ++$record_qty;
>  > >  }
>  > >  $MW->Unbusy();
>  > > 
>  > >  Then the operator can move around and siplay/edit each record by setting
>  > >  the fileds displayed to the appropriate row of the @records array.
>  > > 
>  > >  The problem with this is obvious, on large data sets. I am making a compy
>  > >  of the data, and I run out of virtual memory. So I decided to change to 
>  > >  fetchall_arrayref, however, I just ran a test with this, and even though
>  > >  it did manage to aquire all the rows of data for 750,000 row table, the
>  > >  resident set size of the perl task exceded 1GB. It als took several
>  > >  minutes to get all the records.
>  > > 
>  > >  Presently the only way that I have provided, to move around in teh fetch's
>  > >  result record set is "next", and previous" buttons. I probably need to add
>  > >  the ability to go directly to record n of the result record set also.
>  > > 
>  > >  So, here is teh question. Givne that there is (as far as I know) now way
>  > >  of getting just the desired record from the result set, how can I rework
>  > >  this to be:
>  > > 
>  > >  1. Faster
>  > >  2. More robust (IE not liekly to exced system memory resources).
>  > > 
>  > >  Sugestions?
>  > > 
>  > > 
>  > > 
>  > > -- 
>  > > Stan Brown     [EMAIL PROTECTED]                                    843-745-3154
>  > > Charleston SC.
>  > > -- 
>  > > Windows 98: n.
>  > >  useless extension to a minor patch release for 32-bit extensions and
>  > >  a graphical shell for a 16-bit patch to an 8-bit operating system
>  > >  originally coded for a 4-bit microprocessor, written by a 2-bit 
>  > >  company that can't stand for 1 bit of competition.
>  > > -
>  > > (c) 2000 Stan Brown.  Redistribution via the Microsoft Network is prohibited.
> 
> -- 
> Michael Peppler - Data Migrations Inc. - http://www.mbay.net/~mpeppler
> [EMAIL PROTECTED] - [EMAIL PROTECTED]
> International Sybase User Group - http://www.isug.com

Reply via email to