demo-Examples-v4-0002-View_with_join_Examples.sql.txt

application/octet-stream

Filename: demo-Examples-v4-0002-View_with_join_Examples.sql.txt
Type: application/octet-stream
Part: 0
Message: Re: GROUP BY ROLLUP queries on views trigger full table scans (index usage not optimized)
-- Add a material table with join and create the view "materials2".
CREATE TABLE "materials2" ("material_id" varchar(20),"material" varchar(30));

CREATE OR REPLACE VIEW v_invoices2 AS
SELECT 
    invoice_id,
    document_date,
    material_code,
	materials2.material,
    quantity,
    amount,
    approval_status,
    data_control_scope,
    sales_org,
    valuation_order_flag,
    created_at
FROM invoices
LEFT JOIN materials2 ON invoices.material_code = materials2.material_id



-- Option 2: Uses a view and uses GROUP BY ROLLUP.
EXPLAIN ANALYZE
SELECT
    COALESCE(v_invoices.document_date::TEXT, 'Total') AS "document_date",
    COALESCE(SUM(v_invoices.amount), 0) AS "amount"
FROM v_invoices
WHERE
    (v_invoices.document_date BETWEEN '2024-06-01' AND '2024-12-31' 
     OR v_invoices.document_date BETWEEN '2025-01-01' AND '2025-12-09')
    AND v_invoices.data_control_scope = 'DD_OG'
    AND v_invoices.valuation_order_flag = '1'
    AND v_invoices.approval_status IN ('y')
    AND v_invoices.sales_org IN ('DF01', 'DG01')
GROUP BY ROLLUP (v_invoices.document_date);


-- Option 4: The view with join is used and employs GROUP BY ROLLUP.
EXPLAIN ANALYZE
SELECT
    COALESCE(v_invoices2.document_date::TEXT, 'Total') AS "document_date",
    COALESCE(SUM(v_invoices2.amount), 0) AS "amount"
FROM v_invoices2
WHERE
    (v_invoices2.document_date BETWEEN '2024-06-01' AND '2024-12-31' 
     OR v_invoices2.document_date BETWEEN '2025-01-01' AND '2025-12-09')
    AND v_invoices2.data_control_scope = 'DD_OG'
    AND v_invoices2.valuation_order_flag = '1'
    AND v_invoices2.approval_status IN ('y')
    AND v_invoices2.sales_org IN ('DF01', 'DG01')
GROUP BY ROLLUP (v_invoices2.document_date);