Некоторое время назад я опубликовал сообщение об оптимизации запроса в MySQL. С тех пор я перенес данные и запросы в PostgreSQL, но теперь у PostgreSQL та же проблема. Решение в MySQL состояло в том, чтобы заставить оптимизатор не оптимизировать, используя STRAIGHT_JOIN. PostgreSQL не предлагает такой опции.
Обновленное обновление
Я выделил часть запроса, которая решает проблему (d.month_ref_id = 1
):
select
d.*
from
daily d
join month_ref m on m.id = d.month_ref_id
join year_ref y on y.id = m.year_ref_id
where
m.category_id = '001' and
d.month_ref_id = 1
Однако я не могу жестко запрограммировать месячную ссылку на 1
. Запрос, который производит полное сканирование таблицы:
select
d.*
from
daily d
join month_ref m on m.id = d.month_ref_id
join year_ref y on y.id = m.year_ref_id
where
m.category_id = '001'
Индекс на daily.month_ref_id
:
CREATE INDEX daily_month_ref_idx
ON climate.daily
USING btree
(month_ref_id);
Почему запрос выполняет полное сканирование таблицы и что можно сделать, чтобы этого избежать?
Спасибо!