Ограничение запроса перед объединением таблиц с использованием таблицы подзапросов для объединения - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь ускорить запрос, ограничивая размер первой таблицы перед тем, как присоединиться к ней.

Исходный код, который кажется слишком длинным для запуска

SELECT 
    f.store_id,
    f.promotion_sku,
    dt.calendar_month_end,
    SUM(redemption_voucher_count),
    SUM(redemption_voucher_value),
    SUM(redemption_customer_is_new),
    pt.promotion_super_type
FROM
    (((vouchers.redemptions f
    INNER JOIN retail.stores rs ON f.store_id = rs.store_id)
    INNER JOIN vouchers.promotions p ON p.promotion_sku = f.promotion_sku
        AND p.country_id = rs.country_id)
    INNER JOIN vouchers.promotion_types pt ON pt.promotion_type_id = p.promotion_type_id),
    retail_analysis.date_d dt
WHERE
    f.date_id >= 20181201
        AND f.date_id <= 20190131
        AND TRUE
        AND redemption_date = dt.date_full
        AND f.store_id IS NOT NULL
        AND f.promotion_sku IS NOT NULL
GROUP BY f.store_id , f.promotion_sku , dt.calendar_month_end , pt.promotion_super_type

Я пытался ограничить дату, прежде чем я присоединюсь к ниже, но я получаю vouchers.f таблицы не существует. Возможно ли то, что я делаю?

SELECT 
    f.store_id,
    f.promotion_sku,
    dt.calendar_month_end,
    SUM(redemption_voucher_count),
    SUM(redemption_voucher_value),
    SUM(redemption_customer_is_new),
    pt.promotion_super_type
FROM
    (SELECT * FROM vouchers.redemptions x WHERE x.date_id >= 20181201 AND  x.date_id <= 20190131) AS f,
    (((f INNER JOIN retail.stores rs ON f.store_id = rs.store_id
        INNER JOIN vouchers.promotions p ON p.promotion_sku = f.promotion_sku
        AND p.country_id = rs.country_id
        INNER JOIN vouchers.promotion_types pt ON pt.promotion_type_id = p.promotion_type_id))),
        retail_analysis.date_d dt
WHERE
        TRUE
        AND redemption_date = dt.date_full
        AND f.store_id IS NOT NULL
        AND f.promotion_sku IS NOT NULL
GROUP BY f.store_id , f.promotion_sku , dt.calendar_month_end , pt.promotion_super_type
...