Esta es nuestra entrega de febrero para Servicio Index Advisor después de corregir algunos de los errores encontrados. Tenemos previsto seguir improvisando el servicio Index Advisor(¿De qué se trata?). Las correcciones en Index Advisor que normalmente vería en la próxima versión de mantenimiento ahora estarán disponibles para usted cada mes.
¿Para quién es? y ¿Cuándo utilizarlo?
https://index-advisor.couchbase.com/
A costa de repetirme,
Este servicio proporcionará recomendaciones sobre índices para ayudar a los administradores de bases de datos, desarrolladores y arquitectos a optimizar el rendimiento de las consultas y cumplir los acuerdos de nivel de servicio.
Este servicio le resultará útil si
- Quiere evitar leer el creación de índices normasCompréndalos y aplíquelos para encontrar los índices adecuados para su consulta/consultas/carga de trabajo.
- Aún no desea descargar la última versión del servidor Couchbase 6.5.
- ¿Está utilizando un versión anterior de Couchbase (versión 5.5,6.0) y necesitas ayuda para crear los índices adecuados para tus consultas.
- Desea generar consejos para los índices sin crear un cubo o cargar el esquema o los datos.
¿Qué hay de nuevo?
Incluso si usted tiene el servidor Couchbase Server 6.5 descargado y puede utilizar Index Advisor desde Query Workbench, este Index Advisor es una versión más reciente (sin un gran aspecto de interfaz de usuario), pero con los siguientes defectos corregidos.
1. Asesoramiento sobre índices en el espacio virtual de claves
2. El Index Advisor admite el espacio de claves virtual para las sentencias de borrado/fusión/actualización.
Con estas dos correcciones, una consulta como
|
1 |
advise delete FROM aa where type="beer" ; |
que solía dar
|
1 2 3 4 5 6 7 8 9 10 |
<span style="color: #ff0000">[ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": [] }, "query": "delete FROM aa where type=\"beer\" ;" } ]</span> |
ahora da
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "covering_indexes": [ { "index_statement": "CREATE INDEX adv_type ON `aa`(`type`)", "keyspace_alias": "aa" } ], "indexes": [ { "index_statement": "CREATE INDEX adv_type ON `aa`(`type`)", "keyspace_alias": "aa", "recommending_rule": "Index keys follow order of predicate types: 2. equality/null/missing." } ] } } }, "query": "delete FROM aa where type=\"beer\" ;" } ] } |
3. Index Advisor para eliminar el identificador en la expresión Meta()
Para una consulta del tipo:
|
1 |
SELECT * FROM `beer-sample` d where SPLIT(meta(d).id, ":")[0] like "%cafe" |
obtendríamos
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span style="color: #ff0000">{ "adviseResult": [ { "current_indexes": [ { "index_statement": "CREATE PRIMARY INDEX beer_primary ON `beer-sample`", "keyspace_alias": "beer-sample_d" } ], "recommended_indexes": { "indexes": [ { "index_statement": "CREATE INDEX adv_split_meta_d_id_0 ON `beer-sample`(split((meta(`d`).`id`), ':')[0])", "keyspace_alias": "beer-sample_d", "recommending_rule": "Index keys follow order of predicate types: 9. function index." } ] } } ] }</span> |
Ahora lo hemos modificado a:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "indexes": [ { "index_statement": "CREATE INDEX adv_split_meta_self_id_0 ON `beer-sample`(split((<span style="color: #3366ff">meta(`self`)</span>.`id`), ':')[0])", "keyspace_alias": "beer-sample_d", "recommending_rule": "Index keys follow order of predicate types: 9. like." } ] } } }, "query": "SELECT * FROM `beer-sample` d where SPLIT(meta(d).id, \":\")[0] like \"%cafe\"" } ] } |
para un mejor uso.
4. Consulta: Función de aviso mensaje confuso
Se han sustituido un montón de mensajes de error confusos por explicaciones más verbales y claras.
5. El uso de advise en una consulta que tiene la palabra clave USE index devuelve un error incorrecto
|
1 |
advise select id,url,address,title,city,name,country,public_likes from bucket0 <strong>use index (def_primary)</strong> where some p in public_likes satisfies p like "Ge%" END AND type = "hotel" order by id, url, address, title, city DESC, name, country |
utilizado para dar
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span style="color: #ff0000">[ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": [ { "recommended_indexes": "No index recommendation at this time: no keyspace found." } ] }, "query": "select id,url,address,title,city,name,country,public_likes from bucket0 use index (def_primary) where some p in public_likes satisfies p like \"Ge%\" END AND type = \"hotel\" order by id, url, address, title, city DESC, name, country" } ]</span> |
ahora da
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "covering_indexes": [ { "index_statement": "CREATE INDEX adv_type_DISTINCT_public_likes_id_url_city_name_title_address_country_public_likes ON `bucket0`(`type`,DISTINCT ARRAY `p` FOR p in `public_likes` END,`id`,`url`,`city`,`name`,`title`,`address`,`country`,`public_likes`)", "keyspace_alias": "bucket0" } ], "indexes": [ { "index_statement": "CREATE INDEX adv_type_DISTINCT_public_likes ON `bucket0`(`type`,DISTINCT ARRAY `p` FOR p in `public_likes` END)", "keyspace_alias": "bucket0", "recommending_rule": "Index keys follow order of predicate types: 2. equality/null/missing, 6. array predicate." } ] } } }, "query": "select id,url,address,title,city,name,country,public_likes from bucket0 use index (def_primary) where some p in public_likes satisfies p like \"Ge%\" END AND type = \"hotel\" order by id, url, address, title, city DESC, name, country" } ] } |
También se han añadido algunas pequeñas mejoras.
Pruébalo y cualquier problema que veas con los índices recomendados por Index Advisor Service, puedes añadirlo como comentario a este blog
Más información sobre la función Index Advisor:
https://www.couchbase.com/blog/index-advisor-service/
https://www.couchbase.com/blog/n1ql-index-advisor-improve-query-performance-and-productivity/
https://www.couchbase.com/blog/index-advisor-for-query-workload/
https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/advise.html
https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/advisor.html
https://docs.couchbase.com/server/6.5/tools/query-workbench.html#index-advisor