Nano Hash - криптовалюты, майнинг, программирование

Префикс составного индекса MongoDB с сортировкой

Мне трудно решить, где лучше всего разместить поле сортировки в составном индексе mongodb.

Насколько я понимаю, нам нужно выбрать наивысшую кардинальность и селективность в качестве предшествующих полей в составном индексе.

db.person.createIndex({ rating: 1, name: 1, gender: 1});

В этом примере рейтинг варьируется только от 1 до 5, а пол — M или F. Таким образом, имя всегда имеет наивысшую кардинальность и селективность и должно быть самым левым полем в составном индексе; однако вариант использования для запроса таков, что рейтинг всегда предоставляется в запросе, а имя или пол могут быть дополнительно предоставлены через фильтр в приложении.

Какой вариант лучше подходит для этого случая:

1)

db.person.createIndex({ rating: 1, name: 1, gender: 1});

2)

db.person.createIndex({ rating: 1});
db.person.createIndex({ name: 1, gender: 1});
db.person.createIndex({ gender: 1});

  • По какому полю вы пытаетесь сортировать? 25.01.2020
  • рейтинг всегда предоставляется для сортировки 25.01.2020
  • Трудно что-то сказать, не попробовав реальных запросов и выборочных наборов данных с разными индексами. В целом, поскольку rating используется для фильтрации запросов, а также для сортировки всегда, индекс { рейтинг: 1, имя: 1, пол: 1} можно рассматривать как основной кандидат. Планы запросов (с использованием explain) предоставят достаточно информации для принятия решения. Также см. разделы документации MongoDB по использованию составных индексов для сортировки: Использовать индексы для сортировки результатов запроса. 25.01.2020
  • Отвечает ли это на ваш вопрос? Производительность MongoDB Find: один составной индекс VS два одиночных индексы полей 25.01.2020

Ответы:


1

Вам нужно добавить эти индексы:

// supports query with rating and gender specified
db.person.createIndex({ rating: 1, gender: 1});

// supports query with rating and name (and optionally gender) specified
db.person.createIndex({ name: 1, rating: 1, gender: 1});
13.02.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..