Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Adicionar índices secundários no metaField e timeField

Nesta página

  • Use índices secundários para melhorar o desempenho de classificação
  • Especificar Dicas de Índice para Coleções de Séries Temporais
  • Índices Secundários da Série Temporal

Para melhorar o desempenho da query para coleções de séries temporais, adicione um ou mais índices secundários para ter compatibilidade com padrões comuns de query de séries temporais. Especificamente, recomendamos que você crie um ou mais índices compostos nos campos especificados como timeField e metaField. Se o valor do campo metaField for um documento, você poderá criar índices secundários em campos dentro desse documento.

Observação

Nem todos os tipos de índice são suportados. Para obter uma lista de tipos de índice sem suporte, consulte Limitações para índices secundários em coleções de séries temporais.

Por exemplo, este comando cria um índice composto nos campos metadata.sensorId e timestamp :

db.weather24h.createIndex({ "metadata.sensorId": 1, "timestamp": 1 })

Dica

Consulte:

As operações de classificação no timeField e metaField podem utilizar índices secundários nestes campos para melhorar o desempenho.

Por exemplo, a seguinte coleção sensorData contém leituras de temperatura:

db.sensorData.insertMany( [
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2022-01-15T00:00:00.000Z"),
"temperatureReading": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2022-01-15T04:00:00.000Z"),
"temperatureReading": 11
},
{
"metadata": { "sensorId": 5579, "type": "temperature" },
"timestamp": ISODate("2022-01-15T08:00:00.000Z"),
"temperatureReading": 9
}
] )

O seguinte comando cria um índice secundário ascendente composto nos campos timestamp e metadata.sensorId :

db.sensorData.createIndex(
{ "timestamp": 1, "metadata.sensorId": 1 }
)

A seguinte operação de classificação no campo timestamp utiliza o índice para melhorar o desempenho:

db.sensorData.find().sort( { "timestamp": 1 } )

Para confirmar que a operação de classificação utilizou o índice, execute a operação novamente com a opção .explain() :

db.sensorData.find().sort( { "timestamp": 1 } ).explain()

O winningPlan.queryPlan.inputStage.stage é IXSCAN, o que indica que o índice foi utilizado. Para obter mais informações sobre como explicar a saída do plano, consulte Explicar resultados.

Sugestões de índice fazem com que MongoDB use um índice específico para uma query. Algumas operações em coleções de séries temporais só podem tirar proveito de um índice se esse índice for especificado em uma dica.

Por exemplo, a seguinte query faz com que MongoDB utilize o índice timestamp_1_metadata.sensorId_1:

db.sensorData.find( { "metadata.sensorId": 5578 } ).hint( "timestamp_1_metadata.sensorId_1" )

Em uma coleção de séries temporais, você pode especificar dicas usando o nome do índice ou o padrão da chave do índice. Para obter os nomes dos índices em uma coleção, utilize o método db.collection.getIndexes().

A partir do MongoDB 6.0 (e 5.0.16):

Observação

Se houver coleções de séries temporais e você precisar fazer downgrade da versão de compatibilidade de recursos (FCV), primeiro descartará todos os índices secundários que são incompatíveis com o FCV rebaixado. Consulte setFeatureCompatibilityVersion.

Voltar

Definir granularidade para dados de série temporal