Esta é a nossa entrega de junho para Serviço de consultor de índices para o N1QL depois de corrigir alguns dos erros encontrados após nossa última atualização em maio. Planejamos continuar melhorando o serviço Index Advisor(O que é isso?). As correções no Index Advisor que você normalmente veria na próxima versão de manutenção agora estão disponíveis para você todos os meses.
Para quem ele serve? e Quando você deve usá-lo?
http://index-advisor.couchbase.com/
Ao custo de me repetir,
Esse serviço fornece recomendações de índices para ajudar DBAs, desenvolvedores e arquitetos a otimizar o desempenho das consultas e atender aos SLAs. O Index Advisor está disponível como parte da Enterprise Edition, mas esse serviço está disponível gratuitamente para você!
Esse serviço será útil se você:
- Deseja evitar a leitura do criação de índices regrasCompreendê-los e implementá-los para encontrar os índices apropriados para sua consulta/consultas/carga de trabalho.
- Deseja continuar usando o Couchbase Community Edition.
- Está usando um versão mais antiga do Couchbase (versão 5.5, 6.0) e precisa de ajuda para criar os índices certos para suas consultas.
- Deseja gerar conselhos para índices sem criar um bucket ou fazer upload do esquema ou dos dados.
O que há de novo?
Mesmo que você tenha feito o download do servidor Couchbase Server 6.5 e possa usar o Index Advisor do Query Workbench, esse Index Advisor é uma versão mais recente (sem uma interface de usuário de ótima aparência), mas com os seguintes defeitos corrigidos.
1. O Advise não fornece o índice de cobertura para a operação de união.
Com esse aprimoramento, uma consulta como
|
1 2 3 4 |
CONSELHO SELECIONAR t_1.int_campo1 , t_1.decimal_campo1 , t_1.chave_primária_id , t_1.bool_field1 DE balde_01 t_1 INNER JUNTAR balde_04 t_4 ON ( t_1.primary_key_id = t_4.chave_primária_id ) INNER JUNTAR balde_04 t_5 ON ( t_1.primary_key_id = t_5.chave_primária_id ); |
que costumava dar
|
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 29 30 31 32 33 34 35 36 37 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "covering_indexes": [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_4" }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`()", "keyspace_alias": "bucket_04_t_5" } ], "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_4", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_01`(`primary_key_id`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 6. filtro de junção derivada como chave principal." } ] } } }, "query" (consulta): "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1\nFROM bucket_01 t_1\nINNER JOIN bucket_04 t_4\nON ( t_1.primary_key_id = t_4.primary_key_id )\nINNER JOIN bucket_04 t_5\nON ( t_1.primary_key_id = t_5.primary_key_id );" } ] } |
Essa consulta falhou ao fornecer recomendação de índice de cobertura para bucket_01.
agora dá
|
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 29 30 31 32 33 34 35 36 37 38 39 40 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "covering_indexes": [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id_int_field1_bool_field1_decimal_field1 ON `bucket_01`(`primary_key_id`,`int_field1`,`bool_field1`,`decimal_field1`)", "keyspace_alias": "bucket_01_t_1" }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_4;bucket_04_t_5" } ], "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_01`(`primary_key_id`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 6. filtro de junção derivada como chave principal." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_4;bucket_04_t_5", "recommending_rule" (regra de recomendação): { "bucket_04_t_4": "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático.", "bucket_04_t_5": "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." } } ] } } }, "query" (consulta): "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 INNER JOIN bucket_04 t_4 ON ( t_1.primary_key_id = t_4.primary_key_id ) INNER JOIN bucket_04 t_5 ON ( t_1.primary_key_id = t_5.primary_key_id );" } ] } |
2. Às vezes, o Advise retorna uma recomendação de índice vazia
Uma consulta como:
|
1 2 3 4 5 6 7 |
CONSELHO SELECIONAR t_1.int_campo1 , t_1.decimal_campo1 , t_1.chave_primária_id , t_1.bool_field1 DE balde_01 t_1 ESQUERDA JUNTAR balde_05 t_1SiRAdlidCB ON ( t_1.primary_key_id = t_1SiRAdlidCB.chave_primária_id ) ESQUERDA JUNTAR bucket_010 t_1fLjtGGSnKf ON ( t_1.primary_key_id = t_1fLjtGGSnKf.chave_primária_id ) INNER JUNTAR balde_04 t_1GHMwUzdukS ON ( t_1.primary_key_id = t_1GHMwUzdukS.chave_primária_id ) INNER JUNTAR balde_04 t_1LjVrlSNfDc ON ( t_1.primary_key_id = t_1LjVrlSNfDc.chave_primária_id ) ONDE ((t_1.primary_key_id IS NÃO NULL E t_1.int_field1 IS NULL)) OU ((t_1.int_field1 >= 47635891 OU t_1.varchar_field1 IS NÃO NULL)); |
usado para dar
|
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "covering_indexes": [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_05`(`primary_key_id`)", "keyspace_alias": "bucket_05_t_1SiRAdlidCB" }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_010`(`primary_key_id`)", "keyspace_alias": "bucket_010_t_1fLjtGGSnKf" }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_1GHMwUzdukS" }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`()", "keyspace_alias": "bucket_04_t_1LjVrlSNfDc" } ], "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_int_field1_primary_key_id ON `bucket_01`(`int_field1`,`primary_key_id`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 1. Chave principal comum para disjunção (2. igualdade/nula/ausente), 7. não nulo/não ausente/valorizado." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_varchar_field1 ON `bucket_01`(`varchar_field1`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 7. not null/not missing/valued." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_05`(`primary_key_id`)", "keyspace_alias": "bucket_05_t_1SiRAdlidCB", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_010`(`primary_key_id`)", "keyspace_alias": "bucket_010_t_1fLjtGGSnKf", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_1GHMwUzdukS", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." } ] } } }, "query" (consulta): "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 LEFT JOIN bucket_05 t_1SiRAdlidCB ON ( t_1.primary_key_id = t_1SiRAdlidCB.primary_key_id ) LEFT JOIN bucket_010 t_1fLjtGGSnKf ON ( t_1.primary_key_id = t_1fLjtGGSnKf.primary_key_id ) INNER JOIN bucket_04 t_1GHMwUzdukS ON ( t_1.primary_key_id = t_1GHMwUzdukS.primary_key_id ) INNER JOIN bucket_04 t_1LjVrlSNfDc ON ( t_1.primary_key_id = t_1LjVrlSNfDc.primary_key_id ) WHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
Há um índice em branco sendo recomendado, além disso, ele diz que esses índices estão cobrindo, mas não incluem campos do predicado.
agora dá
|
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "covering_indexes": [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_05`(`primary_key_id`)", "keyspace_alias": "bucket_05_t_1SiRAdlidCB" }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_010`(`primary_key_id`)", "keyspace_alias": "bucket_010_t_1fLjtGGSnKf" }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_1GHMwUzdukS;bucket_04_t_1LjVrlSNfDc" } ], "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_010`(`primary_key_id`)", "keyspace_alias": "bucket_010_t_1fLjtGGSnKf", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_1GHMwUzdukS;bucket_04_t_1LjVrlSNfDc", "recommending_rule" (regra de recomendação): { "bucket_04_t_1GHMwUzdukS": "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático.", "bucket_04_t_1LjVrlSNfDc": "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." } }, { "index_statement" (declaração de índice): "CREATE INDEX adv_int_field1_primary_key_id ON `bucket_01`(`int_field1`,`primary_key_id`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 1. Chave principal comum para disjunção (2. igualdade/nula/ausente), 7. não nulo/não ausente/valorizado." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_varchar_field1 ON `bucket_01`(`varchar_field1`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 7. not null/not missing/valued." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_05`(`primary_key_id`)", "keyspace_alias": "bucket_05_t_1SiRAdlidCB", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." } ] } } }, "query" (consulta): "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 LEFT JOIN bucket_05 t_1SiRAdlidCB ON ( t_1.primary_key_id = t_1SiRAdlidCB.primary_key_id ) LEFT JOIN bucket_010 t_1fLjtGGSnKf ON ( t_1.primary_key_id = t_1fLjtGGSnKf.primary_key_id ) INNER JOIN bucket_04 t_1GHMwUzdukS ON ( t_1.primary_key_id = t_1GHMwUzdukS.primary_key_id ) INNER JOIN bucket_04 t_1LjVrlSNfDc ON ( t_1.primary_key_id = t_1LjVrlSNfDc.primary_key_id ) WHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
3. Deve fornecer recomendação com classificação descrita no campo
Uma consulta como
|
1 |
CONSELHO selecionar país de `padrão` onde pro_account=verdadeiro e país = "EUA" ordem por país DESC |
usado para dar
|
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 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "covering_indexes": [ { "<span style="cor: #ff0000;" data-mce-style="cor: #ff0000;">index_statement": "CREATE INDEX adv_pro_account_country ON `default`(`pro_account`,`country`)",</extensão> "keyspace_alias": "default" } ], "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_pro_account_country ON `default`(`pro_account`,`country`)", "keyspace_alias": "default", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 2. igualdade/nulo/ausência." } ] } } }, "query" (consulta): "select country from default where pro_account=true and country = \"USA\" order by country DESC" } ] } |
agora dá:
|
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 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "covering_indexes": [ { "index_statement" (declaração de índice): "CREATE INDEX adv_countryDESC_pro_account ON `default`(`country` DESC,`pro_account`)",</extensão> "keyspace_alias": "default" } ], "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_country_pro_account ON `default`(`country`,`pro_account`)", "keyspace_alias": "default", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 2. igualdade/nulo/ausência." } ] } } }, "query" (consulta): "select country from default where pro_account=true and country = \"USA\" order by country DESC" } ] } |
4. Consultor de índices para combinar informações para a definição de índices duplicados
Removemos a definição de índice duplicado para uma consulta.
Mas há alguns casos em que o índice duplicado pode se aplicar a diferentes keyspace_alias com diferentes regras de recomendação.
Uma consulta como:
|
1 2 3 4 5 6 7 |
CONSELHO SELECIONAR * DE balde_01 t_1 ESQUERDA JUNTAR balde_05 t_2 ON ( t_1.primary_key_id = t_2.chave_primária_id ) ESQUERDA JUNTAR bucket_010 t_3 ON ( t_1.primary_key_id = t_3.chave_primária_id ) INNER JUNTAR balde_04 t_4 ON ( t_1.primary_key_id = t_4.chave_primária_id ) INNER JUNTAR balde_04 t_5 ON ( t_1.primary_key_id = t_5.chave_primária_id ) ONDE ((t_1.primary_key_id IS NÃO NULL E t_1.int_field1 IS NULL)) OU ((t_1.int_field1 >= 47635891 OU t_1.varchar_field1 IS NÃO NULL)); |
usado para dar
|
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_010`(`primary_key_id`)", "keyspace_alias": "bucket_010_t_3", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": "bucket_04_t_4", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_int_field1_primary_key_id ON `bucket_01`(`int_field1`,`primary_key_id`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 1. Chave principal comum para disjunção (2. igualdade/nula/ausente), 7. não nulo/não ausente/valorizado." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_varchar_field1 ON `bucket_01`(`varchar_field1`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 7. not null/not missing/valued." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_05`(`primary_key_id`)", "keyspace_alias": "bucket_05_t_2", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." } ] } } }, "query" (consulta): "SELECT * FROM bucket_01 t_1 LEFT JOIN bucket_05 t_2 ON ( t_1.primary_key_id = t_2.primary_key_id ) LEFT JOIN bucket_010 t_3 ON ( t_1.primary_key_id = t_3.primary_key_id ) INNER JOIN bucket_04 t_4 ON ( t_1.primary_key_id = t_4.primary_key_id ) INNER JOIN bucket_04 t_5 ON ( t_1.primary_key_id = t_5.primary_key_id ) WHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
agora dá:
|
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_int_field1_primary_key_id ON `bucket_01`(`int_field1`,`primary_key_id`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 1. Chave principal comum para disjunção (2. igualdade/nula/ausente), 7. não nulo/não ausente/valorizado." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_varchar_field1 ON `bucket_01`(`varchar_field1`)", "keyspace_alias": "bucket_01_t_1", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 7. not null/not missing/valued." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_05`(`primary_key_id`)", "keyspace_alias": "bucket_05_t_2", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_010`(`primary_key_id`)", "keyspace_alias": "bucket_010_t_3", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." }, { "index_statement" (declaração de índice): "CREATE INDEX adv_primary_key_id ON `bucket_04`(`primary_key_id`)", "keyspace_alias": <extensão estilo="color: #0000ff;" dados-mce-estilo="color: #0000ff;">"bucket_04_t_4;bucket_04_t_5"</extensão>, "recommending_rule" (regra de recomendação): { "bucket_04_t_4": "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático.", "bucket_04_t_5": "As chaves de índice seguem a ordem dos tipos de predicado: 9. predicado de união não estático." } } ] } } }, "query" (consulta): "SELECT * \nFROM bucket_01 t_1 \nLEFT JOIN bucket_05 t_2 ON ( t_1.primary_key_id = t_2.primary_key_id ) \nLEFT JOIN bucket_010 t_3 ON ( t_1.primary_key_id = t_3.primary_key_id ) \nINNER JOIN bucket_04 t_4 ON ( t_1.primary_key_id = t_4.primary_key_id ) \nINNER JOIN bucket_04 t_5 ON ( t_1.primary_key_id = t_5.primary_key_id ) \nWHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
5. O consultor de índices retorna uma recomendação de índice incorreta em uma consulta não solicitada
Uma consulta como:
|
1 2 3 |
aconselhar SELECIONAR meta(t).id _id,t.tipo,ramo.branchId DE teste AS t INÚTIL t.filiais AS ramo ONDE t.tipo é valorizado E ramo.branchId > (t.CurrentBranch-2) ordem por ramo.lastUpdateOn |
usado para dar:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_ALL_branches_type_2 ON `test`(<span style="cor: #ff0000;" data-mce-style="cor: #ff0000;">ALL `branches`,`type`,2<\/span>)", "keyspace_alias": "test_t", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 1. índice de matriz principal para unnest, 7. não nulo/não ausente/valorizado, 9. predicado de união não estática." } ] } } }, "query" (consulta): "SELECT meta(t).id _id,t.type,branch.branchId FROM test AS t UNNEST t.branches AS branch WHERE t.type is valued AND branch.branchId > (t.currentBranch-2) order by branch.lastUpdateOn" } ] } |
agora dá
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "resultados": [ { "#operator": "Aconselhar", "aconselhamento": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes" (índices recomendados): { "indexes" (índices): [ { "index_statement" (declaração de índice): "CREATE INDEX adv_ALL_branches_branchId_type ON `test`(<span style="cor: #0000ff;" data-mce-style="cor: #0000ff;">ALL ARRAY `branch`.`branchId` FOR branch IN `branches` END,`type`<\/span>)", "keyspace_alias": "test_t", "recommending_rule" (regra de recomendação): "As chaves de índice seguem a ordem dos tipos de predicado: 1. índice de matriz principal para unnest, 7. não nulo/não ausente/valorizado." } ] } } }, "query" (consulta): "SELECT meta(t).id _id,t.type,branch.branchId\nFROM test AS t\nUNNEST t.branches AS branch\nWHERE t.type is valued AND branch.branchId > (t.currentBranch-2) order by branch.lastUpdateOn" } ] } |
Experimente e, se tiver algum problema com os índices recomendados pelo Index Advisor Service, você pode adicioná-lo como um comentário a este blog
Mais informações sobre o recurso Index Advisor:
https://www.couchbase.com/blog/index-advisor-service/
https://www.couchbase.com/blog/index-advisor-service-for-couchbase-n1qlfeb-refresh/
https://www.couchbase.com/blog/index-advisor-service-for-n1ql-march-refresh/
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