{"id":2250,"date":"2016-10-11T06:20:36","date_gmt":"2016-10-11T06:20:36","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2250"},"modified":"2025-10-09T06:41:31","modified_gmt":"2025-10-09T13:41:31","slug":"1-making-most-of-your-arrays-with-covering-array-indexes-and-more","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/","title":{"rendered":"Aproveitamento m\u00e1ximo de suas matrizes com \u00edndices de matrizes de cobertura e muito mais..."},"content":{"rendered":"<p>Viva!!! Acabamos de lan\u00e7ar <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/download\/\">Servidor Couchbase 4.5<\/a> que traz uma bagagem cheia de recursos e aprimoramentos maravilhosos. Minha postagem anterior <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/making-the-most-of-your-arrays-with-array-indexing\/\">Aproveitando ao m\u00e1ximo suas matrizes... com a indexa\u00e7\u00e3o de matrizes<\/a> apresentou a funcionalidade de indexa\u00e7\u00e3o de matriz. Esta postagem do blog inclui a cobertura de \u00edndices de matriz, suporte para mais operadores, como UNNEST, ALL, ANY AND EVERY etc,<\/p>\n<h2>Cobertura de \u00edndices de matriz<\/h2>\n<p><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.5\/indexes\/covering-indexes.html\"><span>\u00a0<\/span>\u00cdndices de cobertura<\/a> \u00e9 um recurso de desempenho do N1QL que melhora significativamente o desempenho da consulta, evitando viagens ao servi\u00e7o de dados para buscar documentos. N\u00e3o h\u00e1 sintaxe especial para criar\/usar \u00edndices de cobertura. Essa \u00e9 uma otimiza\u00e7\u00e3o autom\u00e1tica acionada no N1QL, quando uma consulta pode encontrar todos os dados necess\u00e1rios no pr\u00f3prio \u00edndice.  Portanto, os \u00edndices cobertos s\u00e3o apenas GSI normais<span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">\u00a0que s\u00e3o criados com todas as chaves de \u00edndice que abrangem os dados necess\u00e1rios para uma consulta. <\/span><\/p>\n<p><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Normalmente, os \u00edndices de matriz s\u00e3o criados com os elementos\/atributos necess\u00e1rios dentro da matriz, como chaves de \u00edndice.<\/span>\u00a0E os \u00edndices de cobertura n\u00e3o precisam de nenhuma aten\u00e7\u00e3o especial. No entanto, <strong>para criar \u00edndices de matriz de cobertura, o\u00a0<span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">A pr\u00f3pria matriz DEVE tamb\u00e9m ser<\/span>\u00a0adicionado \u00e0 lista de outras chaves de \u00edndice fornecidas \u00e0 instru\u00e7\u00e3o CREATE INDEX.<\/strong>\u00a0Todos os detalhes da matriz s\u00e3o necess\u00e1rios para que o N1QL avalie corretamente os predicados na consulta. \u00a0<span style=\"line-height: 1.6em\">Por exemplo, o comando a seguir cria um \u00edndice de matriz de cobertura no '<em>schedule[].flight'<\/em> nos valores do couchbase '<em>amostra de viagem<\/em> conjunto de dados:<\/span><\/p>\n<pre style=\"background-color: #eaeaea\"><code class=\"language-sql\">          CREATE INDEX isched\r\n          ON `travel-sample`(DISTINCT ARRAY i.flight FOR i IN schedule END, schedule)\r\n          WHERE (type = \"route\") AND (array_length(schedule) &lt; 10);<\/code><\/pre>\n<p>Observe que o campo de matriz '<em>programa\u00e7\u00e3o<\/em>\u00a0tamb\u00e9m precisa ser especificado como uma chave de \u00edndice adicional. Por outro lado, um \u00edndice de matriz sem cobertura n\u00e3o precisa disso e \u00e9 criado da seguinte forma:<\/p>\n<pre style=\"background-color: #eaeaea\"><code class=\"language-sql\">          CREATE INDEX isched\r\n          ON `travel-sample`(DISTINCT ARRAY i.flight FOR i IN schedule END)\r\n          WHERE (type = \"route\") AND (array_length(schedule) &lt; 10);<\/code><\/pre>\n<p>O comando SELECT a seguir mostra como usar o \u00edndice de matriz de cobertura. Ele encontra <em>\"os hor\u00e1rios das rotas de voo da United Airlines que t\u00eam menos de 10 voos programados em uma semana\"<\/em>.<\/p>\n<pre style=\"background-color: #eaeaea\"><code class=\"language-sql\">EXPLAIN SELECT schedule FROM `travel-sample` \r\nUSE INDEX(isched_covered)\r\nWHERE ANY i IN schedule SATISFIES i.flight LIKE \"UA%\" END\r\n      AND array_length(schedule) &lt; 10 \r\n      AND type = \"route\";\r\n[\r\n  {\r\n    \"plan\": {\r\n      \"#operator\": \"Sequence\",\r\n      \"~children\": [\r\n        {\r\n          \"#operator\": \"DistinctScan\",\r\n          \"scan\": {\r\n            \"#operator\": \"IndexScan\",\r\n            \"covers\": [\r\n              \"cover ((distinct (array (`i`.`flight`) for `i` in (`travel-sample`.`schedule`) end)))\",\r\n              \"cover ((`travel-sample`.`schedule`))\",\r\n              \"cover ((meta(`travel-sample`).`id`))\"\r\n            ],\r\n            \"filter_covers\": {\r\n              \"cover ((`travel-sample`.`type`))\": \"route\",\r\n              \"cover ((array_length((`travel-sample`.`schedule`)) &lt; 10))\": true\r\n            },\r\n            \"index\": \"isched_covered\",\r\n            \"index_id\": \"547b2c11add40fa6\",\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\",\r\n            \"spans\": [\r\n              {\r\n                \"Range\": {\r\n                  \"High\": [\r\n                    \"\"UB\"\"\r\n                  ],\r\n                  \"Inclusion\": 0,\r\n                  \"Low\": [\r\n                    \"\"UA\"\",\r\n                    \"null\"\r\n                  ]\r\n                }\r\n              }\r\n            ],\r\n            \"using\": \"gsi\"\r\n          }\r\n        },\r\n        {\r\n          \"#operator\": \"Parallel\",\r\n          \"~child\": {\r\n            \"#operator\": \"Sequence\",\r\n            \"~children\": [\r\n              {\r\n                \"#operator\": \"Filter\",\r\n                \"condition\": \"((any `i` in cover ((`travel-sample`.`schedule`)) satisfies ((`i`.`flight`) like \"UA%\") end and cover ((array_length((`travel-sample`.`schedule`)) &lt; 10))) and (cover ((`travel-sample`.`type`)) = \"route\"))\"\r\n              },\r\n              {\r\n                \"#operator\": \"InitialProject\",\r\n                \"result_terms\": [\r\n                  {\r\n                    \"expr\": \"cover ((`travel-sample`.`schedule`))\"\r\n                  }\r\n                ]\r\n              },\r\n              {\r\n                \"#operator\": \"FinalProject\"\r\n              }\r\n            ]\r\n          }\r\n        }\r\n      ]\r\n    },\r\n    \"text\": \"SELECT schedule FROM `travel-sample` USE INDEX(isched_covered)nWHERE ANY i IN schedule SATISFIES i.flight LIKE \"UA%\" ENDn      AND array_length(schedule) &lt; 10 n      AND type = \"route\";\"\r\n  }\r\n]<\/code><\/pre>\n<p>Observe que o SELECT segue as regras de sele\u00e7\u00e3o de \u00edndices descritas na pr\u00f3xima subse\u00e7\u00e3o.<\/p>\n<ul>\n<li>Os predicados na cl\u00e1usula where (<em>array_length(schedule) &lt; 10)\u00a0<\/em>e (<em>type = \"route\")<\/em> correspondem aos da defini\u00e7\u00e3o do \u00edndice.<\/li>\n<li>As chaves de \u00edndice\u00a0<em>i. Voo<\/em>\u00a0e\u00a0<em>cronograma<\/em>\u00a0s\u00e3o referenciados, usando a vari\u00e1vel exata \u00a0<em>'i'<\/em>\u00a0usado na defini\u00e7\u00e3o do \u00edndice<\/li>\n<li>O plano de consulta de explica\u00e7\u00e3o mostra os atributos e filtros\/predicados cobertos pelo \u00edndice de matriz '<em>isched_covered'<\/em><\/li>\n<\/ul>\n<h3><strong>Desempenho<\/strong><\/h3>\n<p>Os \u00edndices Covered Array obt\u00eam o melhor desempenho para consultas que podem aproveitar o \u00edndice. Por exemplo, <span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">\u00a0<\/span>A consulta acima levou 8ms <span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">em meu laptop,\u00a0<\/span>ao usar o \u00edndice de matriz coberto '<em>isched_covered<\/em>'. No entanto, a mesma consulta usando o \u00edndice '<em>def_type<\/em>' levou 3 segundos. Isso \u00e9 uma loucura <u><strong>375x<\/strong> <strong>melhor desempenho<\/strong><\/u> para essa consulta.<\/p>\n<h2 style=\"margin-top: 0.7em;color: #333333;text-align: left\">Regras de sele\u00e7\u00e3o de \u00edndices<\/h2>\n<p style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Independentemente dos operadores usados, a DML deve seguir os requisitos de sele\u00e7\u00e3o de \u00edndice para usar o \u00edndice da matriz.<\/p>\n<ol style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">\n<li>O<em>\u00a0Cl\u00e1usula WHERE<\/em>\u00a0deve ser usado nas instru\u00e7\u00f5es SELECT ou em outras instru\u00e7\u00f5es DML, com chaves de \u00edndice correspondentes especificadas na defini\u00e7\u00e3o CREATE INDEX.<\/li>\n<li>Para \u00edndices parciais, os predicados usados na defini\u00e7\u00e3o de CREATE INDEX devem ser especificados no\u00a0<em>Cl\u00e1usula WHERE<\/em>\u00a0do DML.<\/li>\n<li>Nomes de vari\u00e1veis no\u00a0<em>Cl\u00e1usula WHERE<\/em>\u00a0devem corresponder exatamente aos nomes de vari\u00e1veis correspondentes usados na defini\u00e7\u00e3o de CREATE INDEX.<\/li>\n<\/ol>\n<p style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Quando v\u00e1rios \u00edndices correspondentes est\u00e3o dispon\u00edveis, o N1QL pode escolher qualquer um dos \u00edndices correspondentes para executar a consulta. Se voc\u00ea preferir que sua consulta utilize um \u00edndice espec\u00edfico, poder\u00e1 \"sugeri-lo\" usando a cl\u00e1usula USE INDEX na DML.<\/p>\n<h2><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Suporte para mais operadores N1QL<\/span><\/h2>\n<p>O Couchbase 4.5 adiciona suporte para os operadores <strong>IN\u00daTIL<\/strong>\u00a0e <strong>QUALQUER E TODOS<\/strong> para trabalhar com \u00edndices de matriz.  Esses operadores podem ser usados nas consultas com \u00edndices de matriz cobertos e n\u00e3o cobertos. Observe que:<\/p>\n<ul>\n<li><strong>QUALQUER<\/strong> j\u00e1 \u00e9 compat\u00edvel com o operador i<span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">na vers\u00e3o Developer Preview. Veja o exemplo acima.<\/span><\/li>\n<li><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\"><strong>TODOS<\/strong> n\u00e3o \u00e9 compat\u00edvel com o Couchbase 4.5.  No entanto, observe que o operador ANY AND EVERY \u00e9 compat\u00edvel.  Para esclarecer, o operador EVERY \u00e9 avaliado como verdadeiro para matrizes com zero elementos, enquanto ANY AND EVERY \u00e9 avaliado como verdadeiro quando a matriz tem pelo menos um elemento correspondente.<\/span><\/li>\n<\/ul>\n<h2>Usando UNNEST com \u00edndices de matriz<\/h2>\n<p><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">A indexa\u00e7\u00e3o por matriz oferece suporte \u00e0 fun\u00e7\u00e3o\u00a0<\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/from.html\">IN\u00daTIL<\/a> que pode ser usado para achatar o atributo de matriz no qual o \u00edndice \u00e9 criado e us\u00e1-lo como parte da consulta. A instru\u00e7\u00e3o UNNEST deve usar exatamente o mesmo nome de vari\u00e1vel (ou seja, '<em>i\u00a0<\/em>' neste exemplo), conforme usado na instru\u00e7\u00e3o CREATE INDEX. Por exemplo, a consulta a seguir encontra <em>&#8220;<\/em><em style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">os detalhes das rotas de voo da United Airlines que t\u00eam menos de 10 voos programados em uma semana<\/em><em>&#8220;<\/em>.<\/p>\n<pre style=\"background-color: #eaeaea\"><code class=\"language-sql\">EXPLAIN SELECT i FROM `travel-sample` t \r\nUSE INDEX (isched_covered) \r\nUNNEST t.schedule AS i \r\nWHERE (i.flight LIKE \"UA%\") AND (array_length(t.schedule) &lt; 10) AND (t.type = \"route\");\r\n[\r\n  {\r\n    \"plan\": {\r\n      \"#operator\": \"Sequence\",\r\n      \"~children\": [\r\n        {\r\n          \"#operator\": \"DistinctScan\",\r\n          \"scan\": {\r\n            \"#operator\": \"IndexScan\",\r\n            \"covers\": [\r\n              \"cover ((distinct (array (`i`.`flight`) for `i` in (`t`.`schedule`) end)))\",\r\n              \"cover ((`t`.`schedule`))\",\r\n              \"cover ((meta(`t`).`id`))\"\r\n            ],\r\n            \"filter_covers\": {\r\n              \"cover ((`t`.`type`))\": \"route\",\r\n              \"cover ((array_length((`t`.`schedule`)) &lt; 10))\": true\r\n            },\r\n            \"index\": \"isched_covered\",\r\n            \"index_id\": \"547b2c11add40fa6\",\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\",\r\n            \"spans\": [\r\n              {\r\n                \"Range\": {\r\n                  \"High\": [\r\n                    \"\"UB\"\"\r\n                  ],\r\n                  \"Inclusion\": 1,\r\n                  \"Low\": [\r\n                    \"\"UA\"\"\r\n                  ]\r\n                }\r\n              }\r\n            ],\r\n            \"using\": \"gsi\"\r\n          }\r\n        },\r\n        {\r\n          \"#operator\": \"Parallel\",\r\n          \"~child\": {\r\n            \"#operator\": \"Sequence\",\r\n            \"~children\": [\r\n              {\r\n                \"#operator\": \"Unnest\",\r\n                \"as\": \"i\",\r\n                \"expr\": \"cover ((`t`.`schedule`))\"\r\n              },\r\n              {\r\n                \"#operator\": \"Filter\",\r\n                \"condition\": \"((((`i`.`flight`) like \"UA%\") and cover ((array_length((`t`.`schedule`)) &lt; 10))) and (cover ((`t`.`type`)) = \"route\"))\"\r\n              },\r\n              {\r\n                \"#operator\": \"InitialProject\",\r\n                \"result_terms\": [\r\n                  {\r\n                    \"expr\": \"`i`\"\r\n                  }\r\n                ]\r\n              },\r\n              {\r\n                \"#operator\": \"FinalProject\"\r\n              }\r\n            ]\r\n          }\r\n        }\r\n      ]\r\n    },\r\n    \"text\": \"SELECT i FROM `travel-sample` t nUSE INDEX (isched_covered) nUNNEST t.schedule AS i nWHERE (i.flight LIKE \"UA%\") AND (array_length(t.schedule) &lt; 10) AND (t.type = \"route\");\"\r\n  }\r\n]<\/code><\/pre>\n<p><strong style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Desempenho<\/strong><\/p>\n<p><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Coberto\u00a0<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Os \u00edndices de matriz obt\u00eam o melhor desempenho para consultas que podem aproveitar o \u00edndice. Por exemplo,\u00a0<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">\u00a0<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">a consulta acima levou 8<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">ms\u00a0<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">em meu laptop,\u00a0<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">quando estiver usando o<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">\u00a0\u00edndice da matriz '<\/span><em style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">isched_covered<\/em><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">&#8216;<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">. No entanto, a mesma consulta usando o \u00edndice '<\/span><em style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">def_type<\/em><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">' levou 28<\/span><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">sec. Isso \u00e9 uma loucura\u00a0<u><strong>Desempenho 3500 vezes melhor<\/strong><\/u> para essa consulta.<\/span><\/p>\n<h2>Usando ANY AND EVERY com \u00edndices de matriz<\/h2>\n<p><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">Suportes de indexa\u00e7\u00e3o de matriz\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/collectionops.html\">QUALQUER E TODOS<\/a> operador. Isso pode ser usado para encontrar uma correspond\u00eancia booleana em um conjunto n\u00e3o nulo de elementos de matriz no qual o \u00edndice de matriz \u00e9 criado. Por exemplo, a consulta a seguir encontra\u00a0<em>\u00a0\"O <\/em><\/span><em style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\">cronograma<\/em><span style=\"color: #333333;line-height: 20.799999237060547px;text-align: left\"><em>\u00a0de rotas que t\u00eam pelo menos 1, mas menos de 10, todos os voos da United Airlines em uma semana\"<\/em>.<\/span><\/p>\n<pre style=\"background-color: #eaeaea\"><code class=\"language-sql\">SELECT schedule FROM `travel-sample`\r\nUSE INDEX (isched_covered)\r\nWHERE ANY AND EVERY i IN schedule SATISFIES i.flight LIKE 'UA%' END\r\nAND array_length(schedule) &lt; 10\r\nAND type = \"route\";<\/code><\/pre>\n<h2 dir=\"ltr\" style=\"line-height: 1.44;margin-top: 12pt;margin-bottom: 5pt\"><span style=\"font-size: 22.666666666666664px;font-family: Arial;color: #333333;vertical-align: baseline\">Usando ALL com \u00edndice de matriz<\/span><\/h2>\n<p dir=\"ltr\" style=\"line-height: 1.8719999313354492;margin-top: 0pt;margin-bottom: 3pt\"><span style=\"color: #333333;font-family: Arial;line-height: 24px;text-align: left\">No Couchbase 4.5<\/span>os \u00edndices de matriz podem ser criados usando\u00a0<span style=\"color: #333333;font-family: Arial;line-height: 24px;text-align: left\">CREATE INDEX somente com a palavra-chave DISTINCT ARRAY.<\/span>\u00a0<span style=\"font-size: 13.333333333333332px;font-family: Arial;color: #333333;font-weight: 400;vertical-align: baseline\">A vers\u00e3o 4.5 do Couchbase adiciona suporte \u00e0 palavra-chave ALL para criar o \u00edndice do array com todos os valores dos elementos do array. Por exemplo, <\/span><\/p>\n<pre style=\"background-color: #eaeaea\"><code class=\"language-sql\">         CREATE INDEX isched_all\r\n         ON `travel-sample`(ALL ARRAY i.flight FOR i IN schedule END)\r\n         WHERE (type = \"route\") AND (array_length(schedule) &lt; 10);<\/code><\/pre>\n<p dir=\"ltr\" style=\"margin-top: 0pt;margin-bottom: 0pt\"><span style=\"background-color: transparent;vertical-align: baseline\">Voc\u00ea pode saber mais sobre indexa\u00e7\u00e3o de array e ver mais exemplos, como \u00edndices de array composto e aninhado, na se\u00e7\u00e3o Couchbase 4.5 <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.5\/n1ql\/n1ql-language-reference\/indexing-arrays.html\">documenta\u00e7\u00e3o<\/a>e confira o<\/span> <a style=\"text-decoration: none\" href=\"https:\/\/www.youtube.com\/v\/FuCaLGT_q1g?start=36&amp;end=216\"><span style=\"color: #0000ff;background-color: transparent;text-decoration: underline;vertical-align: baseline\">demonstra\u00e7\u00e3o.<\/span><\/a><\/p>\n<p dir=\"ltr\" style=\"margin-top: 0pt;margin-bottom: 0pt\">Experimente e me informe se tiver alguma d\u00favida\/coment\u00e1rio ou se ele \u00e9 incr\u00edvel ;-)<\/p>\n<p>Sa\u00fade!!!<\/p>","protected":false},"excerpt":{"rendered":"<p>Hurrah!! We just released Couchbase Server 4.5 which brings a bag full of wonderful features and enhancements. My earlier post Making the most of your arrays&#8230; with Array Indexing introduced the\u00a0Array Indexing functionality. This blog post includes covering array indexes, [&hellip;]<\/p>","protected":false},"author":70,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1812],"tags":[2012],"ppma_author":[8935],"class_list":["post-2250","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-n1ql-query","tag-array-indexing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Composite and nested array indexes in the Couchbase 4.5<\/title>\n<meta name=\"description\" content=\"Learn how to create Covering Array Indexes, the array itself MUST also be added to the list of other index keys provided to the CREATE INDEX statement.\" \/>\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\/pt\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Making most of your Arrays.. with Covering Array Indexes and more..\" \/>\n<meta property=\"og:description\" content=\"Learn how to create Covering Array Indexes, the array itself MUST also be added to the list of other index keys provided to the CREATE INDEX statement.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-11T06:20:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T13:41:31+00:00\" \/>\n<meta name=\"author\" content=\"Prasad Varakur, Principal 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=\"Prasad Varakur, Principal 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\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/\"},\"author\":{\"name\":\"Prasad Varakur, Principal Product Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c649b2296584f6b734c5a21681137e46\"},\"headline\":\"Making most of your Arrays.. with Covering Array Indexes and more..\",\"datePublished\":\"2016-10-11T06:20:36+00:00\",\"dateModified\":\"2025-10-09T13:41:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/\"},\"wordCount\":907,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Array Indexing\"],\"articleSection\":[\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/\",\"name\":\"Composite and nested array indexes in the Couchbase 4.5\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-10-11T06:20:36+00:00\",\"dateModified\":\"2025-10-09T13:41:31+00:00\",\"description\":\"Learn how to create Covering Array Indexes, the array itself MUST also be added to the list of other index keys provided to the CREATE INDEX statement.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Making most of your Arrays.. with Covering Array Indexes and more..\"}]},{\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c649b2296584f6b734c5a21681137e46\",\"name\":\"Prasad Varakur, Principal Product Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5d664f4b9aadb80e438fd06cce0d151e\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3dd2299380c7af4e8a9732a0465d1c082c95eaff26cdf4abf54816d9b693043a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3dd2299380c7af4e8a9732a0465d1c082c95eaff26cdf4abf54816d9b693043a?s=96&d=mm&r=g\",\"caption\":\"Prasad Varakur, Principal Product Manager, Couchbase\"},\"description\":\"Prasad Varakur is a Principal Product Manager, Couchbase. Prasad is Product and Engineering leader in Databases(SQL, noSQL, Bigdata) &amp; Distributed systems.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/prasad-varakur\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Composite and nested array indexes in the Couchbase 4.5","description":"Learn how to create Covering Array Indexes, the array itself MUST also be added to the list of other index keys provided to the CREATE INDEX statement.","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\/pt\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/","og_locale":"pt_BR","og_type":"article","og_title":"Making most of your Arrays.. with Covering Array Indexes and more..","og_description":"Learn how to create Covering Array Indexes, the array itself MUST also be added to the list of other index keys provided to the CREATE INDEX statement.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-10-11T06:20:36+00:00","article_modified_time":"2025-10-09T13:41:31+00:00","author":"Prasad Varakur, Principal Product Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prasad Varakur, Principal Product Manager, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/"},"author":{"name":"Prasad Varakur, Principal Product Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c649b2296584f6b734c5a21681137e46"},"headline":"Making most of your Arrays.. with Covering Array Indexes and more..","datePublished":"2016-10-11T06:20:36+00:00","dateModified":"2025-10-09T13:41:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/"},"wordCount":907,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Array Indexing"],"articleSection":["SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/","url":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/","name":"Composite and nested array indexes in the Couchbase 4.5","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-10-11T06:20:36+00:00","dateModified":"2025-10-09T13:41:31+00:00","description":"Learn how to create Covering Array Indexes, the array itself MUST also be added to the list of other index keys provided to the CREATE INDEX statement.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/1-making-most-of-your-arrays-with-covering-array-indexes-and-more\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Making most of your Arrays.. with Covering Array Indexes and more.."}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c649b2296584f6b734c5a21681137e46","name":"Prasad Varakur, gerente principal de produtos da Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5d664f4b9aadb80e438fd06cce0d151e","url":"https:\/\/secure.gravatar.com\/avatar\/3dd2299380c7af4e8a9732a0465d1c082c95eaff26cdf4abf54816d9b693043a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3dd2299380c7af4e8a9732a0465d1c082c95eaff26cdf4abf54816d9b693043a?s=96&d=mm&r=g","caption":"Prasad Varakur, Principal Product Manager, Couchbase"},"description":"Prasad Varakur \u00e9 gerente de produto principal da Couchbase. Prasad \u00e9 l\u00edder de produtos e engenharia em bancos de dados (SQL, noSQL, Bigdata) e sistemas distribu\u00eddos.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/prasad-varakur\/"}]}},"authors":[{"term_id":8935,"user_id":70,"is_guest":0,"slug":"prasad-varakur","display_name":"Prasad Varakur, Principal Product Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3dd2299380c7af4e8a9732a0465d1c082c95eaff26cdf4abf54816d9b693043a?s=96&d=mm&r=g","author_category":"","last_name":"Varakur","first_name":"Prasad","job_title":"","user_url":"","description":"Prasad Varakur \u00e9 gerente de produto principal da Couchbase. Prasad \u00e9 l\u00edder de produtos e engenharia em bancos de dados (SQL, noSQL, Bigdata) e sistemas distribu\u00eddos."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/70"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2250"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2250\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2250"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}