{"id":1162,"date":"2007-10-05T01:39:42","date_gmt":"2007-10-05T01:39:42","guid":{"rendered":"\/blogs\/paul\/post\/Indexes-From-Every-Angle-How-can-you-tell-if-an-index-is-being-used.aspx"},"modified":"2013-06-07T02:55:20","modified_gmt":"2013-06-07T09:55:20","slug":"indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/","title":{"rendered":"Indexes From Every Angle: How can you tell if an index is being used?"},"content":{"rendered":"<p>Whenever I&#8217;m discussing index maintenance, and specifically fragmentation, I always make a point of saying <em>&#8216;Make sure the index is being used before doing anything about fragmentation&#8217;<\/em>.<\/p>\n<p>If an index isn&#8217;t being used very much, but has very low page density (lots of free space in the index pages), then it will be occupying a lot more disk space than it could do and it <em>might<\/em> be worth compacting (with a rebuild or a reorg) to get that disk space back. However, usually there&#8217;s not much point spending resources to remove any kind of fragmentation when an index isn&#8217;t being used. This is especially true of those people who rebuild <em>all<\/em> indexes every night or every week.<\/p>\n<p>You could even go so far as to say if a non-clustered index isn&#8217;t being used, why is it there at all? Extra non-clustered indexes drag down performance in a number of ways. Consider a non-clustered index (not filtered) called <em>IX_MyNCIndex<\/em> on the table <em>MyTable<\/em><\/p>\n<ul>\n<li>Any time a record is inserted into <em>MyTable<\/em>, a matching record is inserted into <em>IX_MyNCIndex<\/em>. This is a bunch of extra I\/Os, extra log records, plus maybe even a page-split.<\/li>\n<li>Any time a record is deleted from <em>MyTable<\/em>, the matching record in <em>IX_MyNCIndex<\/em> must be deleted. Extra I\/Os and log records again.<\/li>\n<li>Any time a record in <em>MyTable<\/em> is updated:\n<ul>\n<li>If <em>MyTable<\/em> has a clustered index, and the clustered index key value changes, then the matching record in <em>IX_MyNCIndex<\/em> must be updated. Extra I\/Os and log records again.<\/li>\n<li>If any of the non-clustered index key values changes, or any of the INCLUDE&#8217;d column values changes, then the matching record in <em>IX_MyNCIndex<\/em> must be updated. Extra I\/Os and log records again.<\/li>\n<\/ul>\n<\/li>\n<li>If a clustered index is created on <em>MyTable<\/em>, then <em>IX_MyNCIndex<\/em> has to be rebuilt to include the logical RIDs rather than the physical heap RIDs (see <a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-what-happens-to-non-clustered-indexes-when-the-table-structure-is-changed\/\">this post<\/a> for an explanation). Lot of extra I\/Os and log records again.<\/li>\n<\/ul>\n<p>That\u2019s a significant amount of extra IOs and log records to maintain each extraneous non-clustered index.<\/p>\n<p>So, how can you tell if an index is being used?<\/p>\n<ul>\n<li>In SQL Server 2000 there is no easy way to do it<\/li>\n<li>From SQL Server 2005 onward there are a few different ways and the one I want to discuss in this post is the <em>sys.dm_db_index_usage_stats<\/em> DMV.<\/li>\n<\/ul>\n<p>This DMV exposes the information that is tracked about index usage (as the name suggests). It does not generate any information itself; it just returns info from a cache inside SQL Server. This cache is empty when the server instance starts, and is not persisted across instance restarts. All cache entries for indexes in a database are removed when that database is closed. So, the cache tracks usage information about which indexes have been used since the database they are part of was last opened (either manually or as part of instance start-up).<\/p>\n<p>This continues to confuse people so I&#8217;ll call it out: <em>if the output from the DMV does not have an entry for the index you&#8217;re interested in, it has not been used since the last database startup.<\/em><\/p>\n<p>The cache tracks the following info for each index (for user queries and system queries):<\/p>\n<ul>\n<li>The number of times it was used in a seek operation (either looking up a single row, or doing a range scan) along with the time of the last seek.<\/li>\n<li>The number of times it was used in a scan operation (e.g. a select * operation) along with the time of the last scan<\/li>\n<li>The number of times it was used in a lookup operation (this means a bookmark lookup \u2013 where a non-clustered index does not fully cover a query and additional columns must be retrieved from the base table row) along with the time of the last lookup.<\/li>\n<li>The number of times it was used in an update operation (this counts inserts, updates, and deletes) along with the time of the last update.<\/li>\n<\/ul>\n<p>Let&#8217;s have a look at its use.<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT\r\n    *\r\nFROM\r\n    sys.dm_db_index_usage_stats;\r\nGO\r\n<\/pre>\n<p>The output is too wide for a single image so I&#8217;ve split it in two (I won&#8217;t post any more output from the DMV &#8211; I&#8217;ll just talk about it):<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" alt=\"indexusage11.jpg\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg\" width=\"920\" height=\"150\" border=\"0\" \/><\/p>\n<p><img decoding=\"async\" alt=\"indexusage21.jpg\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage21.jpg\" width=\"889\" height=\"151\" border=\"0\" \/><\/p>\n<p>Unless you&#8217;ve just re-started your instance, you&#8217;ll see a bunch of output from this, representing all index activity since the instance\/databases started. If you&#8217;re interested in whether an index is being used, you can filter the output. Let&#8217;s focus in on a particular table: <em>AdventureWorks.Person.Address<\/em><\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT\r\n    *\r\nFROM\r\n    sys.dm_db_index_usage_stats\r\nWHERE\r\n    &#x5B;database_id] = DB_ID (N'AdventureWorks')\r\n    AND &#x5B;OBJECT_ID] = OBJECT_ID (N'AdventureWorks.Person.Address');\r\nGO\r\n<\/pre>\n<p>You&#8217;ll probably see nothing in the output, unless you&#8217;ve been playing around with that table. Let&#8217;s force the clustered index on that table to be used, and look at the DMV output again.<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT\r\n    *\r\nFROM\r\n    &#x5B;AdventureWorks].&#x5B;Person].&#x5B;Address];\r\nGO\r\n\r\nSELECT\r\n    *\r\nFROM\r\n    sys.dm_db_index_usage_stats\r\nWHERE\r\n    &#x5B;database_id] = DB_ID (N'AdventureWorks')\r\n    AND &#x5B;OBJECT_ID] = OBJECT_ID (N'AdventureWorks.Person.Address');\r\nGO\r\n<\/pre>\n<p>Now there&#8217;s a single row, showing a scan on the clustered index. Let&#8217;s do something else.<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT\r\n    &#x5B;StateProvinceID]\r\nFROM\r\n    &#x5B;AdventureWorks].&#x5B;Person].&#x5B;Address]\r\nWHERE\r\n    &#x5B;StateProvinceID] &gt; 4\r\n    AND &#x5B;StateProvinceId] &lt; 15;\r\nGO\r\n\r\nSELECT\r\n    *\r\nFROM\r\n    sys.dm_db_index_usage_stats\r\nWHERE\r\n    &#x5B;database_id] = DB_ID (N'AdventureWorks')\r\n    AND &#x5B;OBJECT_ID] = OBJECT_ID (N'AdventureWorks.Person.Address');\r\nGO\r\n<\/pre>\n<p>And there&#8217;s another row, showing a seek in one of the table&#8217;s non-clustered indexes.<\/p>\n<p>So, its easy to look at the index usage for particular tables and indexes. But how can you monitor this over time? This is easy too &#8211; let&#8217;s see how.<\/p>\n<p>First we need to create our own table to store snapshots of the DMV output.<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nIF OBJECTPROPERTY (OBJECT_ID (N'master.dbo.MyIndexUsageStats'),'IsUserTable') = 1\r\n    DROP TABLE &#x5B;master].&#x5B;dbo].&#x5B;MyIndexUsageStats];\r\nGO\r\n\r\nSELECT\r\n    GETDATE () AS &#x5B;ExecutionTime],\r\n    *\r\nINTO\r\n    &#x5B;master].&#x5B;dbo].&#x5B;MyIndexUsageStats]\r\nFROM\r\n    sys.dm_db_index_usage_stats\r\nWHERE\r\n    &#x5B;database_id] = 0;\r\nGO\r\n<\/pre>\n<p>Next we need to take a baseline snapshot of the DMV output.<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nINSERT\r\n    &#x5B;master].&#x5B;dbo].&#x5B;MyIndexUsageStats]\r\nSELECT\r\n    GETDATE (),\r\n    *\r\nFROM\r\n    sys.dm_db_index_usage_stats;\r\nGO\r\n<\/pre>\n<p>And now simulate a few operations and take another snapshot of the DMV:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT\r\n    *\r\nFROM\r\n    &#x5B;AdventureWorks].&#x5B;Person].&#x5B;Address];\r\nGO\r\n\r\nSELECT\r\n    *\r\nFROM\r\n    &#x5B;AdventureWorks].&#x5B;Person].&#x5B;Address];\r\nGO\r\n\r\nSELECT\r\n    &#x5B;StateProvinceID]\r\nFROM\r\n    &#x5B;AdventureWorks].&#x5B;Person].&#x5B;Address]\r\n\r\nWHERE\r\n    &#x5B;StateProvinceID] &gt; 4\r\n    AND &#x5B;StateProvinceId] &lt; 15;\r\nGO\r\n\r\nINSERT\r\n    &#x5B;master].&#x5B;dbo].&#x5B;MyIndexUsageStats]\r\nSELECT\r\n    GETDATE (),\r\n    *\r\nFROM\r\n    sys.dm_db_index_usage_stats;\r\nGO\r\n<\/pre>\n<p>And look at the filtered contents of our snapshot table:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT\r\n    *\r\nFROM\r\n    &#x5B;master].&#x5B;dbo].&#x5B;MyIndexUsageStats]\r\nWHERE\r\n    &#x5B;database_id] = DB_ID (N'AdventureWorks')\r\n    AND &#x5B;OBJECT_ID] = OBJECT_ID (N'AdventureWorks.Person.Address');\r\nGO\r\n<\/pre>\n<p>You should see four rows &#8211; two from the baseline snapshot and two from the final snapshot. If you ran just the statements above, you&#8217;ll see that the user_scans count for the clustered index has increased by two, and the user_seeks count for the non-clustered index has increased by one.<\/p>\n<p>So this is a pretty simple example of how you can track index usage.<\/p>\n<p><b>Here&#8217;s the catch:<\/b> you need to consider an entire business cycle before deciding whether an index can be removed or not. An index may only be used once a month for reporting, or an &#8216;executive&#8217; query so make sure you cover all possible times that an index may be used. And even if an index isn&#8217;t used, make sure it&#8217;s not enforcing a uniqueness constraint, as the query optimizer may need the index to exist.<\/p>\n<p>Don&#8217;t just blindly drop all the indexes that don&#8217;t show up in the output &#8211; make sure they *really* haven&#8217;t been used.<\/p>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Whenever I&#8217;m discussing index maintenance, and specifically fragmentation, I always make a point of saying &#8216;Make sure the index is being used before doing anything about fragmentation&#8217;. If an index isn&#8217;t being used very much, but has very low page density (lots of free space in the index pages), then it will be occupying a [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,38,47,66],"tags":[],"class_list":["post-1162","post","type-post","status-publish","format-standard","hentry","category-database-maintenance","category-example-scripts","category-indexes-from-every-angle","category-performance-tuning"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Indexes From Every Angle: How can you tell if an index is being used? - Paul S. Randal<\/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\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Indexes From Every Angle: How can you tell if an index is being used? - Paul S. Randal\" \/>\n<meta property=\"og:description\" content=\"Whenever I&#8217;m discussing index maintenance, and specifically fragmentation, I always make a point of saying &#8216;Make sure the index is being used before doing anything about fragmentation&#8217;. If an index isn&#8217;t being used very much, but has very low page density (lots of free space in the index pages), then it will be occupying a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2007-10-05T01:39:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-06-07T09:55:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg\" \/>\n<meta name=\"author\" content=\"Paul Randal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Randal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/\",\"name\":\"Indexes From Every Angle: How can you tell if an index is being used? - Paul S. Randal\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg\",\"datePublished\":\"2007-10-05T01:39:42+00:00\",\"dateModified\":\"2013-06-07T09:55:20+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#primaryimage\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg\",\"contentUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Indexes From Every Angle: How can you tell if an index is being used?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\",\"name\":\"Paul S. Randal\",\"description\":\"In Recovery...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\",\"name\":\"Paul Randal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"caption\":\"Paul Randal\"},\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/paul\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Indexes From Every Angle: How can you tell if an index is being used? - Paul S. Randal","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\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/","og_locale":"en_US","og_type":"article","og_title":"Indexes From Every Angle: How can you tell if an index is being used? - Paul S. Randal","og_description":"Whenever I&#8217;m discussing index maintenance, and specifically fragmentation, I always make a point of saying &#8216;Make sure the index is being used before doing anything about fragmentation&#8217;. If an index isn&#8217;t being used very much, but has very low page density (lots of free space in the index pages), then it will be occupying a [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/","og_site_name":"Paul S. Randal","article_published_time":"2007-10-05T01:39:42+00:00","article_modified_time":"2013-06-07T09:55:20+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg","type":"","width":"","height":""}],"author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/","name":"Indexes From Every Angle: How can you tell if an index is being used? - Paul S. Randal","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg","datePublished":"2007-10-05T01:39:42+00:00","dateModified":"2013-06-07T09:55:20+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#primaryimage","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg","contentUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/content\/binary\/indexusage11.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/indexes-from-every-angle-how-can-you-tell-if-an-index-is-being-used\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"Indexes From Every Angle: How can you tell if an index is being used?"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/","name":"Paul S. Randal","description":"In Recovery...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce","name":"Paul Randal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","caption":"Paul Randal"},"sameAs":["http:\/\/3.209.169.194\/blogs\/paul"],"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/1162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/comments?post=1162"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/1162\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=1162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=1162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=1162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}