84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
现在遇到一个性能问题,解决办法就是给字段加索引,现在纠结的是字段组合索引还是单个索引查询效率问题?
场景 现在查询字段是parentId,key ,两个字段同时查询。
现在见索引的方案是 1 分别给 parentId,key添加索引
2 建一个组合索引 {parentId:1,key:1}这样的方式:
这两个查询性能是不是差不多啊?
求证
インデックスの効率という点では、複数のフィールドを使用してクエリを実行する場合、多くの場合、結合インデックスの使用を検討する必要があります。 しかし、物事が完全に絶対というわけではなく、インデックス作成のオーバーヘッドも考慮する必要があります。 条件を例として、key がレコードを一意に決定できると仮定すると、parentId を追加する必要はありませんか? key能够唯一确定一条记录,parentId是不是就没有必要加上了呢?退一步,即使key不能唯一确定一条,如果它能够把结果集确定在一定的小范围内,比如5条记录,10条记录,那parentId 一歩下がって、key が一意に結果セットを決定できない場合でも、5 レコードや 10 レコードなどの特定の狭い範囲内で結果セットを決定できる場合は、parentId この条件は、適切なレコードを見つけるためにこれらの 10 レコードを再度スキャンすることに他なりません。インデックスにレコードを追加することによって発生する書き込み、ストレージ、メモリのオーバーヘッドと比較すると、ユニオンにまったく入れないことを選択することもできます。インデックスにあります。 条件でフィルタリングできるレコードが多いほど、その「選択性」が向上します。通常の状況では、インデックスを作成するときは、選択性の高い条件を前に配置し、選択性の悪い条件を後ろに配置する必要があります。ひどい場合は入れないでください。 これは実際には時間と空間のバランスです。インデックスに条件を入れると、時間 (CPU 時間、クエリ時間を含む) とスペース (ストレージ領域、メモリスペースを含む) が決まります。インデックスに含めない条件は、時間とスペースの節約にかかります。ほとんどの場合、後者をいつ選択するかは、実際の状況に対するあなた自身の評価によって決まります。
key
parentId
インデックスの効率という点では、複数のフィールドを使用してクエリを実行する場合、多くの場合、結合インデックスの使用を検討する必要があります。
しかし、物事が完全に絶対というわけではなく、インデックス作成のオーバーヘッドも考慮する必要があります。
条件を例として、
key
がレコードを一意に決定できると仮定すると、parentId
を追加する必要はありませんか?key
能够唯一确定一条记录,parentId
是不是就没有必要加上了呢?退一步,即使
key
不能唯一确定一条,如果它能够把结果集确定在一定的小范围内,比如5条记录,10条记录,那parentId
一歩下がって、key
が一意に結果セットを決定できない場合でも、5 レコードや 10 レコードなどの特定の狭い範囲内で結果セットを決定できる場合は、parentId
この条件は、適切なレコードを見つけるためにこれらの 10 レコードを再度スキャンすることに他なりません。インデックスにレコードを追加することによって発生する書き込み、ストレージ、メモリのオーバーヘッドと比較すると、ユニオンにまったく入れないことを選択することもできます。インデックスにあります。条件でフィルタリングできるレコードが多いほど、その「選択性」が向上します。通常の状況では、インデックスを作成するときは、選択性の高い条件を前に配置し、選択性の悪い条件を後ろに配置する必要があります。ひどい場合は入れないでください。
これは実際には時間と空間のバランスです。インデックスに条件を入れると、時間 (CPU 時間、クエリ時間を含む) とスペース (ストレージ領域、メモリスペースを含む) が決まります。インデックスに含めない条件は、時間とスペースの節約にかかります。ほとんどの場合、後者をいつ選択するかは、実際の状況に対するあなた自身の評価によって決まります。