Проблема
В следующем запросе plr_stations
вызывается дважды:
- один раз, чтобы ограничить предложение
WHERE
;и - один раз для подсчета количества возвращаемых результатов.
Код напоминает:
SELECT
m.*,
s.*,
(
SELECT
count(1)
FROM
climate.plr_stations('48.5146','-123.4447')
) AS count_stations
FROM
climate.station s,
climate.measurement m,
(
SELECT
id
FROM
climate.plr_stations('48.5146','-123.4447')
) stations
WHERE
s.applicable AND
s.id = stations.id AND
m.station_id = s.id AND ...
Результаты этого запроса затем агрегируются по датеquery.
Решения
Заполните временную таблицу или переменную массива результатами вызова функции.
Update # 1
ФункцияВызов случайным образом выберет выборку станций, если внутри сферического многоугольника определено слишком много станций, определенных параметрами для вызова функции.
Update # 2
Агрегирование запроса даты, которое запускает полный запросвыглядит следующим образом:
SELECT
extract(YEAR FROM m.taken) AS year_taken,
avg(m.amount) AS amount,
count(m.amount) AS count_measurements,
md.count_stations,
min(md.elevation) AS elevation_min,
max(md.elevation) AS elevation_max
FROM
climate.measurement m, (
SELECT
m.*,
s.*, ...
Вопрос
Как еще можно устранить избыточный вызов?
Спасибо.