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

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

9 ответов

57 просмотров

составной поможет только при порядке тех полей что в нем, то есть для индекса 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
Не всегда это хорошая идея. Если большой объём выб...

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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта