{"id":1138,"date":"2013-12-19T13:26:31","date_gmt":"2013-12-19T21:26:31","guid":{"rendered":"http:\/\/3.209.169.194\/blogs\/joe\/?p=1138"},"modified":"2013-12-29T19:14:02","modified_gmt":"2013-12-30T03:14:02","slug":"more-on-exponential-backoff","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/","title":{"rendered":"More on Exponential Backoff"},"content":{"rendered":"<p>This post is a continuation of the SQL Server 2014 Cardinality Estimator enhancements exploration series:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/a-first-look-at-the-query_optimizer_estimate_cardinality-xe-event\/\" target=\"_blank\">A first look at the query_optimizer_estimate_cardinality XE event<\/a><\/li>\n<li><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/\" target=\"_blank\">\u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator<\/a><\/li>\n<li><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator-part-ii\/\" target=\"_blank\">\u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator\u2013 Part II<\/a><\/li>\n<li><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/the-cselcalcascendingkeyfilter-calculator\/\" target=\"_blank\">The CSelCalcAscendingKeyFilter Calculator<\/a><\/li>\n<li><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/cardinality-estimation-model-version\/\" target=\"_blank\">Cardinality Estimation Model Version<\/a><\/li>\n<li><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/comparing-root-level-skews-in-the-new-cardinality-estimator\/\" target=\"_blank\">Comparing Root-Level Skews in the new Cardinality Estimator<\/a><\/li>\n<li><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/using-legacy-methods-to-lessen-sql-server-2014-cardinality-estimator-skews\/\" target=\"_blank\">Using Legacy Methods to Lessen SQL Server 2014 Cardinality Estimator Skews<\/a><\/li>\n<\/ul>\n<p>Continuing the subject of exponential backoffs (from the 2nd and 3rd posts in this series), let\u2019s restore the Credit sample database back to the baseline version and execute the following script:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nUSE &#x5B;master];\r\nGO\r\n\r\nALTER DATABASE &#x5B;Credit] SET COMPATIBILITY_LEVEL = 120;\r\nGO\r\n\r\nUSE &#x5B;Credit];\r\nGO\r\n\r\n-- Add four new columns\r\nALTER TABLE &#x5B;dbo].&#x5B;member]\r\nADD &#x5B;arbitrary_1] BIGINT NULL;\r\n\r\nALTER TABLE &#x5B;dbo].&#x5B;member]\r\nADD &#x5B;arbitrary_2] BIGINT NULL;\r\n\r\nALTER TABLE &#x5B;dbo].&#x5B;member]\r\nADD &#x5B;arbitrary_3] BIGINT NULL;\r\n\r\nALTER TABLE &#x5B;dbo].&#x5B;member]\r\nADD &#x5B;arbitrary_4] BIGINT NULL;\r\n<\/pre>\n<p>I changed the database to the latest version so we use the new CE and then added four new columns.<\/p>\n<p>Next, let\u2019s update the values of the four new columns using different distributions:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n;WITH\u00a0\u00a0\u00a0 CTE_NTILE\r\nAS ( SELECT\u00a0\u00a0 &#x5B;member_no] ,\r\nNTILE(10) OVER ( ORDER BY &#x5B;member_no] DESC ) AS &#x5B;arbitrary_1] ,\r\nNTILE(2) OVER ( ORDER BY &#x5B;member_no] DESC ) AS &#x5B;arbitrary_2] ,\r\nNTILE(4) OVER ( ORDER BY &#x5B;member_no] DESC ) AS &#x5B;arbitrary_3] ,\r\nNTILE(250) OVER ( ORDER BY &#x5B;member_no] DESC ) AS &#x5B;arbitrary_4]\r\nFROM\u00a0\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\n)\r\nUPDATE\u00a0 &#x5B;dbo].&#x5B;member]\r\nSET\u00a0\u00a0\u00a0\u00a0 &#x5B;arbitrary_1] = &#x5B;c].&#x5B;arbitrary_1] ,\r\n&#x5B;arbitrary_2] = &#x5B;c].&#x5B;arbitrary_2] ,\r\n&#x5B;arbitrary_3] = &#x5B;c].&#x5B;arbitrary_3] ,\r\n&#x5B;arbitrary_4] = &#x5B;c].&#x5B;arbitrary_4]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member] AS &#x5B;m]\r\nINNER JOIN CTE_NTILE AS &#x5B;c]\r\nON\u00a0\u00a0\u00a0\u00a0\u00a0 &#x5B;c].&#x5B;member_no] = &#x5B;m].&#x5B;member_no];\r\nGO\r\n<\/pre>\n<p>Looking at the estimates for single-predicate queries, if I execute the following, I\u2019ll get an estimate of 1,000 rows:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 &#x5B;member_no]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\nWHERE\u00a0\u00a0 &#x5B;arbitrary_1] = 1\r\nOPTION\u00a0 ( RECOMPILE );\r\n<\/pre>\n<p>For this next query I\u2019ll get an estimate of 5,000 rows:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 &#x5B;member_no]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\nWHERE\u00a0\u00a0 &#x5B;arbitrary_2] = 1\r\nOPTION\u00a0 ( RECOMPILE );\r\n<\/pre>\n<p>And for this next query, an estimate of 2,500 rows:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 &#x5B;member_no]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\nWHERE\u00a0\u00a0 &#x5B;arbitrary_3] = 1\r\nOPTION\u00a0 ( RECOMPILE );\r\n<\/pre>\n<p>And lastly (for single-predicate examples anyhow), an estimate of 40 rows:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 &#x5B;member_no]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\nWHERE\u00a0\u00a0 &#x5B;arbitrary_4] = 1\r\nOPTION\u00a0 ( RECOMPILE );\r\n<\/pre>\n<p>Now let\u2019s start adding multiple predicates per statement.\u00a0 The first example with multiple predicates uses two predicates \u2013 one with a selectivity of 0.1 and one of 0.5:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 &#x5B;member_no]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\nWHERE\u00a0\u00a0 &#x5B;arbitrary_1] = 1 AND -- 0.1 selectivity\r\n&#x5B;arbitrary_2] = 1 -- 0.5 selectivity\r\nOPTION\u00a0 ( RECOMPILE );\r\n<\/pre>\n<p>The estimate for this query is 707.107 with the new CE, which we can derive using the POWER function in T-SQL as follows (I used Excel last time to do this, so see the previous posts for the background information on this calculation):<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 10000 *0.10 * POWER(0.500000, 0.50);\r\n<\/pre>\n<p>That returned 707.107.<\/p>\n<p>Now what about a query with three predicates, with selectivities of 0.1, 0.5 and 0.25?<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 &#x5B;member_no]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\nWHERE\u00a0\u00a0 &#x5B;arbitrary_1] = 1 AND -- .1 selectivity\r\n&#x5B;arbitrary_2] = 1 AND -- .5 selectivity\r\n&#x5B;arbitrary_3] = 1 -- .25 selectivity\r\nOPTION\u00a0 ( RECOMPILE );\r\n<\/pre>\n<p>The estimate for this was 420.448, and we can derive this via the following expression (and notice the order of selectivities goes from smallest to highest):<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n-- Notice the selectivity order (0.10, 0.25, .50)\r\nSELECT\u00a0 10000 * 0.10 * POWER(0.250000,0.50) * POWER(0.500000, 0.25);\r\n<\/pre>\n<p>Now let\u2019s reference all four columns (with selectivities of 0.1, 0.5, 0.25 and 0.004):<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 &#x5B;member_no]\r\nFROM\u00a0\u00a0\u00a0 &#x5B;dbo].&#x5B;member]\r\nWHERE\u00a0\u00a0 &#x5B;arbitrary_1] = 1 AND -- .1 selectivity\r\n&#x5B;arbitrary_2] = 1 AND -- .5 selectivity\r\n&#x5B;arbitrary_3] = 1 AND -- .25 selectivity\r\n&#x5B;arbitrary_4] = 1\u00a0 -- 0.004 selectivity\r\nOPTION\u00a0 ( RECOMPILE );\r\n<\/pre>\n<p>The estimate is 8.20193 and we can derive this via the following:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\u00a0 10000 * 0.004* POWER(0.1000000, 0.50) * POWER(0.2500000, 0.25) * POWER(0.5000000, 0.125);\r\n<\/pre>\n<p>The selectivities are ordered from most selective to least selective, and the the less selective values get the \u201cback offs\u201d in order of none, 1\/2, 1\/4, and 1\/8.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post is a continuation of the SQL Server 2014 Cardinality Estimator enhancements exploration series: A first look at the query_optimizer_estimate_cardinality XE event \u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator \u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator\u2013 Part II The CSelCalcAscendingKeyFilter Calculator Cardinality Estimation Model Version Comparing Root-Level Skews in the new Cardinality Estimator Using Legacy Methods to Lessen SQL Server 2014 Cardinality Estimator Skews [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42,28],"tags":[],"class_list":["post-1138","post","type-post","status-publish","format-standard","hentry","category-cardinality-estimation","category-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>More on Exponential Backoff - 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\/more-on-exponential-backoff\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"More on Exponential Backoff - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"This post is a continuation of the SQL Server 2014 Cardinality Estimator enhancements exploration series: A first look at the query_optimizer_estimate_cardinality XE event \u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator \u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator\u2013 Part II The CSelCalcAscendingKeyFilter Calculator Cardinality Estimation Model Version Comparing Root-Level Skews in the new Cardinality Estimator Using Legacy Methods to Lessen SQL Server 2014 Cardinality Estimator Skews [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2013-12-19T21:26:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-12-30T03:14:02+00:00\" \/>\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\/more-on-exponential-backoff\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/\",\"name\":\"More on Exponential Backoff - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2013-12-19T21:26:31+00:00\",\"dateModified\":\"2013-12-30T03:14:02+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cardinality Estimation\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/cardinality-estimation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"More on Exponential Backoff\"}]},{\"@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":"More on Exponential Backoff - 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\/more-on-exponential-backoff\/","og_locale":"en_US","og_type":"article","og_title":"More on Exponential Backoff - Joe Sack","og_description":"This post is a continuation of the SQL Server 2014 Cardinality Estimator enhancements exploration series: A first look at the query_optimizer_estimate_cardinality XE event \u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator \u201cCSelCalcCombineFilters_ExponentialBackoff\u201d Calculator\u2013 Part II The CSelCalcAscendingKeyFilter Calculator Cardinality Estimation Model Version Comparing Root-Level Skews in the new Cardinality Estimator Using Legacy Methods to Lessen SQL Server 2014 Cardinality Estimator Skews [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/","og_site_name":"Joe Sack","article_published_time":"2013-12-19T21:26:31+00:00","article_modified_time":"2013-12-30T03:14:02+00:00","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\/more-on-exponential-backoff\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/","name":"More on Exponential Backoff - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2013-12-19T21:26:31+00:00","dateModified":"2013-12-30T03:14:02+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/more-on-exponential-backoff\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/"},{"@type":"ListItem","position":2,"name":"Cardinality Estimation","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/cardinality-estimation\/"},{"@type":"ListItem","position":3,"name":"More on Exponential Backoff"}]},{"@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\/1138","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=1138"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/1138\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=1138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=1138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=1138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}