{"id":367,"date":"2015-11-10T01:08:32","date_gmt":"2015-11-10T01:08:31","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/"},"modified":"2015-11-10T01:08:32","modified_gmt":"2015-11-10T01:08:31","slug":"covering-indexes-for-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/covering-indexes-for-n1ql\/","title":{"rendered":"Covering Indexes in 4.1 Developer Preview :  We\u2019ve got you \u201ccovered\u201d"},"content":{"rendered":"\n<p><span>With the Couchbase Server <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/introduction\/whats-new.html\"><span>4.0 GA <\/span><\/a><span>&#8211; we gave you N1QL which was a key enabler to Develop with Agility, and Operate at Scale! Now, we are pleased to announce the <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/announcing-couchbase-server-4.1-dp\/\"><span>developer preview release of 4.1<\/span><\/a><span> &#8211; which has valuable stability fixes. Embedded within that is a key feature called Covering Indexes. <\/span><\/p>\n\n\n\n<p><span>Covering Index is an exciting new N1QL feature in 4.1 release which provides the ability for an application, that leverages it appropriately, to recognize a noticeable query performance improvement in many cases. A covered query is a N1QL query in which all the fields in the query are part of an index, and all the fields returned in the query are in the same index.<\/span><\/p>\n\n\n\n<p><span>Prior to this improvement, if you take a look at the query execution flow, it is as follows:<\/span><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<p dir=\"ltr\"><span>The application client issues a query request to the server via a Rest API<\/span><\/p>\n<\/li>\n\n\n<li>\n<p dir=\"ltr\"><span>The query service goes through a Parsing and Analysis phase, and generates a Query Plan.<\/span><\/p>\n<\/li>\n\n\n<li>\n<p dir=\"ltr\"><span>The query service issues scan requests to the Index Service if there is a valid index for the situation<\/span><\/p>\n<\/li>\n\n\n<li>\n<p dir=\"ltr\"><span>Gets back the qualified document keys from the Index service<\/span><\/p>\n<\/li>\n\n\n<li>\n<p dir=\"ltr\"><span>Sends the document keys to the Data Service (a \u2018fetch request\u2019)<\/span><\/p>\n<\/li>\n\n\n<li>\n<p dir=\"ltr\"><span>Gets the documents back from the Data Service<\/span><\/p>\n<\/li>\n\n\n<li>\n<p dir=\"ltr\"><span>Evaluates the documents (re-apply filter criteria etc)<\/span><\/p>\n<\/li>\n\n\n<li>\n<p dir=\"ltr\"><span>Sends the final filtered results back to the client<\/span><\/p>\n<\/li>\n\n<\/ol>\n\n\n\n<p><span>In a well designed application, the steps 5 and 6 can be avoided using a covering index (which we highly recommend as the best practice), and that can result in a demonstrable performance improvement.<\/span><\/p>\n\n\n\n<p><span>The EXPLAIN statement in N1QL allows you to see the query execution plan. When a covering index is used for query execution, the EXPLAIN will now show that a covering index is used for data access (and key-value document fetches and associated overhead are avoided).<\/span><\/p>\n\n\n\n<p><span>Let\u2019s say that we create an index on the attribute \u201cstate\u201d in the beer-sample bucket.<\/span><\/p>\n\n\n\n<p><span>CREATE INDEX idxstate ON `beer-sample`(state) USING GSI<\/span><\/p>\n\n\n\n<p><span>Now if we select state from beer-sample, since all the data that is to be returned is present in the index, we can avoid key-value data fetches, and just return the data based on the index.<\/span><\/p>\n\n\n\n<p><span>EXPLAIN SELECT state FROM `beer-sample\u2019 WHERE state = \u201cCA\u201d<\/span><\/p>\n\n\n\n<p><span>&#8220;results&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;Sequence&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;~children&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;<\/span><span>IndexScan<\/span><span>&#8220;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>&#8220;covers&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;cover((`beer-sample`.`state`))&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;index&#8221;: &#8220;idxstate&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;keyspace&#8221;: &#8220;beer-sample&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;namespace&#8221;: &#8220;default&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;spans&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Range&#8221;: {<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;High&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;&#8221;CA&#8221;&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;Inclusion&#8221;: 3,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Low&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;&#8221;CA&#8221;&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>]<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;using&#8221;: &#8220;gsi&#8221;<\/span><\/p>\n\n\n\n<p><span>Note:<\/span><span> The same index is NOT a covering index if the query were to be slightly modified.<\/span><\/p>\n\n\n\n<p><span>EXPLAIN SELECT state, city FROM `beer-sample` WHERE STATE = &#8220;CA&#8221;;<\/span><\/p>\n\n\n\n<p><span>It still uses the idxstate index, however, since the index does NOT contain the city information, it uses the index for faster lookup, but not as a covering index.<\/span><\/p>\n\n\n\n<p><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;requestID&#8221;: &#8220;c60b10d2-2cab-4b6a-987c-e5e6ebe4a900&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;signature&#8221;: &#8220;json&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;results&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;Sequence&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;~children&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;<\/span><span>IndexScan<\/span><span>&#8220;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;index&#8221;: &#8220;idxstate&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;keyspace&#8221;: &#8220;beer-sample&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;namespace&#8221;: &#8220;default&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;spans&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Range&#8221;: {<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;High&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;&#8221;CA&#8221;&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Inclusion&#8221;: 3,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Low&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;&#8221;CA&#8221;&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>]<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;using&#8221;: &#8220;gsi&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>},<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;Parallel&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;~child&#8221;: {<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;Sequence&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;~children&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;<\/span><span>#operator&#8221;: &#8220;Fetch&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;keyspace&#8221;: &#8220;beer-sample&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;namespace&#8221;: &#8220;default&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>},<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;Filter&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;condition&#8221;: &#8220;((`beer-sample`.`state`) = &#8220;CA&#8221;)&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>},<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;InitialProject&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;result_terms&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;expr&#8221;: &#8220;(`beer-sample`.`state`)&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>},<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;expr&#8221;: &#8220;(`beer-sample`.`city`)&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>]<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>},<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;FinalProject&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>]&#8230;rest omitted for brevity<\/span><\/p>\n\n\n\n<p><span>How do we then convert this modified query to use a covering index?<\/span><br class=\"kix-line-break\"><span>Here you go,<\/span><\/p>\n\n\n\n<p><span>CREATE INDEX idxstatecity ON `beer-sample` (state, city) USING GSI<\/span><\/p>\n\n\n\n<p><span>Now, if we execute the query:<\/span><\/p>\n\n\n\n<p><span>EXPLAIN SELECT state, city <\/span><\/p>\n\n\n\n<p><span>FROM `beer-sample` USE INDEX (idxstatecity) <\/span><\/p>\n\n\n\n<p><span>WHERE STATE = &#8220;CA&#8221; ;<\/span><\/p>\n\n\n\n<p><span>Bingo! It becomes a query that uses a covering index<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;#operator&#8221;: &#8220;IndexScan&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;covers&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;cover((meta(`beer-sample`).`id`))&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;cover((`beer-sample`.`state`))&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;cover((`beer-sample`.`city`))&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;index&#8221;: &#8220;idxstatecity&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;keyspace&#8221;: &#8220;beer-sample&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;namespace&#8221;: &#8220;default&#8221;,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;spans&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>{<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Range&#8221;: {<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;High&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;successor(&#8220;CA&#8221;)&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Inclusion&#8221;: 1,<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;Low&#8221;: [<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;&#8221;CA&#8221;&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>]<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>}<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>],<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>&#8220;using&#8221;: &#8220;gsi&#8221;<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span>\u00a0\u00a0\u00a0 <\/span><span>},<\/span><\/p>\n\n\n\n<p><span>\u00a0\u00a0<\/span><\/p>\n\n\n\n<p><span>EXPRESSIONS AND AGGREGATES<\/span><\/p>\n\n\n\n<p><span>Queries with expressions and aggregates can benefit from covering index as well.<\/span><\/p>\n\n\n\n<p><span>CREATE INDEX idxstatecountry ON `beer-sample`(state, country) USING GSI<\/span><\/p>\n\n\n\n<p><span>SELECT country, max(state) <\/span><\/p>\n\n\n\n<p><span>FROM `beer-sample` USE INDEX (idxstatecountry)<\/span><\/p>\n\n\n\n<p><span>WHERE STATE LIKE &#8216;%&#8217; <\/span><\/p>\n\n\n\n<p><span>GROUP BY country<\/span><\/p>\n\n\n\n<p><span>UNION \/ INTERSECT \/ EXCEPT <\/span><\/p>\n\n\n\n<p><span>These are supported as well for covering indexes<\/span><\/p>\n\n\n\n<p><span>SELECT COUNTRY <\/span><\/p>\n\n\n\n<p><span>FROM `beer-sample` <\/span><\/p>\n\n\n\n<p><span>WHERE STATE = &#8216;CA&#8217;<\/span><\/p>\n\n\n\n<p><span>UNION ALL<\/span><\/p>\n\n\n\n<p><span>SELECT COUNTRY <\/span><\/p>\n\n\n\n<p><span>FROM `beer-sample` <\/span><\/p>\n\n\n\n<p><span>WHERE STATE = &#8216;Texas&#8217;<\/span><\/p>\n\n\n\n<p><span>And since the index is already sorted, when you use ORDER BY in the case of a covering index, there is an added benefit of the query engine already being able to use a sorted index.<\/span><\/p>\n\n\n\n<p><span>Please refer to our <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1-dp\/developer-guide\/covering-indexes.html\"><span>documentation<\/span><\/a><span> for more information and more scenarios where covering indexes will be useful to you. <\/span><\/p>\n\n\n\n<p><span>We strongly encourage you to try this feature in 4.1 developer preview, and give us your valuable <\/span><a href=\"https:\/\/www.couchbase.com\/forums\/\"><span>feedback<\/span><\/a><span>. <\/span><\/p>\n\n\n\n<p><span>You may also want to try out N1QL using the Developer Preview of the <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/developer-guide\/query-workbench-intro.html\"><span>Query Workbench<\/span><\/a><span>, \u00a0which provides a nice GUI for writing and executing N1QL queries.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>With the Couchbase Server 4.0 GA &#8211; we gave you N1QL which was a key enabler to Develop with Agility, and Operate at Scale! Now, we are pleased to announce the developer preview release of 4.1 &#8211; which has valuable stability fixes. Embedded within that is a key feature called Covering Indexes. Covering Index is [&hellip;]<\/p>\n","protected":false},"author":39,"featured_media":18,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[138],"class_list":["post-367","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Covering Indexes in 4.1 Developer Preview Release<\/title>\n<meta name=\"description\" content=\"Learn more about the new feature &quot;Covering Indexes&quot; embedded in the developer preview release of 4.1 which has valuable stability fixe\" \/>\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.couchbase.com\/blog\/es\/covering-indexes-for-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Covering Indexes in 4.1 Developer Preview : We\u2019ve got you \u201ccovered\u201d\" \/>\n<meta property=\"og:description\" content=\"Learn more about the new feature &quot;Covering Indexes&quot; embedded in the developer preview release of 4.1 which has valuable stability fixe\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/covering-indexes-for-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-11-10T01:08:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ilam Siva, SR. Product Manager, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ilam Siva, SR. Product Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/\"},\"author\":{\"name\":\"Ilam Siva, SR. Product Manager, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/b28482a2be0617cc239914487f3873af\"},\"headline\":\"Covering Indexes in 4.1 Developer Preview : We\u2019ve got you \u201ccovered\u201d\",\"datePublished\":\"2015-11-10T01:08:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/\"},\"wordCount\":782,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/\",\"name\":\"Covering Indexes in 4.1 Developer Preview Release\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-11-10T01:08:31+00:00\",\"description\":\"Learn more about the new feature \\\"Covering Indexes\\\" embedded in the developer preview release of 4.1 which has valuable stability fixe\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/covering-indexes-for-n1ql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Covering Indexes in 4.1 Developer Preview : We\u2019ve got you \u201ccovered\u201d\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/b28482a2be0617cc239914487f3873af\",\"name\":\"Ilam Siva, SR. Product Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1616892157452a8a9259927dfbef19ba8b3062e91308f39e46efce3f03738746?s=96&d=mm&r=g7e4a688afe7b38f57aa80ec35aaabe6b\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1616892157452a8a9259927dfbef19ba8b3062e91308f39e46efce3f03738746?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1616892157452a8a9259927dfbef19ba8b3062e91308f39e46efce3f03738746?s=96&d=mm&r=g\",\"caption\":\"Ilam Siva, SR. Product Manager, Couchbase\"},\"description\":\"A former Senior Product Manager at Couchbase, Ilam Siva is responsible for various areas of Couchbase Server product development, roadmap, positioning, messaging and collateral. Ilam is passionate about Big Data and NoSQL and believes that it will push the frontiers of scale, performance and capabilities of next generation applications. Prior to Couchbase, he has worked on Hadoop, Cloud platform and database technologies at Yahoo!, Microsoft and Oracle.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/ilam-siva\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Covering Indexes in 4.1 Developer Preview Release","description":"Learn more about the new feature \"Covering Indexes\" embedded in the developer preview release of 4.1 which has valuable stability fixe","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.couchbase.com\/blog\/es\/covering-indexes-for-n1ql\/","og_locale":"es_MX","og_type":"article","og_title":"Covering Indexes in 4.1 Developer Preview : We\u2019ve got you \u201ccovered\u201d","og_description":"Learn more about the new feature \"Covering Indexes\" embedded in the developer preview release of 4.1 which has valuable stability fixe","og_url":"https:\/\/www.couchbase.com\/blog\/es\/covering-indexes-for-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-11-10T01:08:31+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Ilam Siva, SR. Product Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ilam Siva, SR. Product Manager, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/"},"author":{"name":"Ilam Siva, SR. Product Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b28482a2be0617cc239914487f3873af"},"headline":"Covering Indexes in 4.1 Developer Preview : We\u2019ve got you \u201ccovered\u201d","datePublished":"2015-11-10T01:08:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/"},"wordCount":782,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/","name":"Covering Indexes in 4.1 Developer Preview Release","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","datePublished":"2015-11-10T01:08:31+00:00","description":"Learn more about the new feature \"Covering Indexes\" embedded in the developer preview release of 4.1 which has valuable stability fixe","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/covering-indexes-for-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Covering Indexes in 4.1 Developer Preview : We\u2019ve got you \u201ccovered\u201d"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b28482a2be0617cc239914487f3873af","name":"Ilam Siva, SR. Product Manager, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/1616892157452a8a9259927dfbef19ba8b3062e91308f39e46efce3f03738746?s=96&d=mm&r=g7e4a688afe7b38f57aa80ec35aaabe6b","url":"https:\/\/secure.gravatar.com\/avatar\/1616892157452a8a9259927dfbef19ba8b3062e91308f39e46efce3f03738746?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1616892157452a8a9259927dfbef19ba8b3062e91308f39e46efce3f03738746?s=96&d=mm&r=g","caption":"Ilam Siva, SR. Product Manager, Couchbase"},"description":"A former Senior Product Manager at Couchbase, Ilam Siva is responsible for various areas of Couchbase Server product development, roadmap, positioning, messaging and collateral. Ilam is passionate about Big Data and NoSQL and believes that it will push the frontiers of scale, performance and capabilities of next generation applications. Prior to Couchbase, he has worked on Hadoop, Cloud platform and database technologies at Yahoo!, Microsoft and Oracle.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/ilam-siva\/"}]}},"acf":[],"authors":[{"term_id":138,"user_id":39,"is_guest":0,"slug":"ilam-siva","display_name":"Ilam Siva, SR. Product Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=367"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/367\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/18"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=367"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}