У меня есть внешняя таблица (с использованием postgresql_fdw
оболочки внешних данных), и мне нужно найти максимальный идентификатор для копирования всех записей. Когда я запускаю SELECT MAX(id) FROM foreign_table
, похоже, что он не использует index:
Aggregate (cost=205.06..205.07 rows=1 width=4) (actual time=13999.535..13999.535 rows=1 loops=1)
-> Foreign Scan on foreign_table (cost=100.00..197.75 rows=2925 width=4) (actual time=1.288..13632.768 rows=1849305 loops=1)
Planning time: 0.087 ms
Execution time: 14019.179 ms
Когда я запускаю тот же запрос (SELECT MAX(id) FROM table
) в «реальной» таблице, он использует индекс:
Result (cost=0.45..0.46 rows=1 width=0) (actual time=0.164..0.165 rows=1 loops=1)
InitPlan 1 (returns $0)
-> Limit (cost=0.43..0.45 rows=1 width=4) (actual time=0.152..0.153 rows=1 loops=1)
-> Index Only Scan Backward using table_pkey on table (cost=0.43..46102.55 rows=1821907 width=4) (actual time=0.143..0.143 rows=1 loops=1)
Index Cond: (id IS NOT NULL)
Heap Fetches: 1
Total runtime: 0.270 ms
База данных с внешней таблицей имеет версию 9.4.4, а база данных с «реальной» таблицей - версией 9.3.9.
Есть ли способ использовать индекс в первом запросе?