Parameter Sniffing — Complete Guide
Parameter Sniffing — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of SQL Server Tutorial on Toolliyo Academy.
On this page
SQL Server Tutorial · Lesson 47 of 100
Parameter Sniffing
SQL basics ✓ → Queries → Advanced
Queries · 2 — JOINs · ~6 min · SQL — Stored Procedures & Functions
What is this?
Parameter sniffing caches a plan based on the first parameter values. That plan may be great for some values and terrible for others.
Why should you care?
A proc filtered by rare CustomerId vs a huge customer can reuse the wrong plan and tank performance.
See it live — copy this example
Run in SQL Server Management Studio (SSMS) or Azure Data Studio.
USE DataVerse;
CREATE OR ALTER PROCEDURE dbo.usp_OrdersByCity
@City NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT OrderId, Amount
FROM dbo.Orders
WHERE City = @City;
-- Diagnose: OPTION (RECOMPILE) -- temporary
-- Or copy to local var / optimize for unknown carefully
END
GO
EXEC dbo.usp_OrdersByCity @City = N'Pune';
EXEC dbo.usp_OrdersByCity @City = N'Mumbai';
What happened?
- Both calls share a cached plan shape sniffed from the first execution.
- If data is skewed, consider RECOMPILE, OPTIMIZE FOR, or redesign — not random hints forever.
Practice next
- Create the proc and run for two cities.
- Inspect plans from the plan cache for that proc.
- Try OPTION (RECOMPILE) in lab and compare.
- Update stats and rerun both cities.
- Compare estimated rows for each city.
Remember
First parameters influence cached plans. Skewed data exposes sniffing pain. Fix with measured options, not folklore.
City proc uneven
DataVerse Mumbai has 100× Pune rows; sniffed plan hurts Pune.
Outcome: Team enables PSPO or targeted RECOMPILE on that proc.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!