Before we get into all the choices and compare them, let’s baseline on methodology and a query to use.
Not sure why, but many people give me blow back when I say “on average, this query runs in X amount of time.” The feedback goes “You can’t say that. What if it was just blocking or resources or…” I get it. Run a query one time, change something, run that query again, declare the problem solved, is not what I’m suggesting. Notice the key word and trick phrase “on average.” I don’t run the query once. I run it several times, capture them all, then get the average of the durations.
The observer effect is in full force with a couple of the techniques Grant shows, but the rest are generally stable, which is a good thing.