Используйте внутреннее соединение и добавьте индексы:
select count(*)
from purchases p join
purchase_items pi
on p.item_id = pi.id
where p.created_date >= '2017-06-01' and
p.created_date < '2017-07-01' and
p.cancellation_date is null and
p.pending = 0;
Индекс на purchases(pending, cancellation_date, created_date, item_id)
и purchase_items(id)
поможет в этом запросе.