【发布时间】:2017-11-08 03:21:38
【问题描述】:
我可以通过搜索树来了解 B*Tree 索引的工作原理。
但是,我不明白稀疏索引或密集索引是如何工作的。
例如,如果密集索引需要通过键映射每个值。当您进行搜索时,它将如何受益?
添加更多说明:
这个备用/密集索引指的是 wiki 上描述的索引:
https://en.wikipedia.org/wiki/Database_index#Sparse_index
根据我的理解,索引的工作原理是您可以在 B*Tree 中搜索为 O(logN) 而不是搜索每个块为 O(N)
但是,从稀疏索引或密集索引的描述来看。 我看不出它对搜索有什么好处,你通过键搜索?但是,键的数量与值的数量相同吗? (对于密集索引,它是严格相等的)
我的猜测是密集索引和稀疏索引只是 B*Tree 中使用的索引。但是,我不确定我是否理解正确。因为,我在网上找不到任何东西来证实我的想法。
【问题讨论】:
-
我预计这个问题要么是被 MongoDB 错误标记,要么是您将来自不同数据库的“稀疏/密集索引”概念混为一谈。假设您在 MongoDB 中引用 sparse indexes(与普通索引相反),索引机制的工作方式相同,但仅包含具有索引字段的文档。
-
在 MongoDB 的 sparse index documentation 中有一条注释可能会有所帮助:“不要将 MongoDB 中的稀疏索引与其他数据库中的 block-level 索引混淆。将它们视为具有特定过滤器的密集索引。”
-
您好,感谢您指出这一点。实际上,我将 MongoDB 中的稀疏索引与其他数据库中的块级索引混淆了。现在,我弄清楚了区别。但是,还是。我不明白稀疏/密集索引在其他数据库的块级索引中是如何工作的。
-
@Stennie 虽然我发现了区别。但是,我仍然无法弄清楚备用索引在 MongoDB 中是如何工作的。例如,您有 N 个值,其中字段 x 不为空。那么你将有 N 个键。那么密钥如何帮助您进行搜索呢?键是否必须是哈希(值)?否则,您需要搜索键,我认为搜索值是一样的。对吗?
标签: mongodb indexing b-tree database