Warning: Constant WP_TEMP_DIR already defined in /var/www/html/blogs/joe/wp-config.php on line 93

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902
{"id":523,"date":"2011-10-16T04:35:00","date_gmt":"2011-10-16T04:35:00","guid":{"rendered":"\/blogs\/joe\/post\/Clearing-e2809cmissing-indexe2809d-suggestions-for-a-single-table.aspx"},"modified":"2013-01-02T20:32:31","modified_gmt":"2013-01-03T04:32:31","slug":"clearing-missing-index-suggestions-for-a-single-table","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/","title":{"rendered":"Clearing \u201cmissing index\u201d suggestions for a single table"},"content":{"rendered":"

\nToday there isn’t a fine-tuned way to clear the accumulated statistics from the “missing index” set of DMVs.  <\/span>Certainly restarting SQL Server will do this, but you don’t have something like DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR) to reset statistics for dm_db_missing_index_columns, dm_db_missing_index_groups, dm_db_missing_index_group_stats and dm_db_missing_index_details.<\/font><\/font>\n<\/p>\n

\nWhile we don’t have this direct option, there is an interesting behavior that I’ll demonstrate on this blog post using SQL Server 2008 R2 (10.50.1617).<\/font><\/font>\n<\/p>\n

\nRight after restarting SQL Server, I run the following query to generate a few entries in the missing index DMVs (each query spawns a missing index recommendation):<\/font><\/font>\n<\/p>\n

\nUSE<\/font><\/font><\/span> AdventureWorks<\/font><\/span><\/font>\n<\/p>\n

\nGO<\/font><\/font><\/span>\n<\/p>\n

\n \n<\/p>\n

\n<\/font><\/font><\/span>\n<\/p>\n

\nSELECT<\/font><\/font><\/span> ProductID<\/font><\/span><\/font>\n<\/p>\n

\nFROM<\/font><\/font><\/span> Sales.<\/font><\/span>SalesOrderDetail<\/font><\/span><\/font>\n<\/p>\n

\nWHERE<\/font><\/font><\/span> UnitPriceDiscount =<\/font><\/span> 0.40<\/font><\/span><\/font>\n<\/p>\n

\nGO<\/font><\/font><\/span>\n<\/p>\n

\n \n<\/p>\n

\n<\/font><\/font><\/span>\n<\/p>\n

\nSELECT<\/font><\/font><\/span> SalesOrderID<\/font><\/span><\/font>\n<\/p>\n

\nFROM<\/font><\/font><\/span> Sales.<\/font><\/span>SalesOrderDetail<\/font><\/span><\/font>\n<\/p>\n

\nWHERE<\/font><\/font><\/span> LineTotal =<\/font><\/span> 236.421500<\/font><\/span><\/font>\n<\/p>\n

\nGO<\/font><\/font><\/span>\n<\/p>\n

\n \n<\/p>\n

\n<\/font><\/font><\/span>\n<\/p>\n

\nSELECT<\/font><\/font><\/span> SalesOrderID<\/font><\/span><\/font>\n<\/p>\n

\nFROM<\/font><\/font><\/span> Sales.<\/font><\/span>SalesOrderHeader<\/font><\/span><\/font>\n<\/p>\n

\nWHERE<\/font><\/font><\/span> TaxAmt =<\/font><\/span> <\/font>'10.316'<\/font><\/span><\/span><\/font>\n<\/p>\n

\nGO<\/font><\/font><\/span>\n<\/p>\n

\nNext I execute the following query to see the three entries in the missing index DMVs:<\/font><\/font>\n<\/p>\n

\nSELECT<\/font><\/font><\/span>      <\/span>s.<\/font><\/span>last_user_seek<\/font>,<\/font><\/span><\/span><\/font>\n<\/p>\n

\n            <\/font><\/span>d.<\/font><\/span>object_id<\/font><\/span><\/font>,<\/font><\/span><\/font><\/span>\n<\/p>\n

\n            <\/font><\/span>d.<\/font><\/span>equality_columns<\/font>,<\/font><\/span><\/font><\/span>\n<\/p>\n

\n            <\/font><\/span>d.<\/font><\/span>inequality_columns<\/font>,<\/font><\/span><\/font><\/span>\n<\/p>\n

\n            <\/font><\/span>d.<\/font><\/span>included_columns<\/font>,<\/font><\/span><\/font><\/span>\n<\/p>\n

\n            <\/font><\/span>d.<\/font><\/span>statement<\/font><\/span><\/font>,<\/font><\/span><\/font><\/span>\n<\/p>\n

\n            <\/font><\/span>s.<\/font><\/span>avg_user_impact<\/font><\/font><\/span>\n<\/p>\n

\nFROM<\/font><\/font><\/span> sys<\/font><\/span>.<\/font><\/span>dm_db_missing_index_group_stats<\/font><\/span> AS<\/font><\/span> s<\/font><\/span><\/font>\n<\/p>\n

\nINNER<\/font><\/font><\/span> JOIN<\/font><\/span> sys<\/font><\/span>.<\/font><\/span>dm_db_missing_index_groups<\/font><\/span> AS<\/font><\/span> g<\/font><\/span><\/font>\n<\/p>\n

\n    <\/font><\/span>ON <\/font><\/span>(<\/font><\/span>s.<\/font><\/span>group_handle =<\/font><\/span> g.<\/font><\/span>index_group_handle<\/font>)<\/font><\/span><\/font><\/span>\n<\/p>\n

\nINNER<\/font><\/font><\/span> JOIN<\/font><\/span> sys<\/font><\/span>.<\/font><\/span>dm_db_missing_index_details<\/font><\/span> AS<\/font><\/span> d<\/font><\/span><\/font>\n<\/p>\n

\n    <\/font><\/span>ON <\/font><\/span>(<\/font><\/span>g.<\/font><\/span>index_handle =<\/font><\/span> d.<\/font><\/span>index_handle<\/font>)<\/font><\/span><\/font><\/span>\n<\/p>\n

\nThis returns:<\/font><\/font>\n<\/p>\n

\n\"clip_image002\"<\/a><\/span>\n<\/p>\n

\nSo I have three index suggestions so far.<\/font><\/font> What happens if I create one<\/strong> of suggested indexes for the SalesOrderDetail table?<\/font><\/font>\n<\/p>\n

\nUSE<\/font><\/font><\/span> [AdventureWorks]<\/font><\/span><\/font>\n<\/p>\n

\nGO<\/font><\/font><\/span>\n<\/p>\n

\n \n<\/p>\n

\nCREATE<\/font><\/font><\/span> NONCLUSTERED<\/font><\/span> INDEX<\/font><\/span> IDX_SalesOrderDetail_UnitPriceDiscount<\/font><\/span><\/font>\n<\/p>\n

\nON<\/font><\/font><\/span> [Sales].<\/font><\/span>[SalesOrderDetail] <\/font><\/span>(<\/font><\/span>[UnitPriceDiscount]<\/font>)<\/font><\/span><\/span><\/font>\n<\/p>\n

\nINCLUDE <\/font><\/span>(<\/font><\/span>[ProductID]<\/font>)<\/font><\/span><\/font><\/span>\n<\/p>\n

\nGO<\/font><\/font><\/span>\n<\/p>\n

\n<\/font><\/font>\n<\/p>\n

\nIf I re-execute the query against the missing index DMVs – I’ll now see that BOTH suggestions from the SalesOrderDetail table got cleared out (even though I only added one of the suggestions), leaving behind the suggestion for the other table (SalesOrderHeader):<\/font><\/font>\n<\/p>\n

\n\"clip_image004\"<\/a><\/span>\n<\/p>\n

\nSo by virtue of adding an index to SalesOrderDetail, it clears out BOTH suggestions for that table.  <\/span><\/font><\/font><\/span>\n<\/p>\n

\n<\/span>And if I re-execute the query for the LineTotal column on SalesOrderDetail (that was not yet indexed), the missing index entry pops back in (since we didn’t create an index for this):<\/font><\/font><\/span>\n<\/p>\n

\n\"clip_image006\"<\/a><\/span>\n<\/p>\n

\nAnd just to test from another direction, I'll add the suggested index on the SalesOrderHeader table:<\/font><\/font><\/span>\n<\/p>\n

\nUSE<\/font><\/font><\/span> [AdventureWorks]<\/font><\/span><\/font>\n<\/p>\n

\nGO<\/font><\/font><\/span>\n<\/p>\n

\n \n<\/p>\n

\nCREATE<\/font><\/font><\/span> NONCLUSTERED<\/font><\/span> INDEX<\/font><\/span> IDX_SalesOrderHeader_TaxAmt<\/font><\/span><\/font>\n<\/p>\n

\nON<\/font><\/font><\/span> [Sales].<\/font><\/span>[SalesOrderHeader] <\/font><\/span>(<\/font><\/span>[TaxAmt]<\/font>)<\/font><\/span><\/span><\/font><\/span>\n<\/p>\n

\n<\/font><\/font><\/span>\n<\/p>\n

\nRe-running the query against the missing index DMVs, sure enough, the SalesOrderHeader suggestion is removed, leaving the SalesOrderDetail suggestion (for the one index we haven’t yet created):<\/font><\/font><\/span>\n<\/p>\n

\n\"clip_image008\"<\/a><\/span>\n<\/p>\n

\nSo in a nutshell, the missing index views aren’t as static as they may appear to be and if you’re adding indexes, you may expect to see suggestions disappear for that table (not waiting for a SQL Server restart) – and this happens whether or not you created indexes for each suggestion for a specific table.  <\/span>I can understand the trade-offs of this behavior – especially since a new index on a table can have an impact on future execution plans.  <\/span>Basically one index creation “resets” the suggestions.  <\/span>But that also means that you should be sampling these DMVs over time and not rely fully on a  single sampling.<\/font><\/font><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"

Today there isn’t a fine-tuned way to clear the accumulated statistics from the “missing index” set of DMVs.  Certainly restarting SQL Server will do this, but you don’t have something like DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR) to reset statistics for dm_db_missing_index_columns, dm_db_missing_index_groups, dm_db_missing_index_group_stats and dm_db_missing_index_details. While we don’t have this direct option, there is an interesting […]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,28],"tags":[],"class_list":["post-523","post","type-post","status-publish","format-standard","hentry","category-indexing","category-performance"],"yoast_head":"\nClearing \u201cmissing index\u201d suggestions for a single table - Joe Sack<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clearing \u201cmissing index\u201d suggestions for a single table - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"Today there isn’t a fine-tuned way to clear the accumulated statistics from the “missing index” set of DMVs.  Certainly restarting SQL Server will do this, but you don’t have something like DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR) to reset statistics for dm_db_missing_index_columns, dm_db_missing_index_groups, dm_db_missing_index_group_stats and dm_db_missing_index_details. While we don’t have this direct option, there is an interesting […]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2011-10-16T04:35:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-01-03T04:32:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/clearing-missing-index-suggestions-for-a\/046af6ad\/clip_image002_thumb.png\" \/>\n<meta name=\"author\" content=\"Joseph Sack\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joseph Sack\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/\",\"name\":\"Clearing \u201cmissing index\u201d suggestions for a single table - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2011-10-16T04:35:00+00:00\",\"dateModified\":\"2013-01-03T04:32:31+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Indexing\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/indexing\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Clearing \u201cmissing index\u201d suggestions for a single table\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\",\"name\":\"Joe Sack\",\"description\":\"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\",\"name\":\"Joseph Sack\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"caption\":\"Joseph Sack\"},\"description\":\"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.\",\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/joe\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Clearing \u201cmissing index\u201d suggestions for a single table - Joe Sack","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/","og_locale":"en_US","og_type":"article","og_title":"Clearing \u201cmissing index\u201d suggestions for a single table - Joe Sack","og_description":"Today there isn’t a fine-tuned way to clear the accumulated statistics from the “missing index” set of DMVs.  Certainly restarting SQL Server will do this, but you don’t have something like DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR) to reset statistics for dm_db_missing_index_columns, dm_db_missing_index_groups, dm_db_missing_index_group_stats and dm_db_missing_index_details. While we don’t have this direct option, there is an interesting […]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/","og_site_name":"Joe Sack","article_published_time":"2011-10-16T04:35:00+00:00","article_modified_time":"2013-01-03T04:32:31+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/clearing-missing-index-suggestions-for-a\/046af6ad\/clip_image002_thumb.png"}],"author":"Joseph Sack","twitter_misc":{"Written by":"Joseph Sack","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/","name":"Clearing \u201cmissing index\u201d suggestions for a single table - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2011-10-16T04:35:00+00:00","dateModified":"2013-01-03T04:32:31+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/clearing-missing-index-suggestions-for-a-single-table\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/"},{"@type":"ListItem","position":2,"name":"Indexing","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/indexing\/"},{"@type":"ListItem","position":3,"name":"Clearing \u201cmissing index\u201d suggestions for a single table"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/","name":"Joe Sack","description":"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648","name":"Joseph Sack","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","caption":"Joseph Sack"},"description":"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.","sameAs":["http:\/\/3.209.169.194\/blogs\/joe","https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack"],"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/comments?post=523"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/523\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}