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":1084,"date":"2013-11-16T14:00:26","date_gmt":"2013-11-16T22:00:26","guid":{"rendered":"http:\/\/3.209.169.194\/blogs\/joe\/?p=1084"},"modified":"2013-12-29T19:12:23","modified_gmt":"2013-12-30T03:12:23","slug":"cselcalccombinefilters_exponentialbackoff-calculator","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/","title":{"rendered":"“CSelCalcCombineFilters_ExponentialBackoff” Calculator"},"content":{"rendered":"

One more post for the day, just while I have the blogging bug\u2026<\/p>\n

Per my last post<\/a>, we saw that the query_optimizer_estimate_cardinality event can provide some interesting information in SQL Server 2014 around how cardinality estimates get calculated.<\/p>\n

I have a setup I\u2019ve used in the past to demonstrate column correlation challenges (see my post, Exploring Column Correlation and Cardinality Estimates<\/a>, for the full example).\u00a0 I\u2019ll use that setup for this post as well, using the Credit database on SQL Server 2014 with the database compatibility level set to 120:<\/p>\n

\r\nUSE [Credit];\r\nGO\r\n\r\n-- Modifying the Credit data to set up the DBA's scenario\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'Minneapolis',\r\n        [state_prov] = 'MN'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 0;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'New York',\r\n[state_prov] = 'NY'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 1;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'Chicago',\r\n[state_prov] = 'IL'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 2;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'Houston',\r\n[state_prov] = 'TX'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 3;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'Philadelphia',\r\n[state_prov] = 'PA'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 4;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'Phoenix',\r\n[state_prov] = 'AZ'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 5;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'San Antonio',\r\n[state_prov] = 'TX'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 6;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'San Diego',\r\n[state_prov] = 'CA'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 7;\r\n\r\nUPDATE\u00a0 [dbo].[member]\r\nSET\u00a0\u00a0\u00a0\u00a0 [city] = 'Dallas',\r\n[state_prov] = 'TX'\r\nWHERE\u00a0\u00a0 [member_no] % 10 = 8;\r\nGO\r\n<\/pre>\n

So let\u2019s look at the cardinality estimate for a specific operator in the following query (using RECOMPILE to get fresh query_optimizer_estimate_cardinality events on each execution):<\/p>\n

\r\nSELECT\u00a0 m.[lastname],\r\nm.[firstname],\r\nSUM(c.[charge_amt]) AS [Total_Charge_amt]\r\nFROM\u00a0\u00a0\u00a0 [dbo].[member] AS [m]\r\nINNER JOIN [dbo].[charge] AS [c] ON\r\nm.[member_no] = c.[member_no]\r\nWHERE\u00a0\u00a0 [city] = 'Minneapolis' AND\r\n[state_prov] = 'MN'\r\nGROUP BY m.[lastname],\r\nm.[firstname]\r\nOPTION (RECOMPILE);\r\nGO\r\n<\/pre>\n

Below is the abridged plan and the operator and estimates I\u2019m interested in:<\/p>\n

\"image\"<\/a><\/p>\n

\"image\"<\/a><\/p>\n

In SQL Server 2014 CTP2 \u2013 we estimate 316.228 rows for the Clustered Index Scan against the member table \u2013 and the actual number of rows is 1,000.<\/p>\n

Now if I flip my database compatibility mode to pre-120, I\u2019ll see the following actual vs. estimated instead:<\/p>\n

\"image\"<\/a><\/p>\n

Before SQL Server 2014, the estimate for\u00a0 “[city] = ‘Minneapolis’ AND\u00a0 [state_prov] = ‘MN'” is 100 rows \u2013 and if we added the supporting statistics or index on city and state_prov, we\u2019ll get a better estimate (but there are limitations to how useful this can be \u2013 another topic altogether, so see this post<\/a>).\u00a0 We know that, in this example, the two columns are correlated.\u00a0 But we would need to help SQL Server if we didn\u2019t want it to assume each predicate was independent.<\/p>\n

Anyhow \u2013 the original issue pre SQL Server 2014 was that our city and state_prov columns were seen as independent, and so we saw our estimates reflect this (10% of row estimate for city multiplied by 10% of row estimate for state_prov).\u00a0 So we wind up with an underestimate.<\/p>\n

Now in SQL Server 2014 CTP2, with the Credit database compatibility mode put back to 120, we see the skew still exists, but the gap isn\u2019t as extreme \u2013 showing 316.228 instead of 100 as an estimate.\u00a0 Still incorrect, but less so.<\/p>\n

Now putting this in Excel, we can see the following:<\/p>\n

\"image\"<\/a><\/p>\n

Earlier we updated 10% of the 10,000 rows for various city\/state combinations, so what\u2019s up with the 32% for the state predicate selectivity?<\/p>\n

That 32% is, using Excel formula style, =POWER((10%),1\/2).<\/p>\n

And if we look at the query_optimizer_estimate_cardinality for the 2014 CTP2 version, we\u2019ll see the following calculator reference (abridged output):<\/p>\n

\"image\"<\/a><\/p>\n

And here is the full calculator blurb for the CSelCalcCombineFilters_ExponentialBackoff:<\/p>\n

<CalculatorList>
\n<FilterCalculator CalculatorName=”CSelCalcCombineFilters_ExponentialBackoff<\/strong>” Conjunction=”true”>
\n<SubCalculator>
\n<FilterCalculator CalculatorName=”CSelCalcColumnInInterval” Selectivity=”0.100″ TableName=”[m]” ColumnName=”state_prov” StatId=”5″ \/>
\n<FilterCalculator CalculatorName=”CSelCalcColumnInInterval” Selectivity=”0.100″ TableName=”[m]” ColumnName=”city” StatId=”4″ \/>
\n<\/SubCalculator>
\n<\/FilterCalculator>
\n<\/CalculatorList><\/p><\/blockquote>\n

We see the selectivity of state_prov and city are both 0.100.\u00a0 And yet unlike the pre-2014 version that multiples the two selectivity percentages, we\u2019re not doing that in 2014 CTP2. The calculator name references \u201cExponentialBackoff\u201d \u2013 which according to Wikipedia<\/a> (yeah I know), is defined as \u201can algorithm that uses feedback to multiplicatively decrease the rate of some process, in order to gradually find an acceptable rate\u201d.<\/p>\n

What does this mean in this specific case?<\/p>\n

In absence of multi-column statistics for city and state_prov, our estimated rows is not underestimated nearly as much as it used to be pre-2014.<\/p>\n

Homework assignment \u2013 add another member column to the mix that has a 0.100 selectivity (for example \u2013 county) and compare the estimates using a pre-2014 and 2014 CTP2 compatibility mode.<\/p>\n","protected":false},"excerpt":{"rendered":"

One more post for the day, just while I have the blogging bug\u2026 Per my last post, we saw that the query_optimizer_estimate_cardinality event can provide some interesting information in SQL Server 2014 around how cardinality estimates get calculated. I have a setup I\u2019ve used in the past to demonstrate column correlation challenges (see my post, […]<\/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-1084","post","type-post","status-publish","format-standard","hentry","category-cardinality-estimation","category-performance"],"yoast_head":"\n“CSelCalcCombineFilters_ExponentialBackoff” Calculator - 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\/cselcalccombinefilters_exponentialbackoff-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"“CSelCalcCombineFilters_ExponentialBackoff” Calculator - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"One more post for the day, just while I have the blogging bug\u2026 Per my last post, we saw that the query_optimizer_estimate_cardinality event can provide some interesting information in SQL Server 2014 around how cardinality estimates get calculated. I have a setup I\u2019ve used in the past to demonstrate column correlation challenges (see my post, […]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-16T22:00:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-12-30T03:12:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/2013\/11\/image_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=\"4 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\/cselcalccombinefilters_exponentialbackoff-calculator\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/\",\"name\":\"“CSelCalcCombineFilters_ExponentialBackoff” Calculator - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2013-11-16T22:00:26+00:00\",\"dateModified\":\"2013-12-30T03:12:23+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/#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\":\"“CSelCalcCombineFilters_ExponentialBackoff” Calculator\"}]},{\"@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":"“CSelCalcCombineFilters_ExponentialBackoff” Calculator - 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\/cselcalccombinefilters_exponentialbackoff-calculator\/","og_locale":"en_US","og_type":"article","og_title":"“CSelCalcCombineFilters_ExponentialBackoff” Calculator - Joe Sack","og_description":"One more post for the day, just while I have the blogging bug\u2026 Per my last post, we saw that the query_optimizer_estimate_cardinality event can provide some interesting information in SQL Server 2014 around how cardinality estimates get calculated. I have a setup I\u2019ve used in the past to demonstrate column correlation challenges (see my post, […]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/","og_site_name":"Joe Sack","article_published_time":"2013-11-16T22:00:26+00:00","article_modified_time":"2013-12-30T03:12:23+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/2013\/11\/image_thumb.png"}],"author":"Joseph Sack","twitter_misc":{"Written by":"Joseph Sack","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/","name":"“CSelCalcCombineFilters_ExponentialBackoff” Calculator - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2013-11-16T22:00:26+00:00","dateModified":"2013-12-30T03:12:23+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/cselcalccombinefilters_exponentialbackoff-calculator\/#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":"“CSelCalcCombineFilters_ExponentialBackoff” Calculator"}]},{"@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\/1084","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=1084"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/1084\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=1084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=1084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=1084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}