subscribers_reservation sr1
INNER JOIN subscriber sub1 ON sub1.id = sr1.subscriber_id
WHERE sr1.mailing_id = 1;
sr1.mailing_id - FK & Index
sub1.id - PK
sr1.subscriber_id - FK & index.
Данные были записаны в базу в таком порядке:
1) 30 миллионов записей в subscriber & 30 миллионов в subscribers_reservation, mailing_id=1
2) 20 миллионов записей в subscriber & 20 миллионов в subscribers_reservation, mailing_id=2
если запрашиваю по 1му - все быстро 126мс
по второму - висит и висит.
Merge Join (cost=33.05..15572997.36 rows=31268334 width=26)
Merge Cond: (sr1.subscriber_id = sub1.id)
-> Index Scan using subscribers_reservation_subscriber_id_index on subscribers_reservation sr1 (cost=0.56..1791047.56 rows=31268334 width=4)
Filter: (mailing_id = 1)
-> Index Scan using subscriber_pk on subscriber sub1 (cost=0.56..13749480.56 rows=50000000 width=30)
Merge Join (cost=32.53..15416289.03 rows=18731667 width=26)
Merge Cond: (sr1.subscriber_id = sub1.id)
-> Index Scan using subscribers_reservation_subscriber_id_index on subscribers_reservation sr1 (cost=0.56..1791047.56 rows=18731667 width=4)
Filter: (mailing_id = 2)
-> Index Scan using subscriber_pk on subscriber sub1 (cost=0.56..13749480.56 rows=50000000 width=30)
может просто инстанс не тянет нормально? posgre пишет данные в таблицу последовательно ведь? Ключи этот движок хранит отдельно от таблицы?
Это ведь не весь вывод explain analyze?
.
Обсуждают сегодня