Итерирование по таблице в режиме "Больше чем"

Поиск
Список
Период
Сортировка
От Dmitry E. Oboukhov
Тема Итерирование по таблице в режиме "Больше чем"
Дата
Msg-id 20161214094402.GD14462@vdsl.uvw.ru
обсуждение исходный текст
Список pgsql-ru-general
есть таблица

"id" SERIAL
"did" INTEGER REFERENCES (NOT UNIQUE)

Таблица очень большая.

Нужен скрипт который обойдет данную таблицу по уникальным did, причем
желательно в порядке по возрастанию ID.
При этом желательно использовать индекс

Взял и просто построил индекс BTREE("did", "id")

Далее запрашиваю кусочек таким образом:

    SELECT
        MAX("id")      AS "id",
        "did"          AS "did"
    FROM
        "table"
    WHERE
            "id" > $id
        AND "did" > $did
    GROUP BY
        "did"
    ORDER BY
        "did" ASC,
        "id" ASC
    LIMIT
        10

Получаю пачку, обрабатываю ее и следующему запросу передаю
$id = max($id) и $did = max($did)

EXPLAIN показывает что индекс используется:

 Limit  (cost=8.32..8.32 rows=1 width=8) (actual time=0.113..0.114 rows=6 loops=1)
   ->  Sort  (cost=8.32..8.32 rows=1 width=8) (actual time=0.113..0.113 rows=6 loops=1)
         Sort Key: did, (max(id))
         Sort Method: quicksort  Memory: 25kB
         ->  GroupAggregate  (cost=0.27..8.31 rows=1 width=8) (actual time=0.092..0.102 rows=6 loops=1)
               Group Key: did
               ->  Index Only Scan using test_index on table  (cost=0.27..8.29 rows=1 width=8) (actual
time=0.068..0.090rows=6 loops=1) 
                     Index Cond: ((did > 2714) AND (id > 507))
                     Heap Fetches: 6


Все вроде так как и хочется, но смущает последующий sort.
Это из за MAX(id), но в индексе уже все поля расположены именно в том порядке,
который нужен.

Вопрос: можно ли переписать запрос так чтобы убрать сортировку, а
прийти к чистому прогону по индексу?
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

В списке pgsql-ru-general по дате отправления:

Предыдущее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Re: DBGlass - Open-source кросс-платформенный GUI клиент
Следующее
От: Oleksandr Shulgin
Дата:
Сообщение: Re: [pgsql-ru-general] Итерирование по таблице в режиме "Больше чем"