Filtered Index — Complete Guide
Filtered Index — 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 35 of 100
Filtered Index
SQL basics ✓ → Queries → Advanced
Queries · 2 — JOINs · ~6 min · SQL — Indexing & Performance
What is this?
A filtered index uses a WHERE clause on the index definition so it only stores a subset of rows — e.g. open orders or non-null emails.
Why should you care?
If 95% of rows are Closed, an index on open rows is smaller and faster for the queue that only cares about Open.
See it live — copy this example
Run in SQL Server Management Studio (SSMS) or Azure Data Studio.
USE DataVerse;
IF COL_LENGTH('dbo.Orders', 'Status') IS NULL
ALTER TABLE dbo.Orders ADD Status VARCHAR(10) NOT NULL CONSTRAINT DF_Orders_Status DEFAULT ('Open');
CREATE NONCLUSTERED INDEX IX_Orders_Open_City
ON dbo.Orders (City, OrderId)
WHERE Status = 'Open';
SELECT OrderId, City
FROM dbo.Orders
WHERE Status = 'Open' AND City = N'Pune';
What happened?
- The index leaf holds only Open rows.
- The query’s Status = 'Open' predicate lets the optimizer use the filtered index.
Practice next
- Add Status if needed and create the filtered index.
- Run the Open + City query with actual plan.
- Query Status = 'Closed' and note it cannot use this index.
- Filter WHERE Email IS NOT NULL on Customers.
- Index only InStock = 1 products.
Remember
Filtered indexes store a row subset. Great for hot status values. Query predicates must align.
Open order queue
Fulfillment only works DataVerse Status = Open.
Outcome: Tiny filtered index beats a fat full-table index.
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!