180 lines
3.9 KiB
Markdown
Executable File
180 lines
3.9 KiB
Markdown
Executable File
---
|
||
note type:
|
||
- database
|
||
- sql
|
||
- note
|
||
date: 2026-07-03
|
||
done:
|
||
link: https://bertwagner.com/posts/introduction-to-sql-server-execution-plans/
|
||
---
|
||
## What is an Execution Plan?
|
||
|
||
- SQL Server is a **declarative language**:
|
||
- You specify _what_ data you want, not _how_ to retrieve it.
|
||
- An **execution plan** shows:
|
||
- How SQL Server decides to retrieve the data.
|
||
- The sequence of operations (joins, scans, seeks, etc.).
|
||
|
||
### Key Idea
|
||
|
||
- The **Query Optimizer**:
|
||
- Evaluates multiple possible ways to execute a query.
|
||
- Chooses a plan that is **“good enough”**, not necessarily the absolute fastest.
|
||
- Reason:
|
||
- Evaluating every possible plan would be too slow and impractical.
|
||
|
||
### When Problems Occur
|
||
|
||
- Poor performance happens when:
|
||
- The optimizer picks an inefficient plan.
|
||
- Causes may include:
|
||
- Inaccurate statistics
|
||
- Incorrect assumptions about data distribution
|
||
- Execution plans help diagnose these issues.
|
||
|
||
---
|
||
|
||
## Types of Execution Plan Views
|
||
|
||
### 1. Text-Based Execution Plan
|
||
|
||
To see an execution plan for your query, you can run `SET SHOWPLAN_ALL ON`. This will provide a text-based tree representation of the plan:
|
||
|
||
`SET SHOWPLAN_ALL ON GO --Query
|
||
`GO SET SHOWPLAN_ALL OFF GO`
|
||
|
||
![[Pasted image 20260703150027.png]]
|
||
|
||
### 2. Graphical Execution Plan (Preferred)
|
||
|
||
- Generated via:
|
||
- **“Display Estimated Execution Plan”** in SSMS
|
||
- Features:
|
||
- Visual flow of query execution
|
||
- Easier to interpret than text-based plans
|
||
![[Pasted image 20260703150047.png]]
|
||
#### XML View
|
||
|
||
- Access via:
|
||
- Right-click → “Show Execution Plan XML”
|
||
- Contains:
|
||
- Detailed metadata and properties not always visible graphically
|
||
|
||
---
|
||
|
||
## Estimated vs Actual Execution Plans
|
||
|
||
### Estimated Execution Plan
|
||
|
||
- Created **before execution**
|
||
- Based on:
|
||
- Table statistics
|
||
- Metadata
|
||
- Does **NOT include runtime data**
|
||
|
||
---
|
||
|
||
### Actual Execution Plan
|
||
|
||
- Created **after execution**
|
||
- Includes:
|
||
- Actual number of rows processed
|
||
- Number of executions
|
||
- Runtime metrics
|
||
|
||
### Key Difference
|
||
|
||
|Feature|Estimated Plan|Actual Plan|
|
||
|---|---|---|
|
||
|When generated|Before execution|After execution|
|
||
|Uses real data|No|Yes|
|
||
|Structure|Same|Same|
|
||
|Runtime metrics|No|Yes|
|
||
|
||
**Important Insight:**
|
||
|
||
- The plan structure is usually identical.
|
||
- Only the **runtime statistics differ**.
|
||
|
||
---
|
||
|
||
## Live Query Statistics (SQL Server 2016+)
|
||
|
||
### What It Does
|
||
|
||
- Shows execution progress in **real time**
|
||
- Combines:
|
||
- Estimated plan + live runtime data
|
||
|
||
### Benefits
|
||
|
||
- Helps identify **bottlenecks quickly**
|
||
- Useful for:
|
||
- Long-running queries
|
||
- Beginners learning execution plans
|
||
|
||
### Example Insight
|
||
|
||
- If a **Clustered Index Scan** takes most time:
|
||
- Focus optimisation efforts there.
|
||
|
||
---
|
||
|
||
## Historical Execution Plans
|
||
|
||
### 1. Plan Cache
|
||
|
||
- SQL Server stores plans for reuse.
|
||
- Access via DMV:
|
||
- `sys.dm_exec_query_plan`
|
||
|
||
#### Key Notes
|
||
|
||
- Contains:
|
||
- Cached (previously executed) query plans
|
||
- Limitations:
|
||
- Plans may be removed from cache
|
||
- Typically shows **estimated plans only**
|
||
|
||
---
|
||
|
||
### 2. Query Store
|
||
|
||
- Stores historical query performance data
|
||
- Requirements:
|
||
- Must be enabled on the database
|
||
|
||
#### Benefits
|
||
|
||
- Allows:
|
||
- Retrieval of past execution plans
|
||
- Query performance analysis over time
|
||
|
||
---
|
||
|
||
## Why Execution Plans Matter
|
||
|
||
- Provide visibility into:
|
||
- How SQL Server retrieves data
|
||
- Essential for:
|
||
- **Performance tuning**
|
||
- Identifying inefficient operations
|
||
- Diagnosing slow queries
|
||
|
||
---
|
||
|
||
## Summary
|
||
|
||
- Execution plans reveal **how SQL Server executes queries**.
|
||
- The optimizer selects a **“good enough” plan**, not always optimal.
|
||
- Main viewing options:
|
||
- Text plan
|
||
- Graphical plan (most useful)
|
||
- XML plan
|
||
- Types of plans:
|
||
- **Estimated** → Pre-execution
|
||
- **Actual** → Includes runtime data
|
||
- Advanced tools:
|
||
- **Live Query Statistics** → real-time insights
|
||
- **Plan Cache & Query Store** → historical analysis
|