Slow queries, identified the way a field guide identifies birds: by silhouette, habitat, call, and the species they’re confused with. All eight were raised in the lab on SQL Server 2025. The reads and the wait types are what each one produced.
The Query Optimizer Interview: Twenty Minutes, No Hints
The query optimizer sat down for twenty minutes and answered for itself. Why it ignored your index, why one procedure gets a plan built for the wrong caller, what it does when it cannot see your value, and the moment its own plan admits it stopped looking.
Know Your Wait Types: Six Profiles, All Induced
I caused six wait types on purpose, one at a time, and measured each one for a single session. What each is blamed for, what it actually means, and the numbers it produced on SQL Server 2025. Wait types are the most misread figures in the product.
When a GUID Clustered Primary Key Gets Expensive
A GUID primary key can be useful. Learn when a GUID clustered primary key gets expensive, from page splits to index size, and when a bigint key can help.
SQL Server Network Latency: When the Database Isn’t the Slow Part
SQL Server network latency can make a fast database look slow. An application that fetches 4,000 orders one query at a time pays for every round trip. I measured the loop against one query, tested what ASYNC_NETWORK_IO means, and show how to check your own round trip time.
AI Row Count Estimates Come From Nothing
AI row count estimates arrive with tremendous confidence. Cardinal said four hundred. The query returned nine million.
Outdated Statistics in SQL Server: The Optimizer Is Planning for Last Year
Outdated statistics in SQL Server can slow a query even when its code has not changed. On SQL Server 2025 with the legacy estimator, a stale statistic sent one join to 120,043 logical reads, and a targeted update brought it down to 18,220. Auto update helps, but it waits for a threshold, it samples, and it knows nothing about the rows that arrived today.






