Доброго дня Подскажите пожалуйста Использую составной индекс, к примеру из 5 полей,

но при выборке, какие-то поля могут отсутствовать (1-е всегда будет, остальные 4 по ситуации, порядок полей в запросе известен)
Прочитал много инфы, но так к верному решению и не пришел...
При выборке главное наличие 1-го поля, что бы индекс использовался (он у меня как раз всегда есть), а дальше, если отсутствует к примеру 3-е поле, то индекс так же будет использоваться? Просто выборка будет последовательно по 1, 2, 4 и 5 полю, без 3-го, либо только по 1 и 2, а поскольку 3-го нет, то и до 4-5 не дойдет?

9 ответов

24 просмотра

составной поможет только при порядке тех полей что в нем, то есть для индекса a:1 b:1 c:1 d:1 будет ускорен только поиск: - a - a, b - a, b, c - a , b, c, d порядок важен, запрос типа find({b: 1, a:2}) не будет ускорен

Артемий-Устинов Автор вопроса
Алексей
составной поможет только при порядке тех полей что...

т.е. если индекс a:1 b:1 c:1 d:1 а запрос у меня find({a: 1, c:2, d:1}) (без b), индекс не будет нормально отрабатывать и для такого запроса потребуется индекс типа a:1 c:1 d:1

Алексей
составной поможет только при порядке тех полей что...

порядок появления ключей в запросе не имеет значения, даже хз откуда эта информация у вас. А вот порядок ключей сортировки как раз влияет на факт участия индекса

Артемий Устинов
т.е. если индекс a:1 b:1 c:1 d:1 а запрос у меня ...

скорее всего будет быстрее чем без индекса. Так же можно немного хитрить и в услвоие выборки указывать явно поле b но указывать ему для значения границы через $gt/$lt таким образом подталкивая планировщик использовать конкретный индекс индекс из этих четырех полей

Артемий-Устинов Автор вопроса
Nick
скорее всего будет быстрее чем без индекса. Так же...

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

Артемий Устинов
интересная хитрость но немного не понял с реализац...

db.getCollection('t_1').find({ a: 1, b: {$gte: MinKey}, b: {$lte: MaxKey}, c: 3 }).explain() хотя по идее достаточно либо мин либо макс, т.к. полностью покрывает Сейчас поигравшись кажется что всетаки это не очень идея и требует проверки на большом объеме данных а не на паре доков как у меня. Так что считайте рекомендацию сомнительной)

Nick
db.getCollection('t_1').find({ a: 1, b: {$...

Не всегда это хорошая идея. Если большой объём выборки, то работает медленнее.

Viktar
Не всегда это хорошая идея. Если большой объём выб...

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

Похожие вопросы

Обсуждают сегодня

Кто знает как подружить Gstreamer с OpenCV? Вот такой пайплайн я шлю с гстримера но OpenCV + python у меня никак не получается его воспроизвести "gst-launch-1.0 nvarguscameras...
Artem
3
Приветствую. Есть N видео объектов (фильмы). Часть полной длины просмотра а часть короткие ( обрезаны титры). Задача найти идентичные фильмы. Я не в курсе, есть ли аналог шаз...
Nikolay Chudinov
7
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
Это везде так работает, или еще колдовать нужно?)
Квадрат Гипотенузы
6
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
Всем привет! Есть камеры для наблюдения с встроенной видеоаналитикой (детектор лиц, например). Как я понял, все вычисления и анализ происходят на самом железе камеры, и пр...
Артур 🌞 Сапрыкин
1
Карта сайта