150,000,000 件のレコード データベースに対するクエリを改善するために大規模な作業を行った結果、次のことがわかりました。
必ずしもより高い選択性のフィールドではありませんが、実際には一致するのが「より速い」フィールドであり、最初の位置に移動するとパフォーマンスが大幅に向上する可能性があります
次のフィールドで構成されるインデックスがありました。
郵便番号、住所、都市、名、姓
アドレスは string = string ではなく配列で照合されるため、実行に最も時間がかかり、照合が最も遅くなります。私が最初に作成したインデックスは、address_zip_city_last_name_first_nameで、DB 全体に対して 1000 レコードを照合する実行時間は数時間かかりました。
住所フィールドは実際にはこれらの中で最も選択度が高いと思われますが、単純な文字列の等価性によって照合されていないため、最も時間がかかります。それは実際にはこのようなものになります
{ address: {$all : ["1233", "main", "avenue] }}
このインデックスを最初に「より高速な」フィールドを持つように変更すると、たとえば次のようになります。同じ 1000 件のレコードが、何時間もかかるのではなく、わずか 1 秒で一致します。
これが誰かを助けることを願っています
乾杯