gpt4 book ai didi

mongodb - 在MongoDB中,如果一个索引在3个字段上,我们可以在查询2个字段时使用该索引吗? (第三场外卡)

转载 作者:可可西里 更新时间:2023-11-01 10:44:56 24 4
gpt4 key购买 nike

如果有索引

page_type, our_id, date

并且在查询的时候,

db.analytics.find({page_type: 'ingredients', ga_date: 
{$gte : new Date('Wed Sep 08 2010 12:00:00 GMT-0800')}})

db.analytics.find({page_type: 'ingredients', ga_date:
{$gte : new Date('Wed Sep 08 2010 12:00:00 GMT-0800')}}).explain()

如果 our_id 被省略,或者 date 被省略,它仍然可以使用索引,在 explain() 输出中有类似下面的内容:

"our_id" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
],

即使省略了our_iddate,索引仍然可以使用。

但是,当省略page_type时,不能使用索引(如explain()所示)。那么在MongoDB中,当索引的一部分是序列的东西时,比如数字或日期,那么在查询时可以省略吗?在关系数据库中也是如此吗,因为我认为如果该索引基于这 3 个字段,它可能严格地在这 3 个字段上。

最佳答案

这些是 B 树索引,因此它们可用于所涉及列的前缀子集。如果您没有前导列,则不再可能进行索引范围扫描(B 树索引主要用于的操作)。可能还有其他方法仍然使用索引(例如 Oracle 具有快速全扫描和跳过扫描),但通常不会使用索引。

这个推理适用于所有使用 B 树索引的事物,无论是否使用关系数据库。

同样,这不取决于列的类型,而是取决于列在索引中的顺序。您需要有前导列(在您的情况下,您需要 page_type)。如果你有很多没有 page_type 的查询,考虑重新创建以 page_type 作为最后一列的索引(当然这也可能对其他查询产生负面影响)。通常,在设计索引之前,您需要知道要运行的查询类型。

关于mongodb - 在MongoDB中,如果一个索引在3个字段上,我们可以在查询2个字段时使用该索引吗? (第三场外卡),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756725/

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