Created
February 19, 2017 14:00
-
-
Save bertwagner/71a94cf414a3a2a61b04e006289fcc72 to your computer and use it in GitHub Desktop.
Adding a computed column to a table storing JSON
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Remember to turn on "Include Actual Execution Plan" for all of these examples | |
-- Before we add any computed columns/indexes, let's see our execution plan for our SQL statement with a JSON predicate | |
SELECT * FROM dbo.Cars WHERE JSON_VALUE(CarDetails, '$.model') = 'Golf' | |
/* | |
Output: | |
Id CarDetails | |
----------- -------------------------------------------------- | |
1113 {"year":2001,"make":"VOLKSWAGEN","model":"GOLF"} | |
2410 {"year":2002,"make":"VOLKSWAGEN","model":"GOLF"} | |
3707 {"year":2003,"make":"VOLKSWAGEN","model":"GOLF"} | |
... | |
*/ | |
-- The execution plan shows a Table Scan, not very efficient | |
-- We can now add a non-persisted computed column for our "model" JSON property. | |
ALTER TABLE dbo.Cars | |
ADD CarModel AS JSON_VALUE(CarDetails, '$.model'); | |
-- We add the distinct to avoid parameter sniffing issues. | |
-- Our execution plan now shows the extra computation that is occuring for every row of the table scan. | |
SELECT DISTINCT * FROM dbo.Cars WHERE JSON_VALUE(CarDetails, '$.model') = 'Golf' | |
SELECT DISTINCT * FROM dbo.Cars WHERE CarModel = 'Golf' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment