Mastering Index Tuning

You need to speed up a SQL Server app, but you only want to make index changes. You don’t want to buy hardware, change SQL Server, or change the code. Good news – I’ll teach you how in 3 days of learning and fun. Join me, Brent Ozar, as I explain how to make your SQL Server apps go faster just by tuning the indexes.
Labs & lectures include:
- How to deduplicate & prune an existing database with too many indexes
- How to use sp_BlitzIndex to design the right nonclustered indexes for specific queries
- How to assess a large workload and prioritize which tables/indexes to work on first
- How to convert badly-performing recommended indexes into blazing-fast hand-tuned indexes
- How to know when filtered indexes, indexed views, and indexed computed columns will pay off
- How to measure whether your index changes made things better, or worse
Your Progress So Far in This Class
This is driven by the mark-as-complete buttons in each module of the class. (Let’s be honest: you’re probably just going to mark them as complete because you’re that kind of student. I feel you.)
Recent Updates & Changes
2025-11-21:
- Using an Index’s Second Column with Skip Scans – added this new module.
2025-11-15:
- Starting with the D.E. – re-recorded with updated guidance about my new 10 & 5 guideline, and more thoughts about when it’s okay to have more indexes per table.
- Blocking – added a new video to demo SQL Server 2025’s new Optimized Locking.
2025-11-11:
- Indexing for JSON Queries – added this new module explaining SQL Server 2025’s new JSON indexes. sp_BlitzIndex only has preliminary support for these indexes right now, and I’ll re-record this module once I’ve got full support coded in there.
Introductions and Setting Up Lab 1
Click on the modules on the right side of the page to keep moving through the class.
- 0.1 Prerequisites Before the Class (~4 hours)
- 0.2 Download the Slides
- 1.2 The D.E.A.T.H. Method: Dedupe and Eliminate
- 1.3 Why Index Read & Write Numbers Are Wrong
- 1.4 Lab 1 Setup: Dedupe and Eliminate
- 1.4b Lab 1: Dedupe and Eliminate – Brent Does It
- 1.5 The D.E.A.T.H. Method: Tuning Indexes for Specific Queries
- 1.6 Foreign Key and Check Constraints
- 1.7 Lab 2 Setup: Tuning Indexes for Specific Queries
- 1.8 Lab 2: Tuning Indexes for Specific Queries – Brent Does It
- 2.1 Adding Indexes with the DMVs
- 2.2 Tuning to Avoid Key Lookups and Residual Predicates
- 2.3 Lab 3 Setup: Adding Indexes with Clippy and the DMVs
- 2.3b Lab 3: Adding Indexes with Clippy and the DMVs – Brent Does It
- 2.4 The D.E.A.T.H. Method – Heaps and Clustered Indexes
- 2.5 Tuning Indexes to Avoid Blocking
- 2.6 Lab 4 Setup: Solving Blocking with Indexes
- 2.6 Lab 4: Solving Blocking with Indexes – Brent Does It
- 3.1 Filtered Indexes, Indexed Views, and Computed Columns
- 3.2 Indexing JSON for Faster Queries
- 3.3 Using the Second Column of an Index with Skip Scans
- 3.4 Lab 5 Setup: Leveraging Artisanal Indexes
- 3.4b Lab 5: Leveraging Artisanal Indexes – Brent Does It
- 4.1 Lab 6 Setup and Final Lessons
- 4.2 Lab 6: Doing the D.E.A.
- 4.3 Lab 6: Doing the D.E.A.T.
- About the Lab Exercises
- Bonus: Storytelling Time
- Bonus: Tips from the Index Sommelier
