управление планом исполнения запроса
Привет, SadSpirit - объективно понимаю, что отвечать будешь ты
Не подскажешь ли вот о чем:
Есть партицированная таблица campaigns_recepients с кучей дочерних, вроде
campaigns_recepients_100 (CONSTRAINT cr100check CHECK (campaign_id = 100)) INHERITS (campaigns_recepients),
остальные таблицы обычные.
делаю запрос
подтаблиц campaigns_recepients много, а campaigns where status='running' - одна-две
смотрю Explain: сначала подключаются все 100 дочерних таблиц, а потом из этой кучи фильтруются данные.
Если сделать через под-запрос
AND cr.campaign_id in (select campaign_id from campaigns where status='running'::campaigns_statuses)
все то же самое.
А вот если сделать
запрос замечательно оптимизируется и подключаются только 3 нужные подтаблицы.
Не знаешь, нельзя его заставить выполнять запрос в нужном мне порядке, или надо разбить на 2 и писать константы?
Привет, SadSpirit - объективно понимаю, что отвечать будешь ты
Не подскажешь ли вот о чем:
Есть партицированная таблица campaigns_recepients с кучей дочерних, вроде
campaigns_recepients_100 (CONSTRAINT cr100check CHECK (campaign_id = 100)) INHERITS (campaigns_recepients),
остальные таблицы обычные.
делаю запрос
Код:
SELECT s.sender_id, count(s.capacity)
FROM senders s
LEFT JOIN campaigns_recepients cr ON cr.sender_id = s.sender_id
LEFT JOIN campaigns c on c.campaign_id=cr.campaign_id
WHERE s.status = 'active'::senders_statuses
AND c.status='running' group by s.sender_id
смотрю Explain: сначала подключаются все 100 дочерних таблиц, а потом из этой кучи фильтруются данные.
Если сделать через под-запрос
AND cr.campaign_id in (select campaign_id from campaigns where status='running'::campaigns_statuses)
все то же самое.
А вот если сделать
Код:
SELECT s.sender_id, s.capacity
FROM senders s
LEFT JOIN campaigns_recepients cr ON cr.sender_id = s.sender_id
WHERE s.status = 'active'::senders_statuses
AND c.status='running'
AND cr.campaign_id in (101,102,105)
Не знаешь, нельзя его заставить выполнять запрос в нужном мне порядке, или надо разбить на 2 и писать константы?