esquema:
{
time_utc: "milliseconds",
city: "string",
age: "integer"
}
índice:
{
time_utc: 1,
city: 1,
age: 1
}
consulta de exemplo:
col.aggregate([
{
$match: { time_utc: { $exists: true } city: "new york", age: { $gt: 18 } }
},
{
$sort: { time_utc: -1 }
}
])
Tenho certeza que o índice composto será utilizado nesta consulta, para que a classificação seja eficiente.
No entanto, a $match
etapa /filtragem de documentos não parece eficiente porque podemos assumir que time_utc
é única em toda a coleção.
Suponhamos que haja 1 milhão de documentos no acervo e apenas 10 serão devolvidos. Suponhamos ainda que os 10 documentos estejam localizados na parte inferior da time_utc
classificação.
Neste cenário, a consulta deve varrer todo o valor de 1 milhão do índice para descobrir os 10 documentos. Isso equivale a uma varredura completa da coleção.
Vamos supor o contrário, que existam apenas 2 valores únicos em time_utc
. Neste cenário, parece que o índice para os campos city
e age
pode de fato ser eficaz.
Meu raciocínio está correto?