1. A method comprising: reading, from memory, a first plurality of rows of a first table in an order of page addresses of pages in the memory that comprise the first plurality of rows as is specified by an active page address data structure for the first table, wherein none of a second plurality of rows were stored in the memory at a time of the reading of the first plurality of rows; storing first selected rows from the first plurality of rows that meet a query predicate into a result set; after the reading the first plurality of rows from the memory, reading, from a secondary storage, the second plurality of rows of the first table in an ascending order of row identifiers of the second plurality of the rows from the beginning to the end of the first table, wherein the first plurality of rows are different from the second plurality of rows; storing second selected rows from the second plurality of rows that meet the query predicate into the result set; performing the reading, from the memory, the first plurality of rows of the first table in the order of the page addresses and the reading, from the secondary storage, the second plurality of rows of the first table in the ascending order of row identifiers after the reading of the first plurality of rows when a percentage of data in the first table that is stored in the memory is greater than a memory threshold; and reading the first plurality of rows and the second plurality of rows in an ascending order of row identifiers of the first plurality or rows and the second plurality of rows when the percentage of the data in the first table that is stored in the memory is not greater than a memory threshold.