{"id":3676,"date":"2017-06-21T08:06:12","date_gmt":"2017-06-21T15:06:12","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3676"},"modified":"2025-06-13T20:20:21","modified_gmt":"2025-06-14T03:20:21","slug":"n1ql-performance-feature-enhancements-couchbase-5-0","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-performance-feature-enhancements-couchbase-5-0\/","title":{"rendered":"Mejoras de rendimiento y funciones de N1QL en Couchbase 5.0"},"content":{"rendered":"<p>Con Couchbase 5.0 cerca de su lanzamiento estable, es una buena idea revisar algunas de las mejoras, tanto en rendimiento como en caracter\u00edsticas, que est\u00e1n llegando con la tecnolog\u00eda N1QL.<\/p>\n<p><!--more--><\/p>\n<p>\u00bfQu\u00e9 mejoras se han introducido en materia de rendimiento?<\/p>\n<h2>Mejoras en el rendimiento de N1QL<\/h2>\n<p>Tomemos como ejemplo la proyecci\u00f3n de \u00edndices.  Al crear un \u00edndice, puede crear uno con cualquier n\u00famero de propiedades.  Por ejemplo, tomemos el siguiente \u00edndice:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">CREATE INDEX idx ON default(type, firstname, lastname);<\/pre>\n<p>La sentencia anterior crear\u00e1 un \u00edndice de cobertura en el archivo\u00a0<code>por defecto<\/code> Cubo para el\u00a0<code>tipo<\/code>, <code>nombre<\/code>y\u00a0<code>apellido<\/code> de cualquier documento.<\/p>\n<p>Supongamos ahora que creamos la siguiente consulta N1QL para recuperar algunos documentos con la propiedad\u00a0<code>idx<\/code> \u00edndice que hab\u00edamos creado:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">SELECT firstname\r\nFROM default\r\nWHERE type = 'person'<\/pre>\n<p>La consulta anterior utilizar\u00eda la funci\u00f3n\u00a0<code>idx<\/code> y devolver s\u00f3lo el \u00edndice\u00a0<code>nombre<\/code>\u00a0para cada documento que coincida.  El concepto de consulta de esta forma no es nada nuevo, sin embargo, lo que ocurre entre bastidores ha cambiado.  Te dar\u00e1s cuenta de que aunque nuestro \u00edndice tiene muchas claves, s\u00f3lo estamos interesados en un subconjunto, o en este caso dos claves.<\/p>\n<p>\u00bfQu\u00e9 est\u00e1 pasando y por qu\u00e9 es importante?<\/p>\n<p>En versiones anteriores de Couchbase se tomaban en consideraci\u00f3n todas las claves del \u00edndice sin importar si s\u00f3lo se utilizaba un subconjunto.  Como resultado, se necesitaba m\u00e1s red, CPU y memoria para acomodar lo que estaba ocurriendo.  Ahora este no es el caso.<\/p>\n<p>Entonces, \u00bfc\u00f3mo saber si se est\u00e1 produciendo una proyecci\u00f3n de \u00edndice?<\/p>\n<p>Haga un\u00a0<code>EXPLICAR<\/code> en la consulta que est\u00e1s ejecutando:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">EXPLAIN SELECT firstname\r\nFROM default\r\nWHERE type = 'person'<\/pre>\n<p>En los resultados deber\u00eda ver algo relativo a\u00a0<code>proyecci\u00f3n_\u00edndice<\/code> que se parece a lo siguiente:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">...\r\n\"index_projection\": {\r\n    \"entry_keys\": [\r\n        0,\r\n        1\r\n    ]\r\n},\r\n...<\/pre>\n<p>En\u00a0<code>claves_de_entrada<\/code> cambiar\u00e1 en funci\u00f3n de su consulta.  Por ejemplo, \u00bfqu\u00e9 pasa si a\u00f1adimos una\u00a0<code>DONDE<\/code> condici\u00f3n as\u00ed?:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">SELECT firstname\r\nFROM default\r\nWHERE type = 'person' AND lastname = 'Nic'<\/pre>\n<p>En el escenario anterior, obtendr\u00edamos un\u00a0<code>EXPLICAR<\/code> resultado que se parece a lo siguiente:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">...\r\n\"index_projection\": {\r\n    \"entry_keys\": [\r\n        0,\r\n        1,\r\n        2\r\n    ]\r\n},\r\n...<\/pre>\n<p>Ahora bien, la consulta anterior no era una proyecci\u00f3n de \u00edndice porque utilizamos todas las claves de nuestro \u00edndice de cobertura.<\/p>\n<p>La creaci\u00f3n de \u00edndices adecuados junto con la proyecci\u00f3n de \u00edndices puede ayudar realmente en el rendimiento general y el escalado de su cl\u00faster de Couchbase Server.<\/p>\n<p>La proyecci\u00f3n de \u00edndices no fue la \u00fanica mejora de rendimiento realizada en la versi\u00f3n de marzo de 2017, \u00bfverdad?  As\u00ed es, \u00a1hay m\u00e1s!<\/p>\n<p>Tomemos el\u00a0<code>COUNT(DISTINCT)<\/code> por ejemplo.  Ahora utilicemos esa operaci\u00f3n en la siguiente consulta:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">EXPLAIN SELECT COUNT(DISTINCT type)\r\nFROM default;<\/pre>\n<p>En los resultados observar\u00e1 que est\u00e1 utilizando\u00a0<code>IndexCountDistinctScan2<\/code> y lo que est\u00e1 haciendo es almacenar todos\u00a0<code>tipo<\/code> en el \u00edndice y procesando los valores distintos.  Aunque esto ocurre en el indexador en Couchbase 5.0, anteriormente ocurr\u00eda en el servicio N1QL en ediciones anteriores.  Al descargar esta operaci\u00f3n en el indexador, podemos experimentar importantes mejoras de rendimiento.<\/p>\n<p>Del mismo modo, tome la\u00a0<code>OFFSET<\/code>,\u00a0<code>L\u00cdMITE<\/code>y\u00a0<code>ORDENAR POR<\/code> que se pueden utilizar en las consultas N1QL.  Tomemos como ejemplo la siguiente consulta:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">EXPLAIN SELECT firstname\r\nFROM default\r\nWHERE type = 'person'\r\nORDER BY firstname\r\nLIMIT 1\r\nOFFSET 1;<\/pre>\n<p>Observar\u00e1 que el\u00a0<code>L\u00cdMITE<\/code>, <code>ORDENAR POR<\/code>y\u00a0<code>OFFSET<\/code> aparecer\u00e1n en el indizador.  Antes de la versi\u00f3n 5.0, los operadores <code>L\u00cdMITE<\/code> aparec\u00eda en el indexador, pero ahora los otros tambi\u00e9n lo hacen.  Esto es una gran victoria porque en versiones anteriores de Couchbase si se desplazaban los resultados, N1QL obtendr\u00eda todo el n\u00famero X de resultados, y descartar\u00eda todo lo anterior al desplazamiento.<\/p>\n<p>Esto nos lleva al tema de N1QL y las mejoras de las funciones de indexaci\u00f3n.<\/p>\n<h2>Indexaci\u00f3n simplificada de matrices<\/h2>\n<p>Con Couchbase Server 4.5 lleg\u00f3 la indexaci\u00f3n de arrays. Tomemos como ejemplo el siguiente documento de muestra:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">{\r\n  \"tipo\": \"persona\",\r\n  \"nombre\": \"Nic\",\r\n  \"apellido\": \"Raboy\",\r\n  \"social-media\": [\r\n    {\r\n      \"tipo\": \"twitter\",\r\n      \"url\": \"https:\/\/www.twitter.com\/nraboy\"\r\n    },\r\n    {\r\n      \"type\": \"sitio web\",\r\n      \"url\": \"https:\/\/www.thepolyglotdeveloper.com\"\r\n    }\r\n  ]\r\n}<\/pre>\n<h3>Nueva sintaxis de \u00edndice de matriz<\/h3>\n<p>Antes de Couchbase 5.0, para indexar los elementos de la matriz que se encuentran en <code>redes sociales<\/code> ten\u00edas que escribir un \u00edndice parecido al siguiente:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">CREAR \u00cdNDICE ism\r\nON `default` ( DISTINCT ARRAY media FOR media IN `social-media` END )\r\nWHERE type = 'persona';<\/pre>\n<p>En el ejemplo anterior, el\u00a0<code>PARA<\/code> era necesario para la indexaci\u00f3n de arrays.  En Couchbase Server 5.0 hay una sintaxis mucho m\u00e1s simplificada.  El mismo \u00edndice se puede crear mediante lo siguiente:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">CREAR \u00cdNDICE ism\r\nON `default` ( DISTINCT `social-media` )\r\nWHERE tipo = \"persona\";<\/pre>\n<p>Para asegurarte de que tu \u00edndice funciona, puedes ejecutar la siguiente consulta N1QL:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">EXPLICAR SELECT *\r\nFROM default\r\nWHERE type = 'person' AND ANY media IN `social-media` SATISFIES media.type = 'website' END;<\/pre>\n<p>Al examinar los resultados de la\u00a0<code>EXPLICAR<\/code> deber\u00eda ver que est\u00e1 utilizando el\u00a0<code>ismo<\/code> creado anteriormente.<\/p>\n<p>Ahora bien, que exista la sintaxis simplificada no significa que no se pueda utilizar la sintaxis anterior al indexar arrays.  El siguiente ser\u00eda un ejemplo perfecto de por qu\u00e9 la sintaxis anterior seguir\u00eda siendo v\u00e1lida:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">CREAR \u00cdNDICE ism_website\r\nON `default` ( DISTINCT ARRAY media FOR media IN `social-media` WHEN media.type = 'website' END )\r\nWHERE tipo = 'persona';<\/pre>\n<p>Obs\u00e9rvese que a\u00a0<code>CUANDO<\/code> al crear el\u00a0<code>ism_website<\/code> \u00edndice superior.<\/p>\n<p>M\u00e1s informaci\u00f3n sobre la indexaci\u00f3n de matrices\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/indexing-arrays.html\" target=\"_blank\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>junto con otra documentaci\u00f3n \u00fatil sobre la creaci\u00f3n de \u00edndices en Couchbase.<\/p>\n<h3>Requisito relajado de coincidencia de variables para \u00edndices de matrices<\/h3>\n<p>En las versiones 4.x, la indexaci\u00f3n de matrices requer\u00eda el uso de exactamente los mismos nombres de variables en el archivo <code>SELECCIONE<\/code> que se utilizaron en la <code>CREAR \u00cdNDICE<\/code> declaraci\u00f3n. M\u00e1s informaci\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.6\/n1ql\/n1ql-language-reference\/indexing-arrays.html\" target=\"_blank\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>.<\/p>\n<p>Por ejemplo, en referencia a las consultas anteriores, observe que la variable <code>medios de comunicaci\u00f3n<\/code> que se utiliza para iterar a trav\u00e9s de la matriz <code>redes sociales<\/code> es muy importante. La indexaci\u00f3n de matrices en 4.x exige el nombre exacto de la variable <code>medios de comunicaci\u00f3n<\/code> que se utilizar\u00e1 en el\u00a0<code>SELECCIONE<\/code> consulta.<\/p>\n<p>La versi\u00f3n 5.0 de Couchbase relaja este requisito, y la siguiente consulta funcionar\u00eda perfectamente:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">EXPLICAR SELECT *\r\nFROM default\r\nUSE INDEX (ism)\r\nWHERE type = 'person' AND ANY m IN `social-media` SATISFIES m.type = 'website' END;<\/pre>\n<p>Tenga en cuenta que, el \u00edndice <code>ismo<\/code> utiliza el nombre de la variable <code>medios de comunicaci\u00f3n<\/code>pero la consulta anterior utiliza <code>m<\/code>. Aun as\u00ed, la consulta anterior puede utilizar el \u00edndice <code>ismo<\/code> con \u00e9xito.<\/p>\n<h3>Requisito relajado de clave de \u00edndice de matriz completa para \u00edndices de matriz<\/h3>\n<p>Recuerde tambi\u00e9n que, en las versiones 4.x, la indexaci\u00f3n de matrices cubierta requiere el atributo de matriz completa como clave de \u00edndice obligatoria en la definici\u00f3n del \u00edndice de matriz.  Por ejemplo, tome la siguiente consulta de nuevo:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">EXPLICAR SELECT *\r\nFROM default\r\nWHERE type = 'person' AND ANY media IN `social-media` SATISFIES media.type = 'website' END;<\/pre>\n<p>El \u00edndice de matriz cubierta correspondiente a la consulta anterior ser\u00eda:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">CREAR \u00cdNDICE ism_covered\r\nON `default` ( DISTINCT ARRAY media FOR media IN `social-media` END, `social-media`)\r\nWHERE type = 'persona';<\/pre>\n<p>Tenga en cuenta que, la segunda clave de \u00edndice <code>redes sociales<\/code> es obligatorio, por ejemplo para cubrir la siguiente consulta:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">EXPLAIN SELECT medio\r\nFROM default\r\nWHERE type = 'person' AND ANY media IN `social-media` SATISFIES media IS NOT NULL END;<\/pre>\n<p>En Couchbase 5.0, esta misma consulta estar\u00e1 cubierta por el \u00edndice <code>ismo<\/code> al principio de este art\u00edculo.<\/p>\n<p>Es importante notar que, esta caracter\u00edstica trae mucho poder a los \u00cdndices de Arreglos. Porque, ahora cada entrada en el \u00edndice de matriz consume menos espacio de almacenamiento y memoria. Permite los siguientes beneficios:<\/p>\n<ul>\n<li>Uso de \u00edndices de matrices cubiertas para matrices m\u00e1s grandes<\/li>\n<li>Aumenta la eficacia y el rendimiento de las consultas que utilizan \u00edndices de matrices cubiertas.<\/li>\n<\/ul>\n<h2>Indexaci\u00f3n de la metainformaci\u00f3n del documento<\/h2>\n<p>Demos un giro aqu\u00ed y hablemos de la nueva metainformaci\u00f3n que se puede indexar.  Antes se pod\u00edan crear \u00edndices sobre la <code>meta().id<\/code> pero ahora tanto la propiedad <code>meta().cas<\/code> y <code>meta().expiraci\u00f3n<\/code> son compatibles.<\/p>\n<p>Entonces, \u00bfc\u00f3mo creamos un \u00edndice que utilice las meta propiedades como claves?  No es muy distinto de lo que ya sabes.  Tomemos como ejemplo los siguientes \u00edndices de cobertura:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">CREAR \u00cdNDICE idx_cas\r\nON `default` ( META().cas, META().expiration )\r\n\r\nCREAR \u00cdNDICE idx_exp\r\nON `por defecto` ( META().caducidad )<\/pre>\n<p>Ahora bien, si quisiera utilizar el\u00a0<code>idx_cas<\/code>\u00a0y <code>idx_exp<\/code> \u00edndices en una consulta N1QL, podr\u00eda hacer algo como lo siguiente:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">SELECT META().id, META().cas\r\nFROM default\r\nWHERE META().cas &gt; 1489531586248179712;\r\n\r\nSELECT META().id, META().expiration\r\nFROM por defecto\r\nWHERE META().expiration &gt; NOW_MILLIS();<\/pre>\n<p>\u00bfPor qu\u00e9 indexar estas propiedades?  \u00bfY si quisieras consultar todos los documentos que han caducado hoy o todos los documentos que se han modificado hoy?<\/p>\n<p>Para m\u00e1s informaci\u00f3n sobre las propiedades CAS y de caducidad, visite <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.6\/sdk\/core-operations.html#story-h2-8\" target=\"_blank\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>.  Para obtener m\u00e1s informaci\u00f3n sobre la indexaci\u00f3n o el uso de N1QL con Couchbase, consulte la p\u00e1gina <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/\" target=\"_blank\" rel=\"noopener noreferrer\">Portal para desarrolladores de Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Con Couchbase 5.0 cerca de su lanzamiento estable, es una buena idea revisar algunas de las mejoras, tanto en rendimiento como en caracter\u00edsticas, que est\u00e1n llegando con la tecnolog\u00eda N1QL.<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,9417,1812],"tags":[1891,1505],"ppma_author":[9032],"class_list":["post-3676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-performance","category-n1ql-query","tag-enhancement","tag-index"],"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>N1QL Performance and Feature Enhancements in Couchbase 5.0<\/title>\n<meta name=\"description\" content=\"Learn about all the new N1QL and indexing features and enhancements made available in Couchbase Server 5.0.\" \/>\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\/n1ql-performance-feature-enhancements-couchbase-5-0\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"N1QL Performance and Feature Enhancements in Couchbase 5.0\" \/>\n<meta property=\"og:description\" content=\"Learn about all the new N1QL and indexing features and enhancements made available in Couchbase Server 5.0.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/n1ql-performance-feature-enhancements-couchbase-5-0\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-21T15:06:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:20:21+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"N1QL Performance and Feature Enhancements in Couchbase 5.0\",\"datePublished\":\"2017-06-21T15:06:12+00:00\",\"dateModified\":\"2025-06-14T03:20:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/\"},\"wordCount\":1078,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"enhancement\",\"Index\"],\"articleSection\":[\"Couchbase Server\",\"High Performance\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/\",\"name\":\"N1QL Performance and Feature Enhancements in Couchbase 5.0\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-06-21T15:06:12+00:00\",\"dateModified\":\"2025-06-14T03:20:21+00:00\",\"description\":\"Learn about all the new N1QL and indexing features and enhancements made available in Couchbase Server 5.0.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#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\/n1ql-performance-feature-enhancements-couchbase-5-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"N1QL Performance and Feature Enhancements in Couchbase 5.0\"}]},{\"@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\/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\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mejoras de rendimiento y funciones de N1QL en Couchbase 5.0","description":"Conoce todas las nuevas caracter\u00edsticas y mejoras de N1QL e indexaci\u00f3n disponibles en Couchbase Server 5.0.","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\/n1ql-performance-feature-enhancements-couchbase-5-0\/","og_locale":"es_MX","og_type":"article","og_title":"N1QL Performance and Feature Enhancements in Couchbase 5.0","og_description":"Learn about all the new N1QL and indexing features and enhancements made available in Couchbase Server 5.0.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-performance-feature-enhancements-couchbase-5-0\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2017-06-21T15:06:12+00:00","article_modified_time":"2025-06-14T03:20:21+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"N1QL Performance and Feature Enhancements in Couchbase 5.0","datePublished":"2017-06-21T15:06:12+00:00","dateModified":"2025-06-14T03:20:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/"},"wordCount":1078,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["enhancement","Index"],"articleSection":["Couchbase Server","High Performance","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/","url":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/","name":"Mejoras de rendimiento y funciones de N1QL en Couchbase 5.0","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-06-21T15:06:12+00:00","dateModified":"2025-06-14T03:20:21+00:00","description":"Conoce todas las nuevas caracter\u00edsticas y mejoras de N1QL e indexaci\u00f3n disponibles en Couchbase Server 5.0.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-performance-feature-enhancements-couchbase-5-0\/#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\/n1ql-performance-feature-enhancements-couchbase-5-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"N1QL Performance and Feature Enhancements in Couchbase 5.0"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","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\/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\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3676","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\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3676"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3676"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}