Чому індекси
Зрозумійте два ключові моменти.
- Хоча індекс кращий, ніж індекс, правильний індекс набагато кращий за будь-який інший.
- MongoDB використовуватиме лише один індекс на запит, створюючи складні індекси з належним упорядкуванням поля, що ви, ймовірно, хочете використовувати.
Індекси не безкоштовні. Вони забирають пам'ять і накладають покарання за продуктивність, коли роблять вставки, оновлення та видалення. Зазвичай показник ефективності незначний (особливо в порівнянні з підвищеннями продуктивності читання), але це не означає, що ми не можемо бути розумними щодо створення наших індексів.
Як індекси
Визначення групи полів, яку слід індексувати разом, - це розуміння запитів, які ви виконуєте. Порядок полів, які використовуються для створення вашого індексу, є критичним. Хороша новина полягає в тому, що, якщо ви помилилися з замовленням, індекс взагалі не буде використовуватися, тому його легко помітити з поясненням.
Чому сортування
Ваші запити можуть потребувати сортування. Але сортування може бути дорогою операцією, тому важливо ставитися до полів, за якими ви сортуєте так само, як до поля, яке ви запитуєте. Так буде швидше, якщо він буде мати індекс. Однак є одна важлива відмінність: поле, яке ви сортуєте, повинно бути останнє поле у вашому індексі. Єдиним винятком із цього правила є те, що поле також є частиною вашого запиту, тоді правило must-be-last не застосовується.
Як сортування
Ви можете вказати сортування на всіх клавішах індексу або на підмножині; однак ключі сортування повинні бути вказані в тому ж порядку, що і в індексі. Наприклад, шаблон індексного ключа {a: 1, b: 1} може підтримувати сортування на {a: 1, b: 1}, але не на {b: 1, a: 1}.
Сортування повинен визначати той самий напрямок сортування (тобто висхідний / низхідний) для всіх його ключів, як шаблон індексного ключа або задавати зворотний напрямок сортування для всіх його ключів, як шаблон індексного ключа. Наприклад, шаблон індексного ключа {a: 1, b: 1} може підтримувати сортування на {a: 1, b: 1} та {a: -1, b: -1}, але не на {a: -1 , b: 1}.
Припустимо, є ці показники:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?