После некоторых обширная работа по улучшению запросов на базе 150-000 000 записей я узнал, что следующие:
не обязательно более высокие поля селективности, но на самом деле поля, которые являются «быстрее», чтобы соответствовать, будучи движимы к первая позиция может повысить производительность резко
Я индекс состоит из следующих полей:
почтовый индекс, адрес, город, имя, фамилия
Адрес подобран в ARRA y, а не string = string, поэтому требуется больше времени для выполнения и является самым медленным для соответствия. Мой первый индекс, который я создал, был: address_zip_city_last_name_first_name, а время выполнения для сопоставления 1000 записей по всей БД будет часами.
Поле адреса на самом деле, вероятно, имеет самую высокую избирательность на них, но поскольку оно не соответствует простому равенству строк, оно занимает больше всего времени. Это на самом деле идет что-то вроде этого
{ address: {$all : ["1233", "main", "avenue] }}
Изменяя этот индекс к иметь «быстрые» поля в начале, например: zip_city_first_name_last_name_address выступление было намного лучше. Те же 1000 записей будут совпадать всего за одну секунду, а не часами.
Надеется, что это помогает кому-то
приветствий
Рискну предположить, что второй показатель лучше, но вы должны проверить это. Запустите объяснение по обоим запросам. –
@SergioTulentsev обновленный вопрос ... объяснить, похоже, одинаково для обоих. –
Вы знаете, как они говорят: «Если вы не видите разницы, их нет». :) –