Unserstainding CTE (Common Table Expressions)
π Understanding CTE (Common Table Expression) in MySQLΒΆ
π§ What is a CTE?ΒΆ
A CTE (Common Table Expression) is a named temporary result set in SQL that you can reference within a SELECT
, INSERT
, UPDATE
, or DELETE
statement.
Introduced in MySQL 8.0, CTEs allow you to build more readable, modular, and maintainable SQL queries.
β Benefits of Using CTEsΒΆ
Benefit | Description |
---|---|
π Readability | Simplifies complex queries by breaking them into logical building blocks. |
π Reusability | Use the CTE result multiple times in the same query without repeating logic. |
π§Ή Recursion Support | Supports recursive queries (e.g., tree structures, hierarchies). |
β‘ Performance Gains | Can improve performance by reducing redundant subquery calculations. |
π§Ό Maintainability | Easier to update or debug parts of large queries. |
π Simple Use Case ExampleΒΆ
Scenario: You want to get the total sales per salesperson and also filter only those whose sales exceed the average.
𦳠Traditional Query (Without CTE)¢
SELECT salesperson_id, SUM(amount) AS total_sales
FROM sales
GROUP BY salesperson_id
HAVING SUM(amount) > (
SELECT AVG(total_sales)
FROM (
SELECT salesperson_id, SUM(amount) AS total_sales
FROM sales
GROUP BY salesperson_id
) AS subquery
);
π¨βπ» With CTE (Cleaner and More Efficient)ΒΆ
WITH sales_summary AS (
SELECT salesperson_id, SUM(amount) AS total_sales
FROM sales
GROUP BY salesperson_id
),
average_sales AS (
SELECT AVG(total_sales) AS avg_sales FROM sales_summary
)
SELECT s.salesperson_id, s.total_sales
FROM sales_summary s
JOIN average_sales a
WHERE s.total_sales > a.avg_sales;
π Performance and Speed EstimateΒΆ
Metric | Traditional Query | CTE-Based Query |
---|---|---|
π Query Clarity | Low π΅ | High π |
π° Maintainability | Harder | Easier |
βοΈ Execution Time | 1.0x (baseline) | ~xxx faster (varies with DB engine, indexing, complexity of query) |
π§ Cognitive Load | High | Lower |
π§ͺ Benchmarks show that CTEs can reduce processing time by up to at least 20β30% in cases where subqueries are repeated or when modularity helps the optimizer better understand the execution plan. In case of complex queries, performance gains have been achieved in comparison to 6 minutes (Traditional QUery) upto 6 seconds only (Using CTE)
π SummaryΒΆ
- β Use CTEs to make queries readable and modular
- π Can improve performance for complex logic
- π§ Great for working with recursive data or when logic reuse is required