I Know You
You have too many indexes on too many tables already, and the thought of adding more fills you with a dread that has a first, middle, last, and even a confirmation name.
This is another place where temp tables can save your bacon, because as soon as the query is done they basically disappear.
Off to buy a pack of smokes.
In yesterday’s post, we looked at how a temp table can help you materialize an expression that would otherwise be awkward to join on.
If we take that same query, we can see how using the temp table simplifies indexing.
SELECT p.OwnerUserId, SUM(p.Score) AS TotalScore, COUNT_BIG(*) AS records, CASE WHEN p.PostTypeId = 1 THEN p.OwnerUserId WHEN p.PostTypeId = 2 THEN p.LastEditorUserId END AS JoinKey INTO #Posts FROM dbo.Posts AS p WHERE p.PostTypeId IN (1, 2) AND p.Score > 100 GROUP BY CASE WHEN p.PostTypeId = 1 THEN p.OwnerUserId WHEN p.PostTypeId = 2 THEN p.LastEditorUserId END, p.OwnerUserId; CREATE CLUSTERED INDEX c ON #Posts(JoinKey); SELECT * FROM #Posts AS p WHERE EXISTS ( SELECT 1/0 FROM dbo.Users AS u WHERE p.JoinKey = u.Id );
Rather than have to worry about how to handle a bunch of columns across the where and join and select, we can just stick a clustered index on the one column we care about doing anything relational with to get the final result.
Thanks for reading!
A Word From Our Sponsors
First, a huge thank you to everyone who has bought my training so far. You all are incredible, and I owe all of you a drink.
Your support means a lot to me, and allows me to do nice stuff for other people, like give training away for free.
So far, I’ve donated $45k (!!!) worth of training to folks in need, no questions asked.
Next year, I’d like to keep doing the same thing. I’d also like to produce a whole lot more training to add value to the money you spend. In order to do that, I need to take time off from consulting, which isn’t easy to do. I’m not crying poor, but saying no to work for chunks of time isn’t easy for a one-person party.
I’m hoping that I can make enough in training bucks to make that possible.
Because this sale is extra sale-y, I’ve decided to name it after the blackest black known to man.
From today until December 31st, you can get all 25 hours of my recorded training content for just $100.00. If you click the link below to add everything to your cart, and use the discount code AllFor100 to apply a discount to your cart.
Some fine print: It only works if you add EVERYTHING. It’s a fixed amount discount code that you need to spend a certain amount to have kick in.
Thank for reading, and for your support.