CTE Performance Optimization: Functions
Module: Subqueries & CTEs
**Check Execution Plan:**
```sql
EXPLAIN ANALYZE
WITH cte AS (
SELECT columns
FROM table
WHERE conditions
)
SELECT * FROM cte;
```
**Force Materialization:**
```sql
-- PostgreSQL
WITH cte AS MATERIALIZED (
SELECT expensive_query
)
SELECT * FROM cte;
-- SQL Server (no explicit hint, check for Table Spool)
WITH cte AS (
SELECT expensive_query
)
SELECT * FROM cte;
```
**Filter Early:**
```sql
-- Bad: Filter after CTE
WITH all_data AS (
SELECT * FROM large_table
)
SELECT * FROM all_data WHERE date > '2024-01-01';
-- Good: Filter in CTE
WITH filtered_data AS (
SELECT * FROM large_table
WHERE date > '2024-01-01'
)
SELECT * FROM filtered_data;
```
**Create Indexes:**
```sql
-- Index columns used in WHERE, JOIN, ORDER BY