Hidden Indexes
Nesta página
Os índices ocultos não são visíveis para oplanejador de query e não podem ser usados para dar suporte a uma query.
Ocultando um índice do planejador, você pode avaliar o impacto em potencial do descarte de um índice sem realmente descartá-lo. Se o impacto for negativo, você poderá exibir o índice em vez de ter que recriar um índice descartado.
Comportamento
Além de ficarem ocultos do planejador, os índices ocultos se comportam como índices visíveis; isto é,
Se um índice oculto for um índice único, o índice ainda aplicará sua restrição exclusiva aos documentos.
Se um índice oculto for um índice TTL, o índice continua expirando documentos.
Os índices ocultos são incluídos nos resultados
listIndexes
edb.collection.getIndexes()
.Os índices ocultos são atualizados após as operações de gravação na collection e continuam consumindo espaço em disco e memória. Como tal, eles são incluídos em várias operações estatísticas, como
db.collection.stats()
e$indexStats
.Ocultar um índice exibido ou reexibir um índice ocultado redefine seu
$indexStats
. Ocultar um índice já ocultado ou exibir um índice não oculto não redefine o$indexStats
.
Restrições
Para ocultar um índice, você deve ter featureCompatibilityVersion configurado para
5.0
ou superior.Não é possível ocultar o índice
_id
.Você não pode
cursor.hint()
um índice oculto.
Exemplos
Criar um índice oculto
Para criar um índice hidden
, utilize o método db.collection.createIndex()
com a opção oculto configurada para true
.
Observação
Para usar a opção hidden
com db.collection.createIndex()
, você deve ter o featureCompatibilityVersion configurado para 5.0
ou superior.
Por exemplo, a seguinte operação cria um índice crescente oculto no campo borough
:
db.addresses.createIndex( { borough: 1 }, { hidden: true } );
Para verificar, execute db.collection.getIndexes()
na collection addresses
:
db.addresses.getIndexes()
A operação retorna as seguintes informações:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1 }, "name" : "borough_1", "hidden" : true } ]
A opção de índice hidden
só é retornada se o valor for true
.
Ocultar um índice existente
Observação
Para ocultar um índice, você deve ter featureCompatibilityVersion configurado para
5.0
ou superior.Não é possível ocultar o índice
_id
.
Para ocultar um índice existente, você pode usar o comando collMod
ou mongosh
assistente db.collection.hideIndex()
.
Por exemplo, crie um índice sem ocultar:
db.restaurants.createIndex( { borough: 1, ratings: 1 } );
Para ocultar o índice, você pode especificar:
o documento de especificação da chave de índice para o método
db.collection.hideIndex()
:db.restaurants.hideIndex( { borough: 1, ratings: 1 } ); // Specify the index key specification document o nome do índice para o método
db.collection.hideIndex()
:db.restaurants.hideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, execute db.collection.getIndexes()
na collection restaurants
:
db.restaurants.getIndexes()
A operação retorna as seguintes informações:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1, "ratings" : 1 }, "name" : "borough_1_ratings_1", "hidden" : true } ]
A opção de índice hidden
só é retornada se o valor for true
.
Mostrar um índice existente
Para exibir um índice oculto, você pode usar o comando collMod
ou mongosh
auxiliar db.collection.unhideIndex()
. Você pode especificar:
o documento de especificação da chave de índice para o método
db.collection.unhideIndex()
:db.restaurants.unhideIndex( { borough: 1, city: 1 } ); // Specify the index key specification document o nome do índice para o método
db.collection.unhideIndex()
:db.restaurants.unhideIndex( "borough_1_ratings_1" ); // Specify the index name
Para verificar, execute db.collection.getIndexes()
na collection restaurants
:
db.restaurants.getIndexes()
A operação retorna as seguintes informações:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "borough" : 1, "ratings" : 1 }, "name" : "borough_1_ratings_1" } ]
A opção de índice hidden
não aparece mais como parte do índice borough_1_ratings_1
, pois o campo só é retornado se o valor for true
.
Como os índices são totalmente mantidos enquanto estão ocultos, o índice fica imediatamente disponível para uso quando são exibidos.