Получил вот этот запрос:
EXPLAIN
SELECT persons.id AS id, ppm.first
FROM myschema.persons
INNER JOIN myotherschema.ppm ON persons.key = ppm.pid
WHERE persons.id = 279759;
Столбец ppm.pid
является первичным ключом И в индексе:
CREATE INDEX ppm_pkey_index
ON myotherschema.ppm
USING btree
(pid);
Итак, вот ОБЪЯСНЕНИЕ:
Hash Join (cost=8.31..3105.40 rows=306 width=23)
Hash Cond: (textin(int4out(ppm.pid)) = persons.key)
-> Seq Scan on ppm (cost=0.00..2711.33 rows=61233 width=23)
-> Hash (cost=8.29..8.29 rows=1 width=12)
-> Index Scan using pskey on persons (cost=0.00..8.29 rows=1 width=12)
Index Cond: (id = 279759)
Кажется, что он вообще не использует ppm_pkey_index
: он все еще сканирует 61 233 строки. Почему это? Я неправильно понимаю? Следствие: первичные ключи не индексируются автоматически в postgresql? Мой индекс тогда избыточен?