Vemos em um de nossos serviços que certas consultas sempre resultam em um COLLSCAN
, em vez do índice apropriado ser usado. Os dados têm o formato
{_id: DocumentID, "field": {"child": "Cross-App-ID"}}
com um Índice {"field.child":1}
.
Executar a consulta para "field.child", ou seja, db.collection.find({"field.child":"CA-ID"})
funciona como esperado com o índice sendo usado. No entanto, por algum motivo, o aplicativo que acessa o banco de dados cria as consultas como db.collection.find({"field":{"child":"CA-ID"}})
, o que resulta em um COLLSCAN
em vez de um IXSCAN
.
2 perguntas para mim a partir disto:
- Essas consultas não deveriam ser equivalentes e, portanto, tratadas da mesma forma?
- Como posso criar um índice para o segundo caso de uso? Todos os exemplos que encontrei criam o índice como já fizemos.