SQL Practice Logo

SQLPractice Online

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