From: | "Richard Broersma" <richard(dot)broersma(at)gmail(dot)com> |
---|---|
To: | "Colin Copeland" <copelco(at)caktusgroup(dot)com> |
Cc: | pgsql-performance(at)postgresql(dot)org, "team(at)caktusgroup(dot)com s" <team(at)caktusgroup(dot)com> |
Subject: | Re: query planner and scanning methods |
Date: | 2008-09-23 22:07:50 |
Message-ID: | 396486430809231507t46edf20fxab469bedbd78e8cc@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
On Tue, Sep 23, 2008 at 2:22 PM, Colin Copeland <copelco(at)caktusgroup(dot)com> 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
From | Date | Subject | |
---|---|---|---|
Next Message | Colin Copeland | 2008-09-23 22:25:17 | Re: query planner and scanning methods |
Previous Message | Colin Copeland | 2008-09-23 21:22:28 | query planner and scanning methods |