SQL Practice Logo

SQLPractice Online

Window Functions Performance Optimization: Examples

Module: Window Functions

E-commerce Sales Performance Optimization

advanced

Optimize slow sales analytics query processing 10M+ orders with window functions

-- BEFORE: Unoptimized query (30+ seconds)

SELECT

order_id,

customer_id,

order_date,

total_amount,

-- Multiple window functions without proper indexing

ROW_NUMBER() OVER (

PARTITION BY customer_id

ORDER BY order_date DESC

) as order_sequence,

AVG(total_amount) OVER (

PARTITION BY EXTRACT(YEAR FROM order_date), EXTRACT(MONTH FROM order_date)

ORDER BY order_date

ROWS BETWEEN 6 PRECEDING AND CURRENT ROW

) as rolling_avg,

SUM(total_amount) OVER (

PARTITION BY customer_id

ORDER BY order_date

RANGE BETWEEN INTERVAL '30 days' PRECEDING AND CURRENT ROW

) as customer_30day_total

FROM orders

WHERE order_date >= '2023-01-01'

ORDER BY customer_id, order_date;

-- OPTIMIZATION STEP 1: Create strategic indexes

CREATE INDEX idx_orders_customer_date ON orders(customer_id, order_date);

CREATE INDEX idx_orders_date_amount ON orders(order_date, total_amount);

CREATE INDEX idx_orders_year_month ON orders(

EXTRACT(YEAR FROM order_date),

EXTRACT(MONTH FROM order_date),

order_date

);

-- OPTIMIZATION STEP 2: Rewrite with performance improvements

WITH optimized_base AS (

SELECT

order_id,

customer_id,