查看索引排名
Performance Advisor建议的索引按各自的 Impact分数排序。 Impact表示建议的索引将带来的估计性能改进。
Performance Advisor如何对索引提出建议和排名
Performance Advisor监控执行时间超过 100
毫秒的查询,并将这些查询分组为常见的查询结构。 Performance Advisor通过考虑与形状匹配的查询中的以下聚合指标来计算每个查询形状的低效率:
执行查询所花费的时间。
扫描的文档数量。
返回的文档数量。
为了建立推荐索引, Performance Advisor在公式中使用这些指标来计算 Impact,即创建与查询结构匹配的索引将导致的性能改进。 Performance Advisor会将执行特定于索引的操作所花费的时间与部署中的总操作延迟进行比较。 当Performance Advisor建议索引时,索引会按其 Impact 分数进行排名。
索引字段顺序
查询结构中的查询操作类型会影响用于构造索引的字段的顺序。 一般来说,字段按其关联基数进行排名。
下表显示了Performance Advisor如何按相对重要性顺序对各种操作类型进行排名:
限制建议的索引
对于以下情况,Performance Advisor不建议建立索引:
具有超过16个字段,和/或
包含
_id
作为字段键。
此外,Performance Advisor仅在以下情况下建议索引:
对于受影响的查询,扫描的文档和返回的文档之间的差异大于500 ,并且
在过去24小时内,执行受影响的查询累计花费的时间至少为60秒。
索引去重
Performance Advisor会在提出建议之前对重叠索引进行去重。 示例,考虑Performance Advisor是否计算以下潜在的建议索引:
{ a : 1 } { a : 1, b : 1 }
由于{ a : 1 }
是{ a : 1, b : 1 }
的前缀,因此Performance Advisor仅建议使用{ a : 1, b : 1 }
。 有关索引前缀的更多信息,请参阅前缀。
示例:纽约市出租车数据
此示例使用名为cab-db
的数据库,其中包含有关纽约市出租车行程的信息,其中包含上下车时间、行程距离和行程费用明细字段。 集合yellow
中的典型文档如下所示:
{ "_id" : ObjectId("5db9daab0b2a17b7706cd6a3"), "pickup_datetime" : "2014-06-30 02:09:23", "dropoff_datetime" : "2014-06-30 02:20:36", "passenger_count" : 2, "trip_distance" : 3, "fare_amount" : 12, "tip_amount" : 2.6, "total_amount" : 15.6 }
该集合包含超过10万份文档,因此,除非对该集合进行了正确索引,否则需要根据特定字段数据运行查询的应用程序将生成一些效率非常低的操作。
此应用程序的典型查询搜索包含特定还车时间以及一个或多个其他字段的文档。 示例:
db.yellow.find({ "dropoff_datetime": "2014-06-19 21:45:00", "passenger_count": 1, "trip_distance": {"$gt": 3 } })
Performance Advisor建议使用以下索引来提高性能:
注意
默认情况下, Performance Advisor会显示集群中所有集合的索引建议。 要将推荐范围缩小到特定集合,请从Collection下拉菜单中选择一个集合。
推荐的索引按对性能影响从大到小的顺序列出。 在此示例中,第一个推荐索引预计会将整个集群操作延迟时间减少50 %。
第一个建议是在三个字段上建立索引:
passenger_count
dropoff_datetime
trip_distance
单击Create Index按钮,使用任何所需的附加选项创建索引。 要学习;了解有关在Performance Advisor中创建索引的更多信息,请参阅创建建议的索引。
创建此索引后,数据库引擎无需扫描整个集合来查找与查询匹配的文档,从而提高了性能。 具有示例中所示形状的查询在索引集合上会在50毫秒或更短的时间内返回结果,而在未索引集合上则需要几秒钟。
注意
您还可以使用数据浏览器创建索引。