gpt4 book ai didi

mongodb - mongodb中的复合索引或单一索引

转载 作者:可可西里 更新时间:2023-11-01 10:04:40 25 4
gpt4 key购买 nike

我有一个像这样的查询,90% 的情况下都会被调用:

db.xyz.find({ "ws.wz.eId": 665 , "ws.ce1.id": 665)

还有一个像这样的被调用次数为 10% 的:

db.xyz.find({ "ws.wz.eId": 111 , "ws.ce2.id": 111)

您可以看到两个查询中两个集合的 id 是相同的。现在我想知道我是否应该只为“ws.wz.eId”创建一个索引,或者我是否应该创建两个复合索引:一个用于{“ws.wz.eId”,“ws.ce.id”}另一个用于 {"ws.wz.eId", "ws.ce2.id"}

在我看来,单一索引是最好的选择;但是我可能是错的;所以我想知道创建复合索引或任何其他类型是否有值(value)。

最佳答案

正如 muratgu 已经指出的那样,推理性能的最佳方法是停止推理并开始测量。

但是,由于测量可能非常棘手,这里有一些理论:

您可能需要考虑一个复合索引{"ws.wz.eId", "ws.ce1.id"} 因为它可以用于 90 % 的情况,对于百分之十的情况,相当于在 ws.wz.eId 上有一个索引。

当你这样做时,第一个查询可以通过索引匹配,第二个查询必须首先找到所有匹配 ws.wz.eId 的候选者(快速,存在索引)然后扫描并匹配所有候选者以过滤掉那些不符合 ws.ce2.id 标准的文档。这是否昂贵取决于必须扫描的具有相同 ws.wz.eId 的文档的数量,因此这在很大程度上取决于您的数据。

一个重要的因素是 key 的选择性。例如,如果有一百万个文档具有相同的 ws.wz.eId,而其中只有一个具有您要查找的 ws.ce2.id,您可能需要索引,或者想要反转查询。

关于mongodb - mongodb中的复合索引或单一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com