(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

DP-900: como compreender e usar índices em Azure Cosmos DB (Global Secondary Indexes)

João Barros 13 de October de 2026 4 min de leitura

Vou ensinar a competência de DP-900 sobre índices em Azure Cosmos DB — porque perceber a indexação é essencial para obter consultas rápidas e custos controlados no serviço. Esta competência aparece na área de Dados não relacionais no Azure e é importante tanto para o exame como para cenários reais de produção.

O que precisas de saber

Indexação em Azure Cosmos DB é o mecanismo que permite procurar documentos rapidamente sem varrer toda a coleção. Por defeito, Cosmos DB indexa todos os campos de todos os documentos (index policy por omissão), o que torna as consultas rápidas mas pode aumentar custo e latência de escrita. Perceber como controlar a indexação — incluir/excluir caminhos, definir tipos de índices (Hash, Range, Spatial) e níveis de precisão — permite optimizar desempenho e custo.

Exemplo simples: tens documentos JSON com a estrutura {"id": "1", "cliente": {"nome": "Ana", "idade": 30}, "pedido": {"valor": 120.5}}. Se fazes muitas consultas por cliente.nome, deves garantir que esse caminho está indexado. Se tens campos grandes ou frequentemente actualizados que nunca são consultados (ex.: historicoCompleto), deves excluí‑los da política de indexação para reduzir custos de escrita.

Como funciona

Conceitos-chave:

  • Index policy: define quais caminhos são indexados e com que tipo de índice.
  • Index types: Hash (para igualdade), Range (para ordenação e intervalos) e Spatial (para dados geoespaciais).
  • Included / Excluded paths: especificas explicitamente quais propriedades indexar ou não.
  • Consistency with RU costs: indexar mais caminhos aumenta RU/s para operações de escrita; indexar menos reduz custo de escrita mas pode exigir scans para algumas consultas.

Exemplo de index policy (JSON simplificado):

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    { "path": "/cliente/nome/?", "indexes": [ {"kind":"Hash","dataType":"String","precision":3} ] },
    { "path": "/pedido/valor/?", "indexes": [ {"kind":"Range","dataType":"Number"} ] }
  ],
  "excludedPaths": [
    { "path": "/historicoCompleto/*" }
  ]
}

A notação "/prop/?" indica indexação de propriedades escalares naquela rota; "/prop/*" inclui objectos e arrays descendentes.

Na prática

Passo a passo prático para optimizar indexação:

  1. Mapear padrões de consulta: lista as propriedades usadas em filtros, ordenações e JOINs.
  2. Avaliar a frequência de escrita: para campos altamente dinâmicos, considerar excluí‑los.
  3. Escolher tipo de índice: igualdade frequente → Hash; ordenação/intervalos → Range; geoespacial → Spatial.
  4. Definir included/excluded paths na index policy da coleção/container.
  5. Testar com workloads representativos: medir RU/s para escrita e latência de leitura antes e depois.

Exemplo prático com duas queries e ajustes:

// Antes: indexação por defeito => tudo indexado
SELECT * FROM c WHERE c.cliente.nome = 'Ana'

// Se adicionarmos ordenação por valor:
SELECT * FROM c WHERE c.cliente.nome = 'Ana' ORDER BY c.pedido.valor

// Ajuste recomendado: indexar /cliente/nome como Hash e /pedido/valor como Range para suportar ORDER BY sem scans

Notas operacionais: mudar a index policy é imediato para novas escritas; a reindexação de dados existentes pode ser feita automaticamente dependendo da alteração, mas pode ter impacto em RU/s enquanto decorre.

Erros comuns

1) Confiar no default sem verificar: aceitar a indexingPolicy por omissão pode causar RU elevados em escritas se tens campos grandes ou muitas actualizações. Nem sempre o predefinido é o melhor para produção.

2) Excluir caminhos demasiado amplos: usar "/*" em excludedPaths de forma indiscriminada pode impedir que consultas legítimas usem índices, forçando scans e aumentando RU de leitura.

3) Escolher o tipo de índice errado: usar Hash quando precisas de ordenação (ORDER BY) vai impedir que a query seja servida eficientemente pelo índice.

Como praticar

Pratica com um container no Azure Cosmos DB: cria documentos de teste que reproduzam o teu padrão de leitura/escrita, altera a index policy e observa RU/s e latência. Para preparação do exame, usa o Practice Assessment OFICIAL e gratuito da Microsoft e a study guide oficial (ambos gratuitos) — estes recursos ajudam‑te a confirmar que entendes a área de Dados não relacionais. Não uses dumps; pratica com laboratórios e os recursos oficiais.

Em resumo

  • Indexação em Cosmos DB acelera consultas mas aumenta custo de escrita; controla‑a com index policy.
  • Escolhe Hash para igualdade, Range para ordenação/intervalos e Spatial para geoespacial.
  • Inclui apenas os caminhos necessários e exclui campos volumosos/altamente actualizados para reduzir RU.
  • Testa alterações com cargas reais e usa os recursos oficiais da Microsoft para praticar.