On Tue, Sep 23, 2008 at 2:22 PM, Colin Copeland <copelco@xxxxxxxxxxxxxxx> wrote: > dimension=# EXPLAIN ANALYZE > SELECT DISTINCT ON ("dimension_book"."call") > "dimension_book"."title" > FROM "dimension_book" > INNER JOIN "dimension_library_books" > ON ("dimension_book"."id" = "dimension_library_books"."book_id") > WHERE ("dimension_book"."call" >= 'PA0000' > AND "dimension_library_books"."library_id" IN (12,15,20)) > ORDER BY "dimension_book"."call" ASC > LIMIT 10 OFFSET 100; Ya offset works by scanning over the first 100 rows. When the offsets get big, it become a performance looser. You can guarantee a faster index scan if you recall the last 10th value from the previous query. Then remove the offset predicate and replace it with the following WHERE clause: WHERE ... AND dimension_book.call > _last_queried_10th_row-dimension_book_call, ... LIMIT 10; -- Regards, Richard Broersma Jr. Visit the Los Angeles PostgreSQL Users Group (LAPUG) http://pugs.postgresql.org/lapug