Visão geral dos índices
Esta página descreve a indexação do Firestore com compatibilidade com o MongoDB. O Firestore com compatibilidade com o MongoDB não cria índices por padrão. Para melhorar o desempenho do banco de dados, crie índices para as consultas mais usadas.
Os índices têm um grande impacto no desempenho de um banco de dados. Se um índice existir para uma consulta, o banco de dados poderá retornar resultados de maneira eficiente, reduzindo a quantidade de dados que precisam ser verificados e o trabalho necessário para classificar os resultados. No entanto, as entradas de índice aumentam os custos de armazenamento e a quantidade de trabalho realizada durante uma operação de gravação em campos indexados.
Definição e estrutura dos índices
Um índice consiste no seguinte:
- um ID de coleção
- uma lista de campos na coleção especificada
- uma ordem, crescente ou decrescente, para cada campo
Um índice também pode ativar as opções sparse e multikey.
Ordenação do índice
A ordem e a direção de classificação de cada campo definem o índice de forma exclusiva. Por exemplo, os índices a seguir são dois índices distintos e não podem ser trocados:
Coleção | Campos |
---|---|
cities | país (em ordem crescente), população (em ordem decrescente) |
cities | população (em ordem decrescente), país (em ordem crescente), |
Ao criar um índice para oferecer suporte a uma consulta, inclua os campos na mesma ordem da consulta.
Densidade do índice
Por padrão, as entradas de índice armazenam dados de todos os documentos de uma coleção. Isso é conhecido como um índice não esparso. Uma entrada de índice será adicionada a um documento, independentemente de ele conter algum dos campos especificados no índice. Os campos inexistentes são tratados como tendo um valor NULL ao gerar entradas de índice. Para mudar esse comportamento, defina o índice como um índice esparsa.
Índices esparsos
Um índice esparso indexa apenas os documentos na coleção que contêm um valor (incluindo nulo) para pelo menos um dos campos indexados. Um índice esparso reduz os custos de armazenamento e pode melhorar o desempenho.
Índices de várias chaves para valores de matriz
Se você estiver criando um índice em um campo que contém valores de matriz, será necessário criar um índice de várias chaves. Um índice regular não pode indexar valores de matriz. Um índice multichave oferece suporte a até um campo de matriz na definição do índice e pode ser usado para operações que percorrem valores de matriz.
Use índices de várias chaves somente se você precisar indexar valores de matriz. Os índices regulares têm vantagens ao processar uma consulta. Por exemplo, índices comuns podem filtrar valores em um intervalo com mais eficiência.
As situações a seguir levam a erros ao trabalhar com valores de matriz e índices multichave:
- Uma operação tenta adicionar um valor de matriz a um campo indexado por um índice regular. Para adicionar o valor da matriz, exclua os índices regulares atuais nesse campo e os recrie como índices de várias chaves.
- Você tenta criar um índice regular em um campo que contém um valor de matriz. É necessário criar um índice de várias chaves ou excluir os valores da matriz.
- Uma operação tenta indexar vários campos com valores de matriz. Não é possível ter mais de um campo com um valor de matriz em um índice de várias chaves. Para continuar, modifique o modelo de dados ou as definições de índice.
- Você tenta criar um índice de várias chaves em que dois caminhos de campo compartilham um prefixo comum, como
users.posts
eusers.zip
.
Resolver erros de criação de índice
Talvez você encontre erros na criação ao gerenciar seus índices. Uma operação de indexação pode falhar se o banco de dados encontrar um problema com os dados. As operações de indexação podem falhar pelos seguintes motivos:
- Você atingiu um limite de índice. Por exemplo, a operação pode ter atingido o número máximo de entradas de índice por documento. Se a criação do índice falhar, você vai receber uma mensagem de erro. Se você não tiver atingido um limite de índice, tente novamente a operação de índice.
- Um índice de várias chaves é necessário. Pelo menos um dos campos indexados contém um valor de matriz. Para continuar, use um índice de várias chaves ou exclua os valores da matriz.
- Uma operação tenta indexar vários campos com valores de matriz. Não é possível ter mais de um campo com um valor de matriz em um índice de várias chaves. Para continuar, modifique o modelo de dados ou as definições de índice.
A seguir
- Saiba como criar e gerenciar índices.