Let’s talk about execution plans and query attributes.
Query hash is a way to describe queries that have the same query text, excluding the parameters. I think the best way to show this is examples, so I’ll write some queries and show you the query hashes on my system.
Keep in mind that these queries are ad-hoc
--query 1
SELECT *
FROM Posts
WHERE PostTypeId = 3
--query 2
SELECT *
FROM Posts
WHERE PostTypeId = 1
So what does that show us?
If your SQL statement is the same but the parameters are different, the query hash will be the same. Even if the execution plan is entirely different!
What about white space?
This is an important concept. For the query hash, the white space won’t change the query hash, but it will change the other objects like the sql handle. Let’s take the first query, and shape the text.
--query 1, remix
SELECT*FROM Posts
WHERE
PostTypeId = 3
More details to come
There’s more attributes to the query, like the query plan hash, the sql handle, and the plan handle. I’ll handle those in the next blog posts.