2015-01-27 3 views
1

У меня есть коллекция заказов, которые я запрашиваю таким образом:Каков оптимальный показатель для этого запроса

db.bookings.find({client: sessId, start: {$gte: weekStart}, end: {$lte: weekEnd}}).toArray(callback) 

start и end финики, и поэтому weekStart и WeekEnd. Я не уверен в оптимальном индексе для этого запроса. Это кажется, что это что-то вроде этого:

db.bookings.ensureIndex({client: 1, start: 1, end: -1}) 

или:

db.bookings.ensureIndex({client: 1, start: 1}) 

Спасибо за помощь =)

ответ

0

Я считаю, что оптимальным было бы

db.bookings.ensureIndex({client: 1, start: 1, end: 1}) 

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

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

+1

«как заказ (восходящий или нисходящий) не имеет значения, ища более или менее« я должен признать, что я лично не уверен в этом, у вас есть ссылка или работа, чтобы показать это? Вы не можете выполнять поиск в обоих направлениях по составному индексу, только в особых индексах полей. Кроме того, в действительности диапазон дат может быть в действительности более значительным, чем client_id, в зависимости от истинной избирательности. В основном то, что только он знает. – Sammaye

+0

@Sammaye: Я уверен, что клиент - лучший способ сузить данные в моем приложении. По крайней мере, для большинства случаев. Но хороший момент! Что касается вопроса asc/desc, я тоже не уверен! Я думаю, что дело дело в составном индексе. –

+0

Но, может быть, asc или desc только вопрос, если я хочу * sort * результат. В моем случае сортировка не имеет значения. Я просто хочу найти все заказы в течение недели под определенным клиентом и вернуть их все в один массив. –