From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Итерирование по таблице в режиме "Больше чем" |
Date: | 2016-12-14 09:44:02 |
Message-ID: | 20161214094402.GD14462@vdsl.uvw.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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.090 rows=6 loops=1)
Index Cond: ((did > 2714) AND (id > 507))
Heap Fetches: 6
Все вроде так как и хочется, но смущает последующий sort.
Это из за MAX(id), но в индексе уже все поля расположены именно в том порядке,
который нужен.
Вопрос: можно ли переписать запрос так чтобы убрать сортировку, а
прийти к чистому прогону по индексу?
--
. ''`. Dmitry E. Oboukhov
: :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
From | Date | Subject | |
---|---|---|---|
Next Message | Oleksandr Shulgin | 2016-12-14 10:50:58 | Re: [pgsql-ru-general] Итерирование по таблице в режиме "Больше чем" |
Previous Message | Dmitry E. Oboukhov | 2016-10-08 09:45:40 | Re: DBGlass - Open-source кросс-платформенный GUI клиент |