{"id":6764,"date":"2019-05-09T08:47:43","date_gmt":"2019-05-09T15:47:43","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6764"},"modified":"2025-06-13T20:19:36","modified_gmt":"2025-06-14T03:19:36","slug":"n1ql-index-advisor-improve-query-performance-and-productivity","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-index-advisor-improve-query-performance-and-productivity\/","title":{"rendered":"Asesor de \u00cdndices N1QL: Mejore el rendimiento y la productividad de las consultas"},"content":{"rendered":"<p>Como desarrolladores de aplicaciones, vuestro principal objetivo es dise\u00f1ar las consultas m\u00e1s eficientes para vuestra aplicaci\u00f3n. Desea garantizar la integridad de los datos que su aplicaci\u00f3n env\u00eda a la base de datos y construir las consultas m\u00e1s eficaces para recuperar los datos necesarios para la aplicaci\u00f3n. En muchos casos, el rendimiento de la aplicaci\u00f3n se aplaza a una fase posterior del ciclo de desarrollo. A menudo se deja en manos de los especialistas en rendimiento de bases de datos, que pueden proporcionar las recomendaciones para el dise\u00f1o del \u00edndice, que tambi\u00e9n puede incluir la reescritura de la consulta, con el fin de cumplir el requisito de rendimiento. Pero comprender el rendimiento de la consulta puede mejorar enormemente la productividad y ayudar a los desarrolladores a buscar una soluci\u00f3n de mayor rendimiento en una fase temprana del ciclo de desarrollo.<\/p>\n<p>Los proveedores de bases de datos son conscientes de este reto, y los RDBMS de clase empresarial incluyen la capacidad de ajuste del rendimiento como parte de sus conjuntos de herramientas de bases de datos.<\/p>\n<p>Couchbase N1QL Index Advisor, una nueva caracter\u00edstica en Couchbase 6.5 (DP), ahora proporciona recomendaciones de \u00edndices GSI para sentencias de consulta N1QL. Su objetivo principal es recomendar \u00edndices para optimizar el tiempo de respuesta de la consulta. Permite a los desarrolladores ser m\u00e1s productivos, ya que pueden crear los \u00edndices recomendados y ver c\u00f3mo se comporta la consulta al principio del ciclo de desarrollo. Tambi\u00e9n permite a los administradores de bases de datos mejorar el rendimiento del sistema revisando peri\u00f3dicamente las consultas de ejecuci\u00f3n lenta.<\/p>\n<p>Puede aprender a utilizar Couchbase Index Advisor leyendo el documento <strong><em>Comprender Index Advisor<\/em><\/strong> y <strong><em>Empezar a utilizar Index Advisor<\/em><\/strong> a continuaci\u00f3n. Las secciones restantes proporcionan m\u00e1s detalles sobre c\u00f3mo Index Advisor llega a las recomendaciones, incluyendo consejos sobre el uso de Index Advisor en las solicitudes completadas y c\u00f3mo identificar los \u00edndices de uso poco frecuente.<\/p>\n<h3><b>Comprender Index Advisor<\/b><\/h3>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/5-steps-to-better-database-performance\/\">Rendimiento de la base de datos<\/a>aunque es una tarea dif\u00edcil de gestionar bien, es un problema bien entendido por los proveedores de bases de datos. El advenimiento de SaaS y DBasS tambi\u00e9n significa que el desaf\u00edo del rendimiento de la base de datos es s\u00f3lo una parte del servicio, y necesita ser automatizado con respecto a su capacidad para diagnosticar y solucionar el problema. Nuestro equipo de desarrollo ha estado trabajando duro para crear los bloques de construcci\u00f3n hacia esa visi\u00f3n.<\/p>\n<p>Couchbase Index Advisor es parte del constructo N1QL ADVISE que permite a desarrolladores y DBAs gestionar el aspecto de ajuste de rendimiento de sus aplicaciones. Para entender c\u00f3mo funciona Index Advisor, necesitas entender las principales t\u00e9cnicas de recuperaci\u00f3n de datos en la plataforma de datos Couchbase:<\/p>\n<ul>\n<li>Key-Value - Un acceso r\u00e1pido y directo a los datos para el servicio Data cuando las claves est\u00e1n disponibles. Este m\u00e9todo de acceso no involucra al servicio de Indexaci\u00f3n de Couchbase.<\/li>\n<li>Servicio de Indexaci\u00f3n (GSI) - Un servicio escalable que permite a las aplicaciones realizar consultas N1QL r\u00e1pidas. GSI aprovecha una arquitectura distribuida y almacena los \u00edndices en un conjunto independiente de nodos a trav\u00e9s de Couchbase Cluster.<\/li>\n<li>Search (FTS) - Un servicio de b\u00fasqueda de texto completo que proporciona palabras clave y b\u00fasqueda difusa. FTS, como todos los servicios de Couchbase, es un servicio distribuido que se puede configurar en todo el cl\u00faster de Couchbase.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6768\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/Screen-Shot-2019-04-24-at-4.31.54-PM.png\" alt=\"\" width=\"673\" height=\"252\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-4.31.54-PM.png 1020w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-4.31.54-PM-300x112.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-4.31.54-PM-768x288.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-4.31.54-PM-20x7.png 20w\" sizes=\"auto, (max-width: 673px) 100vw, 673px\" \/><\/p>\n<p>N1QL Query aprovecha todos los servicios anteriores para entregar el resultado de la consulta a las aplicaciones. Sin embargo, Index Advisor en v6.5 (DP) s\u00f3lo recomienda \u00edndices gestionados por el servicio Index (GSI). Index Advisor no eval\u00faa la t\u00e9cnica de recuperaci\u00f3n del servicio de Datos a trav\u00e9s de USE KEYS, ni el servicio de B\u00fasqueda(FTS) a trav\u00e9s de la funci\u00f3n N1QL SEARCH_QUERY() y SEARCH().<\/p>\n<h3><b>Empezar a utilizar Index Advisor<\/b><\/h3>\n<p>Como ya he mencionado antes, Index Advisor es la primera de una serie de funciones que introducimos para el ajuste del rendimiento de las bases de datos. Index Advisor ayuda a identificar sistem\u00e1ticamente los \u00edndices que pueden optimizar el rendimiento de la aplicaci\u00f3n y garantiza que los \u00edndices se creen siguiendo las mejores pr\u00e1cticas recomendadas para el orden de las claves. En efecto, Index Advisor puede ofrecer recomendaciones incluso cuando ya se dispone de \u00edndices que funcionan para las consultas.<\/p>\n<p>Puede empezar a utilizar N1QL Index Advisor utilizando:<\/p>\n<h4>N1QL - ADVISE [INDEX]<\/h4>\n<pre class=\"lang:mysql decode:true\">ADVISE\u00a0 SELECT route.destinationairport\r\n   FROM `travel-sample` airport\u00a0\u00a0\u00a0 \r\n     JOIN `travel-sample` route ON airport.faa = route.sourceairport\u00a0\u00a0\u00a0 \r\n         AND route.type = \"route\"\r\n    WHERE airport.type = \"airport\"\u00a0\u00a0\u00a0 \r\n      AND airport.city = \"San Francisco\"\u00a0\u00a0\u00a0 \r\n      AND airport.country = \"United States\";<\/pre>\n<pre class=\"lang:js decode:true\">[\r\n  {\r\n    \"#operator\": \"Advise\",\r\n    \"advice\": {\r\n      \"#operator\": \"IndexAdvice\",\r\n      \"adviseinfo\": [\r\n        {\r\n          \"current_indexes\": [\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_city ON `travel-sample`(`city`)\"\r\n            },\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_type ON `travel-sample`(`type`)\"\r\n            },\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_faa ON `travel-sample`(`faa`)\"\r\n            },\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_route_src_dst_day ON `travel-sample`(`sourceairport`,`destinationairport`,(distinct (array (`v`.`day`) for `v` in `schedule` end))) WHERE (`type` = 'route')\",\r\n              \"index_status\": \"THIS IS AN OPTIMAL COVERING INDEX.\"\r\n            }\r\n          ],\r\n          \"recommended_indexes\": {\r\n            \"covering_indexes\": [\r\n              {\r\n                \"index_statement\": \"CREATE INDEX adv_faa_country_city_type ON `travel-sample`(`faa`,`country`,`city`) WHERE `type` = 'airport'\"\r\n              }\r\n            ],\r\n            \"indexes\": [\r\n              {\r\n                \"index_statement\": \"CREATE INDEX adv_faa_country_city_type ON `travel-sample`(`faa`,`country`,`city`) WHERE `type` = 'airport'\",\r\n                \"recommending_rule\": \"Index keys follow order of predicate types: 1. equality, 8. flavor for partial index.\"\r\n              }\r\n            ]\r\n          }\r\n        }\r\n      ]\r\n    },\r\n    \"query\": \"SELECT route.destinationairport\\nFROM `travel-sample` airport\\n    JOIN `travel-sample` route ON airport.faa = route.sourceairport\\n    AND route.type = \\\"route\\\"\\nWHERE airport.type = \\\"airport\\\"\\n    AND airport.city = \\\"San Francisco\\\"\\n    AND airport.country = \\\"United States\\\";\"\r\n  }\r\n]<\/pre>\n<p><strong>\u00cdndices actuales -\u00a0<\/strong>La secci\u00f3n enumera todos los \u00edndices existentes que el planificador de consultas utilizar\u00e1 para esta consulta. Tambi\u00e9n proporciona informaci\u00f3n adicional sobre cualquier \u00edndice que el planificador de consultas utilice como \u00edndice de cobertura.<\/p>\n<p><strong>\u00cdndices recomendados -\u00a0<\/strong>Esta secci\u00f3n enumera todos los \u00edndices recomendados por el Asesor de \u00cdndices. Las recomendaciones de \u00edndices de cobertura son aquellas que permitir\u00edan que la consulta funcionara sin necesidad de obtener datos adicionales del servicio de datos. Mientras que la secci\u00f3n de \u00edndices muestra s\u00f3lo aquellos que ayudan con la cl\u00e1usula de predicado. Tenga en cuenta que podr\u00eda haber duplicaci\u00f3n de informaci\u00f3n en estas dos secciones, pero en las que el nombre del \u00edndice ser\u00eda id\u00e9ntico si las claves del \u00edndice son las mismas.<\/p>\n<p>Tambi\u00e9n explica por qu\u00e9 hab\u00eda recomendado los \u00edndices.<\/p>\n<h4>Utilizar Advise desde el Query Workbench<\/h4>\n<p>Haga clic en el bot\u00f3n Aconsejar para obtener la salida del Asesor de \u00edndices para la consulta.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6765\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/Screen-Shot-2019-04-24-at-1.26.42-PM.png\" alt=\"\" width=\"980\" height=\"535\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.26.42-PM.png 1279w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.26.42-PM-300x164.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.26.42-PM-1024x559.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.26.42-PM-768x419.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.26.42-PM-20x11.png 20w\" sizes=\"auto, (max-width: 980px) 100vw, 980px\" \/><\/p>\n<p>N1QL ADVISE soporta consultas SELECT, DELETE, UPDATE y MERGE. Proporciona recomendaciones de \u00edndice para:<\/p>\n<ul>\n<li>Predicado de la cl\u00e1usula WHERE.<\/li>\n<li>Condici\u00f3n de uni\u00f3n cl\u00e1usula ON para Index join, ANSI join, Index NEST, ANSI NEST y ANSI MERGE.<\/li>\n<li>\u00cdndice de matriz para UNNEST y predicados de matriz en la cl\u00e1usula WHERE\/ON.<\/li>\n<li>Subconsulta cuando se utiliza en la cl\u00e1usula FROM.<\/li>\n<\/ul>\n<h3><b>\u00bfC\u00f3mo funciona Index Advisor?<\/b><\/h3>\n<p>Utilizar\u00e9 el siguiente enfoque para explicar c\u00f3mo funciona el Index Advisor.<\/p>\n<ol>\n<li>Seleccionar\u00e9 un ejemplo que tiene las t\u00edpicas construcciones de consulta (predicado, join, array, group by), que pueden ser dif\u00edciles de adivinar cu\u00e1les son los mejores \u00edndices para la consulta.<\/li>\n<li>Examine el plan de consulta para saber qu\u00e9 har\u00eda el optimizador para la consulta actual.<\/li>\n<li>Determinar manualmente qu\u00e9 \u00edndices crear para mejorar el rendimiento de la consulta. Esto se basar\u00eda en la comprensi\u00f3n de los desarrolladores de aplicaciones t\u00edpicas de los \u00edndices de predicados y campos de uni\u00f3n.<\/li>\n<li>A continuaci\u00f3n, ejecuta Couchbase Index Advisor y compara sus recomendaciones con las que ten\u00edamos en mente.<\/li>\n<li>Cree los \u00edndices recomendados.<\/li>\n<li>Revise el nuevo plan de consulta y eval\u00fae los cambios.<\/li>\n<\/ol>\n<h5><strong>Ejemplo de consulta<\/strong><\/h5>\n<p>Esta consulta recupera el n\u00famero de rutas por aerol\u00edneas desde cualquier aeropuerto de la ciudad de San Jos\u00e9, EE.UU. que tienen vuelos programados en domingo.<\/p>\n<pre class=\"lang:default decode:true\">SELECT airline.name, airport.airportname, COUNT(1)\r\nFROM `travel-sample` airport\r\nINNER JOIN `travel-sample` route ON airport.faa = route.sourceairport\r\n    AND route.type = \"route\"\r\nINNER JOIN `travel-sample` airline ON route.airline = airline.iata\r\n    AND airline.type = \"airline\"\r\nWHERE airport.type = \"airport\"\r\n    AND airport.city = \"San Jose\"\r\n    AND airport.country = \"United States\"\r\n    AND ANY x in route.schedule SATISFIES x.day =0 END\r\nGROUP BY airline.name, airport.airportname<\/pre>\n<h5><strong>El plan de consulta\u00a0<\/strong><\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6827\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-03-at-9.32.21-AM.png\" alt=\"\" width=\"1256\" height=\"438\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-9.32.21-AM.png 1256w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-9.32.21-AM-300x105.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-9.32.21-AM-1024x357.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-9.32.21-AM-768x268.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-9.32.21-AM-800x280.png 800w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-9.32.21-AM-20x7.png 20w\" sizes=\"auto, (max-width: 1256px) 100vw, 1256px\" \/><\/p>\n<ol>\n<li>La consulta utiliza cinco \u00edndices\n<ol>\n<li>Se utilizaron tres \u00edndices para los predicados del tipo de documento \"aeropuerto\": \"ciudad\", \"tipo\" y \"faa\".<\/li>\n<li>Se ha utilizado un \u00edndice para el tipo de documento \"route\" en el campo \"sourceairport\" a efectos de la uni\u00f3n entre \"route\" y \"airport\". En este caso se utiliz\u00f3 el \u00edndice existente \"def_route_src_dst_day\" porque tiene la clave principal \"sourceairport\".<\/li>\n<li>Un \u00edndice para el tipo de documento \"compa\u00f1\u00eda a\u00e9rea\", que es el \u00edndice parcial por defecto para \"tipo\".<\/li>\n<\/ol>\n<\/li>\n<li>Dos documentos NestedLoop une - 'aeropuerto' - 'ruta' y 'ruta' - 'aerol\u00ednea'.  Pero, aparte del \u00edndice \"def_route_src_dst_day\" en \"route\", no hay otros \u00edndices que soporten el resto de las uniones. Por lo tanto, estas uniones no son eficientes.<\/li>\n<li>Tambi\u00e9n hubo una agregaci\u00f3n final para contabilizar el n\u00famero de rutas por compa\u00f1\u00eda a\u00e9rea.<\/li>\n<li>La consulta se complet\u00f3 en 2,1 s<\/li>\n<\/ol>\n<h5><strong>\u00bfC\u00f3mo podemos mejorar el rendimiento de la consulta?<\/strong><\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6849\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-06-at-2.28.15-PM.png\" alt=\"\" width=\"730\" height=\"252\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-06-at-2.28.15-PM.png 730w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-06-at-2.28.15-PM-300x104.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-06-at-2.28.15-PM-20x7.png 20w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/p>\n<ol>\n<li>El documento \"aeropuerto\" tiene dos predicados (\"ciudad\" y \"pa\u00eds\") y un predicado de sabor en \"tipo\". Adem\u00e1s, la columna \"faa\" del aeropuerto tambi\u00e9n se utiliza para la uni\u00f3n con \"route\". Por tanto, en lugar de utilizar tres \u00edndices distintos, deber\u00eda haber un \u00edndice parcial en el documento \"airport\" para (\"city\", \"country\") [action_1]. El campo \"aeropuerto.faa\" tambi\u00e9n podr\u00eda beneficiarse de un \u00edndice separado, o de una parte del \u00edndice principal del aeropuerto.<\/li>\n<li>El documento 'route' no tiene predicados, pero tiene un join a 'airport' con el campo 'sourceairport'. Un \u00edndice en esta columna deber\u00eda ayudar con la uni\u00f3n, y ya tenemos el \u00edndice 'def_route_src_dst_day' [action_2] por lo que no es necesaria ninguna acci\u00f3n para esta uni\u00f3n.<\/li>\n<li>El documento \"route\" tambi\u00e9n tiene una uni\u00f3n con \"airline\" en el campo \"airline\". As\u00ed que deber\u00edamos tener un \u00edndice para esto - documento 'route' ('airline') [action_3].<\/li>\n<li>El documento 'airline' tampoco tiene predicado, pero tiene un join a 'route' con el campo 'iata'. Por lo tanto, se necesita otro \u00edndice en el documento \"aerol\u00ednea\" (\"iata\") [action_4].<\/li>\n<li>Tenemos un predicado en el array route.schedule. As\u00ed que necesitamos un \u00edndice sobre esto tambi\u00e9n. route' document (DISTINCT ARRAY x.day FOR x in schedule END) [action_5].<\/li>\n<\/ol>\n<p>As\u00ed que hemos llegado a cinco puntos de acci\u00f3n, que resultan en cuatro \u00edndices adicionales para esta consulta.  Veamos qu\u00e9 recomienda Index Advisor.<\/p>\n<h5><strong>Ejecute el Index Advisor para comprobar el resultado<\/strong><\/h5>\n<pre class=\"lang:default decode:true\">[\r\n  {\r\n    \"#operator\": \"Advise\",\r\n    \"advice\": {\r\n      \"#operator\": \"IndexAdvice\",\r\n      \"adviseinfo\": [\r\n        {\r\n          \"current_indexes\": [\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_city ON `travel-sample`(`city`)\"\r\n            },\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_type ON `travel-sample`(`type`)\"\r\n            },\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_faa ON `travel-sample`(`faa`)\"\r\n            },\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_route_src_dst_day ON `travel-sample`(`sourceairport`,`destinationairport`,(distinct (array (`v`.`day`) for `v` in `schedule` end))) WHERE (`type` = 'route')\"\r\n            },\r\n            {\r\n              \"index_statement\": \"CREATE INDEX def_type ON `travel-sample`(`type`)\"\r\n            }\r\n          ],\r\n          \"recommended_indexes\": {\r\n            \"covering_indexes\": [\r\n              {\r\n                \"index_statement\": \"CREATE INDEX adv_faa_city_country_type_airportname ON `travel-sample`(`faa`,`city`,`country`,`airportname`) WHERE `type` = 'airport'\"\r\n              },\r\n              {\r\n                \"index_statement\": \"CREATE INDEX adv_iata_type_name ON `travel-sample`(`iata`,`name`) WHERE `type` = 'airline'\"\r\n              }\r\n            ],\r\n            \"indexes\": [\r\n              {\r\n                \"index_statement\": \"CREATE INDEX adv_country_faa_city_type ON `travel-sample`(`country`,`faa`,`city`) WHERE `type` = 'airport'\",\r\n                \"recommending_rule\": \"Index keys follow order of predicate types: 1. equality, 8. flavor for partial index.\"\r\n              },\r\n              {\r\n                \"index_statement\": \"CREATE INDEX adv_airline_sourceairport_DISTINCT_schedule_day_type ON `travel-sample`(`airline`,`sourceairport`,DISTINCT ARRAY x.day FOR x in schedule END) WHERE `type` = 'route'\",\r\n                \"recommending_rule\": \"Index keys follow order of predicate types: 1. equality, 5. array predicate, 8. flavor for partial index.\"\r\n              },\r\n              {\r\n                \"index_statement\": \"CREATE INDEX adv_iata_type ON `travel-sample`(`iata`) WHERE `type` = 'airline'\",\r\n                \"recommending_rule\": \"Index keys follow order of predicate types: 1. equality, 8. flavor for partial index.\"\r\n              }\r\n            ]\r\n          }\r\n        }\r\n      ]\r\n    },\r\n    \"query\": \"SELECT airline.name, airport.airportname, COUNT(1)\\nFROM `travel-sample` airport\\nINNER JOIN `travel-sample` route ON airport.faa = route.sourceairport\\n    AND route.type = \\\"route\\\"\\nINNER JOIN `travel-sample` airline ON route.airline = airline.iata\\n    AND airline.type = \\\"airline\\\"\\nWHERE airport.type = \\\"airport\\\"\\n    AND airport.city = \\\"San Jose\\\"\\n    AND airport.country = \\\"United States\\\"\\n    AND ANY x in route.schedule SATISFIES x.day =0 END\\nGROUP BY airline.name, airport.airportname\"\r\n  }\r\n]<\/pre>\n<h5><strong>Secci\u00f3n de \u00edndices actuales<\/strong><\/h5>\n<p>Esto es lo mismo que nos hab\u00eda dado el plan. La consulta utiliza cinco \u00edndices.<\/p>\n<h5><strong>Secci\u00f3n \u00cdndices recomendados - \"\u00cdndices\"<\/strong><\/h5>\n<p>Esta secci\u00f3n enumera todos los \u00edndices desde la perspectiva del predicado. Tenga en cuenta que JOIN tiene campos ON, que tambi\u00e9n se tratan como predicados. As\u00ed que vamos a revisar los \u00edndices recomendados.<\/p>\n<ol>\n<li>adv_country_faa_city_type ON `travel-sample`(`country`,`faa`,`city`) WHERE `type` = &#8216;airport&#8217; &#8211; Other than the key order, this is the same index as we have identified in [action_1]. The key order is not significant here as these predicates all use equality.<\/li>\n<li>adv_airline_sourceairport_DISTINCT_schedule_day_type ON `travel-sample`(`airline`,`sourceairport`,DISTINCT ARRAY x.day FOR x in schedule END) WHERE `type` = &#8216;route&#8217; &#8211; What Index Advisor has done here is that it has combined [action_2, action_3, action_5] into a single index.<\/li>\n<li>adv_iata_type ON `travel-sample`(`iata`) WHERE `type` = &#8216;airline&#8217; &#8211; This is the same index that we had identified in [action_4]<\/li>\n<\/ol>\n<p><strong>Secci\u00f3n de \u00edndices recomendados - \"\u00cdndices de cobertura\"<\/strong><\/p>\n<p>En esta secci\u00f3n se enumeran todas las recomendaciones sobre \u00edndices de cobertura. Tenga en cuenta que <strong><em>los \u00edndices de cobertura son los que se utilizan para satisfacer una consulta sobre un documento cuya ejecuci\u00f3n no necesitar\u00eda realizar una obtenci\u00f3n adicional del servicio de datos<\/em><\/strong>.<\/p>\n<ol>\n<li>adv_faa_city_country_type_airportname_airportname ON `travel-sample`(`country`,`faa`,`city`,`airportname`) WHERE `type` = &#8216;airport&#8217;\u00a0 &#8211;\u00a0 Index Advisor has added the route.airportname field to the recommended index [adv_country_faa_city_type ON `travel-sample`(`country`,`faa`,`city`)]. By doing this, the query service would not need to fetch the route document from the data service to project the route.airportname<\/li>\n<li>adv_iata_type_name_name ON `travel-sample`(`iata`,`name`) WHERE `type` = &#8216;airline&#8217; &#8211; Index Advisor has added the airline.name to the recommended index [adv_iata_type ON `travel-sample`(`iata`) WHERE `type` = &#8216;airline&#8217;]. By doing this, the query service would not need to fetch the airline document from the data service to project the airline.name<\/li>\n<\/ol>\n<p><span style=\"text-decoration: underline\"><strong>Nota<\/strong><\/span>:  El \u00edndice de cobertura reduce la necesidad de que el servicio de consulta realice b\u00fasquedas adicionales en el servicio de datos, lo que mejora el rendimiento de la consulta. Sin embargo, el usuario debe decidir si crea o no \u00edndices de cobertura en funci\u00f3n de sus limitaciones espec\u00edficas, como la memoria o el almacenamiento de su entorno.<\/p>\n<h5><strong>Cree todos los \u00edndices recomendados y revise el nuevo plan de consulta<\/strong><\/h5>\n<p>Para este ejercicio, he decidido crear todos los \u00edndices recomendados utilizando \u00edndices de cobertura cuando proceda.<\/p>\n<pre class=\"lang:default decode:true\">CREATE INDEX `adv_faa_city_type_country_airportname` ON `travel-sample`(`faa`,`city`,`airportname`) WHERE ((`type` = \"airport\") and (`country` = \"United States\"))\r\n\r\nCREATE INDEX `adv_sourceairport_airline_DISTINCT_schedule_day_type` ON `travel-sample`(`sourceairport`,`airline`,(distinct (array (`x`.`day`) for `x` in `schedule` end))) WHERE (`type` = \"route\")\r\n\r\nCREATE INDEX `adv_iata_type_name` ON `travel-sample`(`iata`,`name`) WHERE (`type` = \"airline\")\r\n\r\n<\/pre>\n<h5><strong>El plan de consulta despu\u00e9s de a\u00f1adir los \u00edndices recomendados<\/strong><\/h5>\n<h5><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6828\" style=\"color: #333333;font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 19px\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-03-at-10.39.27-AM.png\" alt=\"\" width=\"1275\" height=\"393\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-10.39.27-AM.png 1275w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-10.39.27-AM-300x92.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-10.39.27-AM-1024x316.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-10.39.27-AM-768x237.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-10.39.27-AM-20x6.png 20w\" sizes=\"auto, (max-width: 1275px) 100vw, 1275px\" \/><\/h5>\n<ol>\n<li>La consulta utiliza ahora los tres nuevos \u00edndices recomendados por Index Advisor, en lugar de cinco \u00edndices.<\/li>\n<li>Dado que hemos creado \u00edndices de cobertura, el servicio de consulta ya no necesita realizar ninguna b\u00fasqueda adicional desde el servicio de datos.<\/li>\n<li>Ahora la consulta se completa en 120 ms. Una mejora de 94%.<\/li>\n<\/ol>\n<h3><b>Utilice Index Advisor para analizar la carga de trabajo<\/b><\/h3>\n<h4>N1QL - ASESOR( )<\/h4>\n<h5>Index Advisor tambi\u00e9n puede invocarse con la funci\u00f3n ADVISOR(). Permite a los usuarios:<\/h5>\n<ol>\n<li>Pasar m\u00faltiples consultas. SELECT ADVISOR(\"SELECT ..\", \"SELECT ..\", \"UPDATE..\");<\/li>\n<li>Pase una subconsulta que devuelva las sentencias N1QL reales. Dado que la consulta devuelve una estructura de documento json, tendr\u00e1s que utilizar la palabra clave RAW para asegurarte de que solo se devuelven las sentencias N1QL reales.<\/li>\n<\/ol>\n<h5>Utilice ADVISOR() para identificar las consultas lentas consultando las peticiones completadas.<\/h5>\n<pre class=\"lang:mysql decode:true\">\/* Retrieve queries that ran longer then 1 secs *\/\r\nSELECT <strong>ASESOR<\/strong>((SELECT <strong>RAW<\/strong> statement FROM  system:completed_requests\r\nWHERE trunc(str_to_duration(elapsedTime)\/1000000000) &gt; 1))<\/pre>\n<h3><strong>Identificar los \u00edndices ineficaces existentes<\/strong><\/h3>\n<h5>Incluso cuando ya tienes \u00edndices para tu consulta, ejecutar Index Advisor puede ayudar a identificar casos en los que los \u00edndices existentes pueden no ser los mejores \u00edndices, bas\u00e1ndose en la gu\u00eda de \u00cdndices de Couchbase.<\/h5>\n<p>Considere este ejemplo:<\/p>\n<pre class=\"lang:mysql decode:true\">SELECT COUNT(1) FROM `travel-sample` t WHERE t.type = \u201cairport\u201d AND t.icao IS NOT NULL AND t.geo.alt &lt; 300;<\/pre>\n<p>Y que tu consulta puede ejecutarse sin problemas con un \u00edndice por debajo:<\/p>\n<pre class=\"lang:default decode:true\">CREATE INDEX ix1 ON `travel-sample`(`type`,`icao`,`geo`.`alt`)\r\n<\/pre>\n<p>Pero el \u00edndice recomendado para la consulta ser\u00eda:<\/p>\n<pre class=\"lang:default decode:true\">CREATE INDEX adv_geo_alt_icao_type ON `travel-sample`(`geo`.`alt`,`icao`) WHERE `type` = \u2018airport\u2019<\/pre>\n<p>Esto se debe a que el \u00edndice deber\u00eda funcionar mejor si las claves siguen el orden de la regla del tipo de predicado:<\/p>\n<ul>\n<li>Regla 4. Menor que\/entre\/mayor que.<\/li>\n<li>Regla 6. No nulo\/no perdido\/valorado.<\/li>\n<li>Regla 8. Sabor para \u00edndice parcial.<\/li>\n<\/ul>\n<h3><b>Convenci\u00f3n recomendada para la denominaci\u00f3n de \u00edndices<\/b><\/h3>\n<p>Index Advisor recomienda \u00edndices con una convenci\u00f3n de nomenclatura espec\u00edfica,<\/p>\n<ul>\n<li>adv_field1_field2_field3...<\/li>\n<\/ul>\n<p>Para los \u00edndices de matriz, se a\u00f1ade un gui\u00f3n bajo adicional al final del \u00edndice de matriz para distinguirlos:<\/p>\n<ul>\n<li>adv_[DISTINCT\/ALL]_campo1_campo1.2_campo1.2.3__campo2_campo3...<\/li>\n<\/ul>\n<p>Se recomienda que mantenga la nomenclatura del \u00edndice tal y como se ha proporcionado, ya que esto permitir\u00eda a Index Advisor reconocer los \u00edndices que hab\u00eda recomendado anteriormente frente a los que se han creado por otros medios. En futuras actualizaciones, Index Advisor puede optar por recomendar la sustituci\u00f3n de un \u00edndice, pero s\u00f3lo lo har\u00eda si el \u00edndice que pretende sustituir es uno que ya hab\u00eda recomendado anteriormente.<\/p>\n<h3><strong>Utilizar estad\u00edsticas de \u00edndices \u00daltima hora de exploraci\u00f3n conocida<\/strong><\/h3>\n<p>Su base de datos puede tener muchos \u00edndices para diferentes requisitos de consulta a lo largo de un periodo de tiempo. Pero a medida que se acumulan \u00edndices en su base de datos, existe la posibilidad de que se produzcan duplicados o \u00edndices creados de forma similar. Esto incluye los \u00edndices que ya no est\u00e1n en uso. Puede consultar el valor \"<em><strong>hora_\u00faltima_exploraci\u00f3n_conocida<\/strong><\/em>\"del punto final Index stats rest, para determinar el estado de sus \u00edndices y decidir si debe eliminarlos.<\/p>\n<pre class=\"lang:mysql decode:true\">SELECT ARRAY {\"index_name\":a.name,\"last_scan_time\":millis_to_str(a.val.last_known_scan_time\/1000000)} \r\n          FOR a IN OBJECT_PAIRS(results) END\r\nFROM curl(\"https:\/\/&lt;index_host&gt;:9102\/api\/v1\/stats\",\r\n     {\"user\":\"Administrator:password\"}) results<\/pre>\n<p>Resultados:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6766\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/Screen-Shot-2019-04-24-at-1.43.28-PM.png\" alt=\"\" width=\"633\" height=\"450\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.43.28-PM.png 633w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.43.28-PM-300x213.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/Screen-Shot-2019-04-24-at-1.43.28-PM-20x14.png 20w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/p>\n<h3><b>Resumen<\/b><\/h3>\n<p>Desde la perspectiva del despliegue de aplicaciones, la necesidad de gestionar los \u00edndices no se detiene al final del proceso de desarrollo, sino que es un ejercicio continuo.  De hecho, la gesti\u00f3n de \u00edndices debe tener un ciclo de vida propio. Esto se debe a que el volumen y la forma de los datos pueden cambiar con el tiempo, lo que posteriormente puede requerir cambios en los \u00edndices existentes. En algunos casos, tambi\u00e9n puede ser necesario revisar la construcci\u00f3n de la consulta. El asesor de \u00edndices, por tanto, es una parte cr\u00edtica para la gesti\u00f3n del ciclo de vida del producto.<\/p>\n<p>Algunos puntos clave a tener en cuenta sobre Index Advisor a partir de Couchbase 6.5 (DP)<\/p>\n<ul>\n<li>Tipo de \u00edndice - Index Advisor s\u00f3lo recomienda \u00edndices GSI. No recomienda \u00edndices primarios, ni \u00edndices FTS.<\/li>\n<li>Basado en reglas - En la implementaci\u00f3n actual, el Asesor de \u00edndices recomienda \u00edndices basados en predicados, la lista de proyecci\u00f3n y el orden de las columnas clave. En efecto, se basa en la misma regla que utiliza el planificador de consultas. Al igual que con la optimizaci\u00f3n de bases de datos basada en reglas (RBO), Index Advisor no tiene en cuenta las estad\u00edsticas de la distribuci\u00f3n de datos de las columnas clave. Por esta raz\u00f3n, el usuario debe realizar una evaluaci\u00f3n del rendimiento con los \u00edndices recomendados antes de desplegarlos en un entorno de producci\u00f3n.<\/li>\n<li>Subconsulta: el Index Advisor funciona con subconsultas cuando la consulta s\u00f3lo se encuentra en la cl\u00e1usula FROM.<\/li>\n<li>\u00cdndice de matriz con varias claves: el Asesor de \u00edndices s\u00f3lo recomendar\u00e1 una \u00fanica clave para un \u00edndice de matriz, incluso cuando el predicado haga referencia a varios campos de matriz.<\/li>\n<li>\u00cdndice de partici\u00f3n: Index Advisor no incluye la cl\u00e1usula de partici\u00f3n en el \u00edndice recomendado. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\">creaci\u00f3n de \u00edndices<\/a> declaraciones.<\/li>\n<li>\u00cdndices existentes - Index Advisor no recomienda el redise\u00f1o de \u00edndices existentes, ni recomienda la eliminaci\u00f3n de \u00edndices existentes. El usuario debe utilizar el \u00faltimo tiempo de escaneo del \u00edndice para tomar la decisi\u00f3n.<\/li>\n<\/ul>\n<h3><b>Recursos<\/b><\/h3>\n<ul>\n<li><i>Descargar<\/i>:\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/?family=server&amp;product=couchbase-server-developer\">Descargar Couchbase Server 6.5<\/a><i><\/i><\/li>\n<li><i>Documentaci\u00f3n<\/i>:\u00a0<a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/introduction\/whats-new.html\">Novedades de Couchbase Server 6.5<\/a><i><\/i><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/es\/tag\/6-5\/\"><b>Todos los blogs de 6.5<\/b><\/a><\/li>\n<\/ul>\n<p>Nos encantar\u00eda que nos dijera qu\u00e9 le han parecido las funciones de la versi\u00f3n 6.5 y en qu\u00e9 beneficiar\u00e1n a su empresa en el futuro. Por favor, comparta su opini\u00f3n a trav\u00e9s de los comentarios o en el\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">foro<\/a>.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>As application developers, your main focus is to design the most efficient queries\u00a0 for your application. You want to ensure the integrity of the data that your application pushes to the database, and construct the most efficient queries to retrieve [&hellip;]<\/p>","protected":false},"author":26326,"featured_media":10766,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,9417,1812],"tags":[],"ppma_author":[8919],"class_list":["post-6764","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-performance","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>N1QL Index Advisor: Improve Query Performance, Productivity<\/title>\n<meta name=\"description\" content=\"Couchbase N1QL Index Advisor, a new feature in Couchbase 6.5, provides recommendations for Global Secondary Indexes for N1QL query statements.\" \/>\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-index-advisor-improve-query-performance-and-productivity\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"N1QL Index Advisor: Improve Query Performance, Productivity\" \/>\n<meta property=\"og:description\" content=\"Couchbase N1QL Index Advisor, a new feature in Couchbase 6.5, provides recommendations for Global Secondary Indexes for N1QL query statements.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/n1ql-index-advisor-improve-query-performance-and-productivity\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-09T15:47:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:19:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"636\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Binh Le\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Binh Le\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 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-index-advisor-improve-query-performance-and-productivity\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/\"},\"author\":{\"name\":\"Binh Le\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\"},\"headline\":\"N1QL Index Advisor: Improve Query Performance, Productivity\",\"datePublished\":\"2019-05-09T15:47:43+00:00\",\"dateModified\":\"2025-06-14T03:19:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/\"},\"wordCount\":2508,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png\",\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"High Performance\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/\",\"name\":\"N1QL Index Advisor: Improve Query Performance, Productivity\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png\",\"datePublished\":\"2019-05-09T15:47:43+00:00\",\"dateModified\":\"2025-06-14T03:19:36+00:00\",\"description\":\"Couchbase N1QL Index Advisor, a new feature in Couchbase 6.5, provides recommendations for Global Secondary Indexes for N1QL query statements.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png\",\"width\":1400,\"height\":636,\"caption\":\"A series icons representing performance statistics on a dashboard\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"N1QL Index Advisor: Improve Query Performance, Productivity\"}]},{\"@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\/f89064928e262c71eb43bee996c48c63\",\"name\":\"Binh Le\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"caption\":\"Binh Le\"},\"description\":\"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/binh-le-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Asesor de \u00cdndices N1QL: Mejore el rendimiento y la productividad de las consultas","description":"Couchbase N1QL Index Advisor, a new feature in Couchbase 6.5, provides recommendations for Global Secondary Indexes for N1QL query statements.","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-index-advisor-improve-query-performance-and-productivity\/","og_locale":"es_MX","og_type":"article","og_title":"N1QL Index Advisor: Improve Query Performance, Productivity","og_description":"Couchbase N1QL Index Advisor, a new feature in Couchbase 6.5, provides recommendations for Global Secondary Indexes for N1QL query statements.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-index-advisor-improve-query-performance-and-productivity\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-05-09T15:47:43+00:00","article_modified_time":"2025-06-14T03:19:36+00:00","og_image":[{"width":1400,"height":636,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png","type":"image\/png"}],"author":"Binh Le","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Binh Le","Est. reading time":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/"},"author":{"name":"Binh Le","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63"},"headline":"N1QL Index Advisor: Improve Query Performance, Productivity","datePublished":"2019-05-09T15:47:43+00:00","dateModified":"2025-06-14T03:19:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/"},"wordCount":2508,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png","articleSection":["Application Design","Best Practices and Tutorials","High Performance","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/","url":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/","name":"Asesor de \u00cdndices N1QL: Mejore el rendimiento y la productividad de las consultas","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png","datePublished":"2019-05-09T15:47:43+00:00","dateModified":"2025-06-14T03:19:36+00:00","description":"Couchbase N1QL Index Advisor, a new feature in Couchbase 6.5, provides recommendations for Global Secondary Indexes for N1QL query statements.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-04-25-at-11.13.01-AM_RESIZED.png","width":1400,"height":636,"caption":"A series icons representing performance statistics on a dashboard"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-index-advisor-improve-query-performance-and-productivity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"N1QL Index Advisor: Improve Query Performance, Productivity"}]},{"@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\/f89064928e262c71eb43bee996c48c63","name":"Binh Le","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7","url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","caption":"Binh Le"},"description":"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/binh-le-2\/"}]}},"authors":[{"term_id":8919,"user_id":26326,"is_guest":0,"slug":"binh-le-2","display_name":"Binh Le","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","author_category":"","last_name":"Le","first_name":"Binh","job_title":"","user_url":"","description":"Binh Le es director de producto principal del servicio de consultas de Couchbase. Antes de Couchbase, trabaj\u00f3 en Oracle y dirigi\u00f3 el equipo de gesti\u00f3n de productos para Sales Clould Analytics y CRM OnDemand. Binh es licenciado en Inform\u00e1tica por la Universidad de Brighton, Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6764","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\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=6764"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6764\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/10766"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=6764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=6764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=6764"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=6764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}