Ive очень странная проблема, когда я выполнить запрос, как показано ниже:странного исполнения Postgres запрос
with ap as (
SELECT id from adress limit 1000)
)
SELECT distinct house.id, house.date
FROM house
WHERE house.adressid in (select id from ap)
LIMIT 9999
Я Г.Е. resulkts в пределах 100 мса
Но когда я изменить лимит до 10, то Im становившегося результат после 20 лет
with ap as (
SELECT id from adress limit 1000)
)
SELECT distinct house.id, house.date
FROM house
WHERE house.adressid in (select id from ap)
LIMIT 10
конечно, есть индекс adressid
CREATE INDEX house_idx
ON house
USING btree
(adressid COLLATE pg_catalog."default");
В доме есть 9 миллионов рядов.
Есть ли у кого-нибудь идеи hoiw, я могу попытаться улучшить производительность. Ive сводит проблему к этому очень простой, но в действительности структура является гораздо более сложным вот почему я не предоставить вам таблицы создать и запрос планы ...
Я хотел бы начать с помощью EXPLAIN ANALYZE, чтобы узнать, как на самом деле PostgreSQL обработки двух запросов. – Gary
Возможно, вы упростили запрос. Postgres (если только он не имеет очень необычной оптимизации) должен выполнять одну и ту же работу для обоих запросов - он должен сгенерировать весь список для 'select different' до применения внешнего' limit'. Возможно, что-то еще происходит. –
На самом деле это единственное, что меняет – Snorlax