gpt4 book ai didi

performance - 就空间消耗而言,MongoDB 复合索引与单字段索引

转载 作者:可可西里 更新时间:2023-11-01 09:36:12 24 4
gpt4 key购买 nike

根据 this后复合索引在维度上更大(我找不到关于文档的太多信息,所以如果你能指出我那里,我将不胜感激)。

假设我必须通过像这样的地址集合来搜索整个地址(我们可以假设我将始终拥有集合和查询中的所有可用字段)

{
name: String,
street: String,
postcode: String,
City: String,
Country: String
}

我的问题是:复合索引应该有多大?如果复合索引比单个字段大,那么将所有值连接到所有对象的散列添加到所有对象,将单个索引添加到散列字段并通过它进行搜索(虽然听起来不像好的做法)?

最佳答案

If a compound index is bigger then a single field wouldn't it be better to add a hash of the concatenation of all values to all objects, add a single index to the hash field and search by that (although it do not sounds like a good practice)?

这些完成不同的事情。复合索引具有顺序,并且该顺序具有效果。例如,索引 { 'country' : 1, 'city' : 1, 'postcode' : 1 } 将允许搜索特定国家特定城市的所有地址。散列不能做到这一点 - 散列支持精确匹配。

我根本不认为这是一种不好的做法,它只是一个非常狭窄的用例。请记住,拼写、额外空格等的每一个细微差异都会导致不同的哈希值,您甚至无法回答简单的问题,例如“我们在 X 国存储了多少个地址?”。但如果您不需要它,为什么不呢?

顺便说一下,MongoDB 内置了对此的支持。如果地址是嵌入的,使用 hashed index on the entire subdocument将完成你所需要的:

MongoDB supports hashed indexes of any single field. The hashing function collapses embedded documents and computes the hash for the entire value,

例如:

> db.hash.insert( {"name": "john", "address" : { "city" : "Chicago", "state":"IL",
"country" : "US" } } );
WriteResult({ "nInserted" : 1 })
> db.hash.createIndex( { "address" : "hashed" } );
...
>
> This query uses the index and finds the document:
> db.hash.find({"address" : {"city" : "Chicago", "state": "IL", "country" : "US" } } );
>
> // this query wont find the document b/c of missing state, but is still fast (IXSCAN)
> db.hash.find({"address" : {"city" : "Chicago", "country" : "US" } } );

关于performance - 就空间消耗而言,MongoDB 复合索引与单字段索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29006888/

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