Монго индексы в деталях
У меня есть коллекция Монго БД, которая выглядит следующим образом
collection {
X: 1,
Y: 2,
Z: 3,
T_update: 123,
T_publish: 243,
T_insert: 342
}
Я должен создать индекс, как
{X: 1, Y: 1, Z: 1, T_update: 1}
{X: 1, Y: 1, Z: 1, T_publish: 1}
{X: 1, Y: 1, Z: 1, T_insert: 1}
Но я вижу, что значения X: 1, Y:1, Z:1 приведут к избыточности, и меняется только параметр времени, который я собираюсь использовать для сортировки. Есть ли лучший способ создать вышеупомянутые индексы, чтобы я не смог создать три отдельных индекса.
Также скажите, если у меня есть индекс, как
{X: 1, Y: 1, Z: 1, T_update: 1}
и я хочу, чтобы Mongo возвращал результат так, что x = 5, y = любое значение, Z = 4, sort = T_update, будет ли полезен вышеуказанный индекс, или я должен создать индекс, такой как
{X:1, Z:1, T_update: 1},
Я надеюсь, что смогу избежать этого.
1 ответ
Ответ здесь будет зависеть от селективности полей, которые вы индексируете - если критерии, которые вы будете использовать для фильтрации X, Y или Z, не очень избирательны, то их можно по существу опустить (или переместить вправо от составной ключ).
Допустим, вы используете фильтр, такой как Y не равен 1, где 1 - редкое значение. Поскольку вы будете обходить почти весь индекс, чтобы получить большинство значений, и сканировать данные, наличие индекса по Y будет менее полезным, чем индекс сначала по сортировке. Учитывая этот сценарий, при сортировке по T_Update, вероятно, было бы полезно иметь такой индекс: {T_update: 1, Y : 1}
,
В конце концов, здесь много и много перестановок с точки зрения того, что может быть наиболее эффективным способом индексации. Реальный способ выяснить лучшие индексы для вашего набора данных - это использовать объяснение () и подсказку () для тестирования различных индексов с вашим конкретным шаблоном запроса и набором данных.