ホームページ  >  に質問  >  本文

mongodb 联合索引和单个字段索引性能那个好些。

现在遇到一个性能问题,解决办法就是给字段加索引,现在纠结的是字段组合索引还是单个索引查询效率问题?

场景
现在查询字段是parentId,key ,两个字段同时查询。

现在见索引的方案是
1 分别给 parentId,key添加索引

2 建一个组合索引 {parentId:1,key:1}这样的方式:

这两个查询性能是不是差不多啊?

求证

为情所困为情所困2747日前795

全員に返信(1)返信します

  • 伊谢尔伦

    伊谢尔伦2017-05-02 09:24:03

    インデックスの効率という点では、複数のフィールドを使用してクエリを実行する場合、多くの場合、結合インデックスの使用を検討する必要があります。
    しかし、物事が完全に絶対というわけではなく、インデックス作成のオーバーヘッドも考慮する必要があります。
    条件を例として、key がレコードを一意に決定できると仮定すると、parentId を追加する必要はありませんか? key能够唯一确定一条记录,parentId是不是就没有必要加上了呢?
    退一步,即使key不能唯一确定一条,如果它能够把结果集确定在一定的小范围内,比如5条记录,10条记录,那parentId 一歩下がって、key が一意に結果セットを決定できない場合でも、5 レコードや 10 レコードなどの特定の狭い範囲内で結果セットを決定できる場合は、parentId この条件は、適切なレコードを見つけるためにこれらの 10 レコードを再度スキャンすることに他なりません。インデックスにレコードを追加することによって発生する書き込み、ストレージ、メモリのオーバーヘッドと比較すると、ユニオンにまったく入れないことを選択することもできます。インデックスにあります。
    条件でフィルタリングできるレコードが多いほど、その「選択性」が向上します。通常の状況では、インデックスを作成するときは、選択性の高い条件を前に配置し、選択性の悪い条件を後ろに配置する必要があります。ひどい場合は入れないでください。
    これは実際には時間と空間のバランスです。インデックスに条件を入れると、時間 (CPU 時間、クエリ時間を含む) とスペース (ストレージ領域、メモリスペースを含む) が決まります。インデックスに含めない条件は、時間とスペースの節約にかかります。ほとんどの場合、後者をいつ選択するかは、実際の状況に対するあなた自身の評価によって決まります。

    返事
    0
  • キャンセル返事